반응형
http://skypher.com/wiki/index.php/Hacking/Shellcode/GetPC

GetPC (get Program Counter, also known as GetEIP on x86) code is code that determines its own location in a process' address space. It is commonly used in code that needs to reference itself, for instance in self-decoding and self-modifying code.

CALL GetPC

The easiest way to implement GetPC code on x86 is using the CALL instruction, like so:

$+0: E8 00000000 CALL $+5  ; PUSH $+5 onto the stack $+5: 59 POP ECX  ; ECX = $+5 $+6: ...shellcode...

Because the argument to the CALL instruction is the offset of the code to call, in this case 0, this code contains null bytes. Unfortunately, it is often not possible or practical to inject null bytes into a target process during exploitation. A common trick to get around this is to make the CALL point to a lower address address, making the offset negative, like so:

$+0     EB XX       JMP     SHORT $+N   ; Jump to the call instruction
$+5:    59          POP     ECX         ; ECX = $+N+5
$+6:    ...shellcode...
$+N:    E8 FFFFFFXX CALL    $+5         ; PUSH $+N+5 onto the stack and jump back to $+5

As you can see, this code is null free but this code has two drawbacks:

  1. It is 2 bytes larger than the first example.
  2. The shellcode between the POP and CALL instruction can only be 126 bytes, if you need more room, you will have to jump over the call and put the remainder after it.

There is a second trick to get around these two problems:

$+0 EB FFFFFFFF CALL $+4  ; PUSH $+5 onto the stack and jump to $+4 $+5: C8 59XX XX ENTER XX59,XX  ; Does not get executed like this; see below.

When this code executes, the CALL will jump to the last byte of its own instruction. The code executed after the CALL will therefore be:

$+4: FFC8 DEC ECX  ; Does nothing useful; can be considered a NOP. $+6: 59 POP ECX  ; ECX = $+5 $+7: ...shellcode...

The above code is only 1 byte larger than the first GetPC and puts no constraints of the shellcode following it.

FSTENV GetPC

[todo:References]

A way to retrieve the value of EIP on x86 systems is to use the x87 FSTENV instruction to store the state of the x87 floating point chip after issuing a FLDZ instruction. The structure store in memory by FSTENV will then contain the address of the FLDZ instruction at offset 0x0C of the structure:

$+0 D9EE FLDZ  ; Floating point stores $+0 in its environment $+2 D974E4 F4 FSTENV SS:[ESP-0xC]  ; Save environment at ESP-0xC; now [ESP] = $+0 $+6 59 POP ECX  ; ECX = $+0

This method is also null free and uses the same amount of bytes as the last CALL example.

SEH GetPC

[todo:References]

A third way to write GetPC code is to use the Windows specific Structure Exception Handler (SEH). When an exception happens in a process on Windows, a structured exception is created by the operating system and passed to the first SEH handler to see if it can handle it. If not, the second SEH handler is asked, etc... if no SEH handler handles the exception, the program is terminated because of an unhandled exception. Whenever a structure exception handler is called, it is passed (pointers to) information about the exception on the stack. This information includes the address in memory of the instruction that caused the exception.

It is relatively simple to register a structured exception handler with the OS. If a shellcode can generate a small structured exception handler at a known location in memory and register it before causing an exception, this small structured exception handler would get executed. It could determine the address of the instruction that caused the exception and jump back to the next instruction (the one immediately following it). The code would then continue as normal, only now knowing exactly where it is.[todo:Write an example]

Because the SEH was abused heavily by exploits for various purposes, Microsoft has introduced additional checks on the SEH as mitigation against this abuse with each service pack of Windows XP. These have made writing working SEH GetPC increasingly harder. On Windows Vista, it seems these mitigation make it impractical of not impossible to write working SEH GetPC code. However, it is still possible to write SEH GetPC code on Windows XP sp3. It's even possible to do so using only alphanumeric instructions, which is used in ALPHA3 to create alphanumeric SEH GetPC code.



반응형

'작업공간 > Security' 카테고리의 다른 글

Port Scan  (0) 2012.02.16
디렉토리 리스팅으로 발견한 페이지  (1) 2012.02.09
Snort 룰 설명  (0) 2012.01.31
SQL 인젝션 취약점  (5) 2012.01.26
패킷에서 파일 추출하기 - 2  (2) 2011.12.29
반응형
반응형

'작업공간 > Security' 카테고리의 다른 글

디렉토리 리스팅으로 발견한 페이지  (1) 2012.02.09
[펌]GetPC  (0) 2012.02.06
SQL 인젝션 취약점  (5) 2012.01.26
패킷에서 파일 추출하기 - 2  (2) 2011.12.29
Unpack  (0) 2011.12.29
반응형
설날때 방송했던 "미래소년 코드박"이라는 프로그램..
이거 정말 대박인듯!!


너무 재밌게 봤습니다. 오피스 와이프...
해금 너무 긔엽긔~~ +_+

와.. 정말.. 감정이입 대박.............
정말 오랜만에 감정몰입되서 봤던 프로그램인거 같네요

혹시 못보신 분들은 29일 11시에 재방송을 한다고 하니까.. 꼭 다시 보시기 바랍니다.

반응형
반응형
특정 솔루션에 한해서 먹히긴하지만.......
SQL 인젝션.. 이라고 말하기도 부끄럽다..
아직도 이런게 먹힐 줄이야..

URI에 ' 도 없이 SQL 쿼리를 날렸는데.. 먹히네..

select * from usr

하하..

정리 좀 하고.. 나중에 공개~
우연하게 얻어걸리긴했지만.. 취약점 연구는 재밌는 것~
반응형

'작업공간 > Security' 카테고리의 다른 글

[펌]GetPC  (0) 2012.02.06
Snort 룰 설명  (0) 2012.01.31
패킷에서 파일 추출하기 - 2  (2) 2011.12.29
Unpack  (0) 2011.12.29
Memory String  (0) 2011.12.29
반응형
작년 1월 경, 휘슬 패턴을 추출한적이 있습니다.
지인이 해보라고 해서.. 했던거고.. 그땐 그걸 어떤식으로 사용할 수 있을지를 몰랐더랬죠..
1년이 지난 얼마전에 다시 한번 휘슬 패턴을 추출하였습니다.
역시.. 이번 추출도 공부 목적!!
(단, 저번에는 뚫는데 목적이 있었으나.. 이번엔 웹쉘 탐지패턴을 이해하고자 하는 바램에서.. ^^;)

근데 저번이랑 똑같은 프로그램인데도.. 작년이랑 틀리게.. 너무 쉽게 풀어버렸습니다;;
작년엔 왜 코드의 흐름을 그렇게 생각했을까요? ^^;;

암튼.. 아래가 휘슬 패턴의 일부분 입니다.


너무 작나요? ^^; 클릭하면 크게 보일지도 모르겠네요..

좌측이 작년버전.. 우측이 얼마전에 추출한 버전입니다.
뭔가 이상한게 보이시나요?

네. 패턴 넘버는 똑같은데 패턴이 조금 변경된 것들이 다수 있네요.
네. 패턴이 삭제된 것들이 있네요.
네. 패턴이 추가된 것들이 있네요.

홈페이지에도 패턴 업데이트 관련 공지사항이 없어 언제 업데이트가 된건진 모르겠으나..
업데이트가 되고있고
업데이트 시, 패턴 파일 전체가 업데이트 되는 듯 싶으며..
꾸준히 관리하면서 오탐나는 패턴은 수정/삭제가 이루어지는 듯한 모습이네요.

올해 추출한 패턴은 1144개.
구체적으로 추가/변경/삭제 된 패턴은 비교분석해봐야 알겠지만.. 이 또한 공부가 많이 되겠네요 ^^


반응형
반응형
저번에는 수작업을 통해 파일을 추출하는 방식을 썼었습니다..
근데 알고보니.. 그 기능은 이미 Wireshark에서 지원되는 있는 기능이더라고요..

그래서 오늘은 간략하게 Wirtrshark로 파일을 추출하는 것을 써볼까 합니다.

일단 Wireshark로 cap파일을 Open 합니다.
이후 아래 그림처럼 File -> Export -> Objects -> HTTP 선택합니다.


선택하면 아래와 같은 창이 뜨는데 원하는 파일을 선택하고 우측 하단에 Save As 를 클릭하시면 됩니다.


어때요~ 쉽죠? ^^;




반응형

'작업공간 > Security' 카테고리의 다른 글

Snort 룰 설명  (0) 2012.01.31
SQL 인젝션 취약점  (5) 2012.01.26
Unpack  (0) 2011.12.29
Memory String  (0) 2011.12.29
AET  (0) 2011.10.31
반응형
마땅한 샘플을 못찾아서..
글로만 설명하는 아주 지루한 시간이 되겠습니다.

저도 잘 못풀긴 하지만..
디버거를 자주 사용하지 않았던.. 사람들은 저보고 어떻게 푸냐고 묻습니다.

제가 푸는 방식은.. 순전히 제 경험에 의해 만들어진 것이기 때문에.. 설명드리기가 생각보다 쉽지 않습니다.
설명을 못한다는 것은 결과적으로 제가 모르는 것이기 때문에 다른 사람에게 설명을 할 수 있게끔 고민을 했었고..
그 방법을 설명을 해줬으나.. 제가 너무 어렵게 이야기 하는건지..
물어봤던 사람들이 디버깅에 관심이 없어서 못하는건지.. 다들 못하시더라고요 ^^;

일단!! 제가 설명해주는 Unpack을 하기 위해선.. 몇가지 선지식이 있어야 합니다.
1. Unpack 이란?
2. Unpack 원리
3. 일반적인 Stratup Code

이 정도 알면 많은 악성코드들을 Unpack 할 수 있을거 같네요. (그..그렇게 많이는 아닐지도요 ^^;)

방법은 아주 간단합니다.
1. OllyDBG 로 샘플을 Open 한다.
2. bp ExitProcess 또는 적절하게 코드가 다 풀릴때까지 실행한다.
3. 압축이 풀린 코드영역에서 일반적인 Startup Code에 자주 쓰이는 API를 검색한다.
4. Startup Code이기 때문에 그곳이 바로 Startup Function이며, 가장 상위에 있는 코드가 OEP일 것이다.

나머지는.. 심슨아저씨(Import REC)에게 부탁을 하거나 수작업으로 슥슥.. 처리해주시면 됩니다.

이 방식은.. 압축을 어떤 방식으로 했는지는 전혀 관계가 없는 방식입니다.
Unpack 코드를 확인하지 않기 때문에 어느정도 Hole 이 있는 방식이긴합니다.

하지만.. 쉽기 때문에.. 약간의 지식만 있다면 누구나 다 할 수 있는 방식이라고 생각하는데.. 아닌가요? ^^;




반응형

'작업공간 > Security' 카테고리의 다른 글

SQL 인젝션 취약점  (5) 2012.01.26
패킷에서 파일 추출하기 - 2  (2) 2011.12.29
Memory String  (0) 2011.12.29
AET  (0) 2011.10.31
TOP 100 Shells  (0) 2011.07.06
반응형
기본 정보를 수집할 때, 일반 String 보다는 아무래도 Memory String을 보는게 도움이 되는 경우가 많다.
일반적으로 프로세스가 떠 있을 경우, Sysinternals Tool을 이용하면 쉽게 덤프를 생성할 수 있다.

하지만!! 프로세스가 죽고 다른 프로세스에 Injectoin 될 경우, 찾는데 어려움을 겪을 수 있다.

곰곰히 생각해보면 프로세스가 죽기전에 Memory dump를 생성하고 String을 확인하면 될 것 같다.
프로세스를 제어하기 위해 디버거를 사용하면 비교적 쉽게 진행 할 수 있다.


OllyDBG를 다운 받은 이후, commandbar 플러그인을 설치하면 위 그림과 같이 입력할 수 있는 창이 생성된다.

이때 bp ExitProcess 라고 치고 엔터!!
 - bp = BreakPoint, 특정 부분에서 멈추고 싶을 때 사용한다.
 - ExitProcess = 프로세스가 종료 될 때, 사용되는 API

위 명령의 뜻은 "프로세스가 종료되기 전, 종료 루틴을 실행할 때 멈춰라!!" 라는 의미다.
저렇게 해놓고 실행(F9) 시키면 해당 프로세스가 종료되기 전에 멈추게 되며,
OllyDBG나 Sysinternals Tool을 이용하여 dump를 생성하면 된다.

초간단!!


반응형

'작업공간 > Security' 카테고리의 다른 글

패킷에서 파일 추출하기 - 2  (2) 2011.12.29
Unpack  (0) 2011.12.29
AET  (0) 2011.10.31
TOP 100 Shells  (0) 2011.07.06
코어덤프 확인 및 생성방법  (2) 2011.06.20
반응형
FM 2012 한국어 예판 도착!!

오늘부터 잠은 다 잤다 ㅠㅠ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


반응형

'My Life' 카테고리의 다른 글

사이버공격 시나리오 공모전  (6) 2012.06.11
감사합니다.  (9) 2012.02.17
면접.  (2) 2011.12.07
IOS 5.0 으로 판올림 Upgrade.  (0) 2011.10.13
프로그래밍 설계  (0) 2011.05.08
반응형
면접이란 장소에 제가 들어갈 정도의 실력도 안되기 땜시롱.... 면접은 항상 저랑 관련이 없는 단어입니다 ^^;
근데 제 아래에서 저랑 같은 일을 할 사람을 뽑으려고 하니...

저한테 이야기가 오네요;;

뭐 어찌저찌해서.. 최근에 한분에게 Stack Overflow Exploit 을 exploit-db.com에서 받아서 줬었는데..
보고서를 받아보고 이야기를 나눠본 결과.. 꽝꽝꽝!! 이였습니다. ^^;;

제가 하는 일이 악성코드 분석과 리버스 엔지니어링.. 인데
1. 열정이 없다는걸 느꼈고
2. 하고 싶은 일이 뭔지도 모르는 사람이였고
3. 악성코드 분석 기술은 학원에서 배운 그 이상, 그 이하도 아니였으며
4. 퀘스천(?)이 없었으며
5. 저보다 나이가 많으셨습니다. (음??)

어떻게 보면 1,2,4는 똑같은 내용이죠.
하지만 리버스엔지니어링 같은 일을 할때는 꼭 필요한 부분이지 않나 싶습니다.
어떻게 보면 다른 말로는 문제인식 능력과 문제해결 능력(?)노력(?) 부족이랄까요? ^^; 뭐.. 이건 사실 제가 많이 부족합니다.. ㅎㅎ

결론적으로 그 분은.. 입사하지 못하셨습니다.
( 혹시라도 이 글을 보신다면.. 죄송합니다.. 제가 싫다고 했습니다. (__) 아직은 좀 더 많은 부분을 폭넓게 생각하시고 공부하실 때라고 판단되었습니다. ^^; )

요즘 하반기 공채가 진행되고 있더라고요..
이사님께서 오늘도 저를 보시면서 이런 말씀을 하시고 지나가시네요..
"이번 공채도 저번처럼 시험 봐. 공평하게 해야지"

^^;;;;;

제 아래 자리 들어오면 힘드실꺼예요..
제가 좀 까탈스럽고.. 귀차니즘쟁이라서.. ^^;

혹여라도 저희 회사 입사 준비하시면서 제 글을 보신다면.. 1,2,3,4 번을 알아서 쏙쏙~ 피해가시고..
메모리구조, 프로그램의 흐름, 컴퓨터 구조 등과 같이 기본에 충실히 공부를 해오시면 좋을것 같습니다.

디버깅하는거야.. 입사해서 집에 안가고 매일 야근하면서 배우면 되니까요 ㅇ_ㅇ
기초 튼튼~*

반응형

'My Life' 카테고리의 다른 글

감사합니다.  (9) 2012.02.17
FM2012 예판 도착  (9) 2011.12.15
IOS 5.0 으로 판올림 Upgrade.  (0) 2011.10.13
프로그래밍 설계  (0) 2011.05.08
Bye CCNA  (3) 2011.05.06

+ Recent posts