保护。
开了沙箱。
往这个haystack地方读入随机数。
然后是程序的主体部分。
首先书输入用来ssanf函数
C 库函数 int sscanf(const char *str, const char format, …) 从字符串读取格式化输入。
str – 这是 C 字符串,是函数检索数据的源。
format – 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为 [=%[][width][modifiers]type=]
所以我们根据逻辑很容易得到payload的格式。
首先s第一个单词是get或者post,第二个单词用于后面的命令。
然后后面要跟cookie。cookie最后接上命令的内容。
我们现在的问题是要cookie验证成功。
首先先拿出来了cookie跟token。
cookie后面要跟user=admin。
中间还用了一个sscnaf,后面的格式化字符串是一个正则表达式。
token后面要跟上我们的输入。
当他是空字节的时候,会发生什么我们做了个实验。
看得出来显然空字节直接就会过检查。这就是漏洞点了。
我们token直接等于空字节就可以绕过对token的检查。
那怎么让他是空字节
我们跟踪一次执行流程。
刚输入的时候是没有这个空字节的。
然后在这个地方截断了。就会多个空字节出来。
然后去分析功能。
del函数里面有double free。
剩下的利用就是我们的常规利用了。
因为申请的chunk不能大于0x100,所以我们可以申请多一点的chunk,也可以直接攻击tcache struct。
因为没有show,所以我们需要攻击IO_FILE
因为开了沙箱,所以需要做一个堆的SROP。