当前位置:首页|资讯

【pwn8 2022春秋杯春季赛 chunzhiIOT】

作者:K3yB0ard发布时间:2024-09-24

首先看一下程序保护

checksec

保护全开,要么打栈、要么打freehook和mallochook,或者就是打IO。

题目给的libc的2.33版本,该版本freehook和mallochook都可写。最优先选择hook打法,因为代码量最小。

看一下程序逻辑:(部分函数名已经过笔者逆向分析自行编写)

main

main让我们输一些东西然后进入vuln中分析。

vuln

首先定义一个24字节的数组,然后先解析我们的输入,解析后数据放在s中,然后再进入operation函数执行一些东西。

analyse_pkg

这个函数第一次见是需要逆向分析才能看出逻辑,该函数将我们输入当作http请求包进行解析,解析后数据放在s中用于后续程序执行。

输入数据的格式如下:

input_data

首先声明请求包类型,然后是一个请求路径,只要开头为/即可,这个路径没啥用,随便写什么都行,然后后面是http协议版本格式。

下面可选项为一些由:分割的键值对,可以没有。上面每行都需要以\r\n结尾。

最后一行写包内容,结尾不加\r\n。

请求包类型共有以下9种:

请求包类型

解析后的数据s格式如下:

解析后数据

只有前0x18有用,第一个指针存储请求路径,第二个指针为请求包内容content,第三个为表示请求方法的一个标志位,上述9种方法分别对应1~8。

operation

该函数根据解析后的数据来选择执行不同程序逻辑。这里有一个类似http是否已连接的标志,只有连接标志有效,才可以进行其他逻辑,即这里最下面的,需要我们先用DEV请求方法进行连接,需要传入content为rotartsinimda,之后连接标志有效。

其余全部交互均使用POST请求方法,为一个堆的菜单题,有add edit free show四种方法可以用,通过所post的content来决定执行哪种。

content数据格式为使用&分割的多个数据,第一个表示执行哪种操作,后面根据不同的操作为所操作堆块idx、堆块大小、堆块内容等等。

其中delete函数存在UAF漏洞

delete函数

程序分析结束,最大的洞是UAF。攻击思路如下:

1、首先add再free得到一个Unsorted bin,然后show泄露main_arena地址进而得到libc地址。

2、由于2.33版本libc的tcache指针存在加密,则需要泄露堆地址,UAF直接tcache show一下就行,需要手动编写一下堆指针加解密操作。其实就是一个错位异或。

3、tcache attack改写free hook为system

4、free一个内容为/bin/sh的堆块即可getshell

完整exp如下:

脚本执行结果:

exp res

成功getshell。

By  Del0n1x

Keyboard


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1