티스토리 뷰

Reversing

[Reversing] APC Injection_QueueUserAPC()

정짱 정뚱띵 2019. 12. 6. 14:07

[Reversing] APC Injection_QueueUserAPC()


QueueUserAPC()의 인자를 적절하게 넣는다고 하여도 스레드(hThread) alertable 상태일 때 QueueUserAPC()가 호출이 되는 조건이 있다. 그렇듯이 스레드가 alertable 상태되는 조건으로는 sleep(), wait() 관련 API를 통해야 된다는 것을 알고 있어야 하며 아래와 같다.

(SleepEx, WaitForSingleObjectEx, WaitForMultipleObjectsEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx)


내용을 정리하면 위 함수 중 하나를 호출하여 스레드가 alertable 상태로 만들어진다는 걸 알 수 있으며, 대상 프로세스(calc.exe)의 스레드가 APC queue에 있다면 쉘코드가 실행된다는 것을 알 수 있다.

, sleep(), wait() 관련 API를 통해 스레드(hThread) alertable 상태가 되어야 QueueUserAPC()가 호출이 되어 APC Injection이 가능하다는 걸 알 수 있다.

OpenProcess() 대상 프로세스 핸들 Get

VirtualAllocEx() 대상 프로세스 버퍼 할당

WriteProcessMemory() 쉘코드 삽입

Thread32Next() & OpenThread() → 스레드 검색, 오픈

QueueUserAPC(hThread)의 스레드 상태 alertable O

QueueUserAPC(hThread)의 스레드 상태 alertable X

QueueUserAPC(lpBaseAddress(쉘코드), hThread(argv[1]), NULL)

호출(Injection 성공)

QueueUserAPC() error & 재시도

1 – APC Injection 단계


(그림 1)msfvennom을 이용하여 쉘코드 생성과 APC Injection을 실행하여 인젝션 된 결과를 보여주는 것을 확인 할 수 있다.

그림 1 – APC Injection 실행 화면


첨부파일

'Reversing' 카테고리의 다른 글

[Reversing] VirtualProtect BreakPoint  (0) 2020.01.03
[Reversing] RTF, OLE, Open XML  (0) 2019.12.20
[Reversing] APC Injection_QueueUserAPC()  (0) 2019.12.06
[Reversing] 서비스 디버깅  (0) 2019.12.02
[Reversing] CSIDL Values  (0) 2019.11.28
[Reversing] API 동적 로딩 기법  (0) 2019.11.25
댓글
공지사항
«   2020/01   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Total
137,274
Today
0