나혼자 공부장

[LOB] Level18 'succubus' write-up 본문

pwnable/LOB

[LOB] Level18 'succubus' write-up

라부송 2019. 12. 7. 01:10

nightmare.c

소스 파일을 봤을 때, 알 수 있는 제약 사항은 두가지다.


1. strcpy 함수 주소로 리턴을 받아야 하고

2. strcpy 함수 이후 공간에는 AAAA 를 넣을 것이니 리턴받을 strcpy 함수를 이용해 뭔가 익스플로잇을 해야한다.


 

nightmare stack

일단 스택은 이렇게 생겼을 것이다.

제약사항들을 고려해서 시나리오를 구상해보자.


1. buffer+sfp의 44바이트를 system("/bin/sh") 공간으로 채우고

2. strcpy로 리턴을 받은 후

3. strcpy의 인자로는 destination은 RET+4, source는 &buffer로 전달해준다면

4. strcpy가 실행되면서 AAAA의 공간을 buffer의 주소로 채워주기 때문에

5. strcpy 종료 후 buffer 주소로 RET

6. buffer 주소에 있었던 system("/bin/sh") 실행

7. my-pass 입력, pw 획득


 

요약하자면 위 스택처럼 만들겠다는 의미이다.

시나리오대로 구성하려면 필요한 재료는 다섯가지다.

 

strcpy

system

/bin/sh

&buffer

RET+4

 

하나씩 구해보자.

strcpy, system

strcpy - 0x8048410

system - 0x40058ae0

/bin/sh - 0x400fbff9

&buffer - 0xbffffa90

RET+4 - 0xbffffa88

 

 

그렇다면 위에서 그렸던 스택 구조를 참고해서 페이로드를 짤 수 있다.

`python -c 'print "\xe0\x8a\x05\x40"+"dumm"+"\xf9\xbf\x0f\x40"+"\x90"*32+"\x10\x84\x04\x08"+"dumm"+"\x88\xfa\xff\xbf"+"\x90\xfa\xff\xbf"'`

문법도 전부 체크하고 몇 번이나 시도를 해봤으나 되지 않았다.

아마 주소를 모두 복사본 기준으로 구했다 보니 원본과 주소가 조금 달랐을 수도 있겠다.

'pwnable > LOB' 카테고리의 다른 글

[LOB] Level 5 'orc' write-up  (0) 2019.12.05
[LOB] Level9 'troll' write-up  (0) 2019.12.05
[LOB] Level 2 write-up  (0) 2019.11.27
Comments