ღ Miranda

pwnable.kr的PWN挑战之Rookiss(一)

pwnable.kr is a non-commercial site which provides various pwn challenges regarding system exploitation. the main purpose of pwnable.kr is fun.

refer:
https://werew.tk/
http://www.sheepshellcode.com/

brain fuck-150pt

首先把文件放进IDA得到反编译的源码:

可以知道就是可以通过<>.,+-符号来控制指针的前后移动和读写,思路就是通过指针移动泄露函数地址然后覆写GOT表,,由于这题开启了ASLR而且题目给了bf_libc.so文件,可以用来获得函数的偏移地址,再得到泄露的地址,就可以计算库的基地址。

获得偏移:

函数操作的指针p的起始地址可以通过gdb再结合伪代码得到:

0x804a0a0就是p的起始地址。

bfGOT表:

思路就是将putcharGOT表覆盖为main函数的地址,memset覆盖为getsfgets覆盖为system,具体的exp如下:

运行:

md5 calculator-200pt

拿到程序首先反编译:

可以知道输入的最大长度为1024bytes,然后经过base64解码,然而解码后的缓冲区只有512bytes:

这里v3就是解码后的缓冲区,只有0x200(512)bytes,但这题开启了栈保护:

溢出后会导致栈上的cookie改变,从而调用__stack_chk_fail函数退出程序。

如果要覆盖返回地址就会先覆盖到canary值:

观察my_hash函数,发现这里的canary的值参与了captcha的运算:

所以只要有了随机数的种子,也就是时间,再得到验证码,减去其他随机数就可以得到canary的值,题目提示这题的时间和服务器一致,反汇编得到systemexit的地址:

通过修改寄存器值调试得到覆盖返回值的偏移量是528,sh字符串所在地址为0x8048482,脚本如下:

canary.c:

为了使时间一致,可以在pwnable.kr的服务器上运行脚本:

远程的方式可能由于请求服务器时间有延迟所以没有成功。

simple login-50pt

反编译得到:

发现base64解码后的最大长度为12,输入12个a,发现溢出了:

gdb调试,输入abcdefghijkl的编码后的值发现最后四位会覆盖到ebp的值:

所以利用leave ret我们可以控制返回地址,返回0x08049284即可:

可以把ebp覆盖为input的地址:

exploit:

发表评论

电子邮件地址不会被公开。