Project: 3개의 글

[Django] Shodan 커스터마이징(?)

Posted by push0ebp
2015. 11. 30. 18:45 Project

학교 대회때문에 개발하느라고 활동이 뜸했는데 드디어 오랜만에 포스팅 하게 되었다. 

프로젝트로 쇼단(http://shodan.io)을 쓸 일이 생겨 사용해보았다.


기존 shodan을 보면.


webcam을 많이 검색한거 같아 webcam을 검색해보았다..


이렇게 호스트 리스트가 쭉 뜬다.

ip나 details를 클릭하면



호스트 정보와 서비스가 보인다.

여기서 문제점은 어느 시간에 하나하나씩 클릭해서 details를 보느냐는 것이다.  볼것도 많은데 일일이 보는게 너무 불편했다.

그래서! 나만의 쇼단을 만들게 되었다. (사실 페이지에서 정보만 추가해준 정도다)

그리고 서버는 Django를 사용했다. (원래는 프록시서버로 만드려고했으나 매번 설정하기가 귀찮아서 django로 했다)


그러면 바꾼 쇼단을 보자



메인은 이렇다. (구글..?)

똑같이 webcam을 검색했다.





짠. 필터링까지 깔끔하게 된다.



호스트 정보(포트, 서비스, 응답(배너))

- 기존에 details를 클릭해야 보였던 호스트정보를 한눈에 볼수있도록 옆에 띄웠다.  호스트 정보를 하나씩 가져오는 방식으로, 한꺼번에 모든 호스트 정보를 긁어와 페이지를 뿌려주면 로딩이 매우 느리기때문에 ajax로 로딩 시켰다.

- 포트에 마우스를 올리면 Services와 Response가 바뀐다

-Http나 Https는 초록색으로, telnet과 ssh는 빨간색으로 하여 눈에 잘띈다.

     

인덱스

- 무슨 호스트를 보고있었는지 한눈에 구분할수 있다. (ip로 구분하는것 보다 매우 편리하다 ㅋ)


Copy To Clipboard

- 터미널에 IP를 입력해야 할 때가 많은데 이럴때 IP를 클릭하면 복사된다.


*북마크 (기존 쇼단에 없는 기능)

-중요한 호스트라고 생각될 때 간략한 설명과 함께 서버에 저장 시킬수 있다.


그런데 이래도 불편하다.


Next로 누르면서 페이지를 넘기는게 너무 귀찮다.


그래서 무한 스크롤을 구현하여 스크롤이 맨마지막에 이르면 다음페이지를 로딩하도록 하였다.


마지막으로 앞서 언급했던 북마크 기능이다.



정보와 설명을 간단하게 적고 별 아이콘을 누르면 된다.

검색 바 옆에 Bookmark를 누르면 저장된 북마크를 모아볼수 있다.



간단히 인덱스, 북마크를 등록한 시각과 그 시점에 어떻게 검색하여 나온 결과였는지 쿼리(webcam)를 표시하였다.



검색을 이용하여 필터링도 할수있다.


요즘 해킹을 잠시접고 개발만하니 코딩이 재밌다........ㅂㄷㅂㄷ

이제 교내 공모전도 끝났으니 다시 해킹모드로 돌아가야겠다.

는 시험기간. 이제 시험모드로 ㅠㅠ


(에필로그 : css, js 너무 어렵다 ㅠㅠ )


'Project' 카테고리의 다른 글

[Fuzzer] Debugger with VEH for Themida  (1) 2015.06.27
[Fuzzer] SeulFuzzer (for Themida)  (1) 2015.06.27

[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

[Fuzzer] SeulFuzzer (for Themida)

Posted by push0ebp
2015. 6. 27. 16:52 Project

한 프로그램을 퍼징하려는데 



이런.. 나쁜 더미다 ㅠㅠ pydbg도 걸리고 cdb도 걸리고 attach 해도 프로세스가 죽는다.

window debug api 이용한 디버깅은 모두 탐지하는 것 같다.

그래서 살펴봤다.

콜스택을 보니 0056BE63주소에서 호출하고 있어 따라가봤다.


우웩... fucking themida..


이렇게 isDebuggerPresent API 를 손보면 되긴 하지만 난 멍청해서 퍼저를 수정할줄 모른다 ㅠㅠ

주변분들도 자신만의 퍼저를 하나쯤은 만드셨던데.. 그래서 나도 이참에 그냥 하나 만들어봤다ㅋ



처음엔 이름을 UpFuzzer(엎퍼져)로 지었는데 슬픈일이 많아서 '슬퍼져'로 바꿨다. (아! 슬프다!)


바이너리는 총 3(+1)개

py  ------------------- controller(manager)
exe ------------------- executor
dll  ------------------- debugger & handler & crash reporter

+

radamsa ------------- mutator


py  - 전체적인 흐름을 관리하고 컨트롤하는 매니저 역할 

mutate 된 파일을 넣고 실행, timeout시 프로세스를 종료,  crash 발생시 mutated 파일이나 crash 로그 파일을 정리. 등.

exe - 타겟 프로그램을 실행하고 dll inejection 을 수행한다.

dll - Crash가 발생할 경우 크래시 정보나 레지스터등 로그파일을 저장한다. minidumpwritedump api를 통해 덤프파일 생성이 쉽다.



Themida 2.3.2.0로 타겟 프로그램을 패킹했다.


크래시 파일은 이렇게 저장된다.

disasm 라이브러리를 사용하여 이름에 인스트럭션을 넣었다.


???.... exception이 펑펑 터졌다. 보아하니 더미다 코드에서 발생하는 예외다. delay를 주어서 더미다 initialize 가 끝날때 dll 을 인젝션해야한다. (-d 옵션)


펑펑


그럼 이렇게 깔끔하게 나온다 ㅎ


파일은 "파일이름_퍼징 카운트(몇 번째 퍼징인지).확장자" 형식으로 저장했다. 여기서 카운트는 3이다.





CRASH INFO

REGISTERS

INSTRUCTION

STACK DUMP

아직 구현하지 못한게 많다.


call stack이라던가
module list라던가


이런거 라던가

시험끝나면 짜야지..



[시연 영상]



바빠서 포스팅을 늦게했네요. (근데 다음주가 기말고사인데 바쁜게 맞나?)

디버거가 궁금하신 분은 다음 글을 참조해주세요.

[Fuzzer] Debugger with VEH


아직 Fuzzer를 많이 접해보지 못했고 처음이라 많이 서툴고 부족합니다.

지적, 조언 해주시면 감사하겠습니다.




'Project' 카테고리의 다른 글

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