[YISF 2014] Binary 400(Window Kernel) Write up +100~300

Posted by push0ebp
2015. 7. 24. 00:31 Hacking/CTF

2015 순천향대 YISF가 얼마 남지 않았네요.

푼지 오래 된거지만 파일 공유겸 좋은 성적 거두시라고 풀이 써봤습니다.


400.sys


BINARY.zip

100~300 Write up


Hint


Solve


Key


파일은 문제가 된다면 삭제하겠습니다.


좋은 결과 있으시길 바랍니다.


[Windows] Shared Memory

Posted by push0ebp
2015. 7. 23. 22:58 ETC

CTF문제 풀다 알게된 지식.

말그대로 공유 메모리이다.

OS : Windows 7 32bit


DWORD d_sharedM = 0x7ffe0800; // A User Address 유저 레벨 주소

DWORD d_sharedK = 0xffdf0800; // A Kernel Address 커널 레벨 주소



커널 메모리에 접근할수 있도록 커널 드라이버를 로드시켜서 0xFFD0800주소에 라이팅을 해보았다.





분명 0x7FFFFFFF 커널을 넘지않고 유저레벨 주소가 확실한데 메모리가 같다.

신기하게 Physical Address도 같다.




여기도 같다.





여기 까지.


Size : 0x1000

0xFFDF0000 ~ 0xFFDF1000

0x7FFE0000 ~ 0x7FFE1000

가 Shared Memory이다.


+다른 프로세스(모든 프로세스)도 값이 같다.

[Fuzzer] Debugger with VEH for Themida

Posted by push0ebp
2015. 6. 27. 17:43 Project

이전글

[Fuzzer] SeulFuzzer (for Themida)

이 퍼저의 디버거는 pydbg가 아닌 VEH을 이용한 방법을 사용한다.

PVOID WINAPI AddVectoredExceptionHandler( _In_ ULONG                       FirstHandler, _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler );


이 함수는 예외가 발생 할 때 처리해주는 핸들러(ExceptiinHandler)를 등록 한다.

프로그램에서 try except로 예외 처리를 해도 가장 먼저 등록한 핸들러로 넘어가기 때문에 모든 exception

을 컨트롤 할 수 있다.

그리고 웬만한 Anti-Debugging에 탐지 되지 않는다.


그런데 ExceptionHandler에도 우선순위가 있다.

스택구조와 같은데 가장 최근에 등록한 핸들러가 가장 먼저 처리된다.


예를 들면

ExceptionFilter1

ExceptionFilter2

ExceptionFilter3

이렇게 등록했을때


ExceptionFilter3

ExceptionFilter2

ExceptionFilter1

순으로 처리 된다.


그래서 내가 등록한 후에 다른 핸들러가 등록되지 못하도록

xor eax, eax

ret 8 로


이렇게 무력화 시켰다.


보통 C로 디버거를 구현할때 DebugActiveProcess() 등 window api를 여러게 쓰면서 코딩하곤 한데

이 디버거 코드는 이 몇 줄이 끝이다.

dll injection을 이용하면 같은 프로세스 안에 상주하기때문에 정보도 얻기 쉽고 디버거도 짜기쉽다.

그리고 저 핸들러내에서 minidumpwritedump 함수를 사용하여 덤프파일을 쉽게 생성 할 수 있다.


-단점

1. 데이터 공유가 어렵다. (python <> dll)

2. 불필요한 exception까지 잡힌다.

- 인젝션 한 모듈에서 exception이 일어나면 등록한 handler로 넘어간다. 그래서 내 바이너리 .text에서 발생한

exception인지 판별해야한다.

하지만 이 방법은 버그로 인해 저 범위내로 eip가 변조되면 제외되기 때문에 리포팅하지않아 유실되는 문제

가 발생할수있다. 그게 exploitable한 취약점이였다면 더 큰 문제...

(임시방편으로 해둔건데 다른 방법을 생각해봐야겠다....)



저는 이 방식이 편해서 사용한거니 꼭 VEH를 사용할 필요는 없습니다.
Anti-Debugging api hook 하셔도되고 편한 방법을 찾으시길 바랍니다.



'Project' 카테고리의 다른 글

[Django] Shodan 커스터마이징(?)  (0) 2015.11.30
[Fuzzer] SeulFuzzer (for Themida)  (1) 2015.06.27