“安康杯” 青年网络安全技能大赛
之前帮上海的一队培训awd,他们就是培训的下一周要参加这个竞赛了。虽然他们的pwn 能力没有提高很多,但是patch是会了,最后也是取得了一个不错的成绩。
附件可以从CTFWriteup的Releases 下载。
chall
比赛里有唯一一道awdp pwn题,程序里有后门,patch掉就过了。但是漏洞不止一个。
文件属性
属性 | 值 |
---|---|
Arch | amd64 |
RELRO | Full |
Canary | on |
NX | on |
PIE | on |
strip | no |
潜在漏洞点
漏洞点一:后门
在chall_menu
中可以输入数字,只要等于0xaaadbeef
就可以进入后门,写一段shellcode。
参考修复方案:
使用无条件跳转指令jmp
跳过后门函数。
1 | @@ -13cd,18 +13cd,18 @@ |
参考攻击方案:
输入该数字,并输入一段shellcode拿shell。
漏洞点二:信息泄露
向NAME
上读取了0x20字节,由于紧邻RANDBUF
且打印NAME
时使用puts
,
因此刚好输入0x20字节可以在打印时泄露RANDBUF
上放的指针,泄露程序基址。
参考修复方案:
修改读取大小为0x1f。
1 | @@ -12f7,16 +12f7,16 @@ |
参考攻击方案:
输入0x20字节后执行print_username
推算出程序基址,然后使用set_username
设置NAME
为"/dev/zero"
,同时设置RANDBUF
指向NAME
。这样在game
中猜数时,
就会打开/dev/zero
,读取出4个0x00,只要猜数字是0就可以继续到chall2
。
漏洞点三:UAF
在copy
函数中,如果指定源索引和目标索引为同一个,那么由于其对应的size是一致的,
指针会被保存下来并在free后还原回去,从而造成UAF。
参考修复方案:
验证源堆块和目标堆块大小时,只允许目标堆块比源堆块大,避免使用同一个索引。(偷懒了)
1 | @@ -f12,e +f12,e @@ |
参考攻击方案:
利用同一个索引造成UAF,泄露堆指针,然后如法炮制,多释放几个。接着申请堆块放上任意分配的地址,
用copy
把任意分配地址写到bin里,就可以进行下一步利用(泄露libc/打free_hook等)
- 标题: “安康杯” 青年网络安全技能大赛
- 作者: RocketDev
- 创建于 : 2024-12-25 19:01:00
- 更新于 : 2024-12-27 13:01:00
- 链接: https://rocketma.dev/2024/12/25/ankangCup/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。