1. 题目描述
工控云管理系统项目管理页面解析漏洞
打开链接,是这样的一个界面
我们点击项目管理
可以看到,这里有一个查询界面,还有个view-source的链接,我们点击下view-source,可以看到这里面共有三段php代码
第一段代码需要我们传入的page参数不为index.php时才会包含flag.php
第二段代码说明如果是admin的session的话,只要输入不含特定后缀的文件名,就可以将指定的内容写入到文件中,这里存在文件上传漏洞
第三段代码,则是判断传入的id是否正确,如果正确,则将session设置为admin,这里存在两个判断条件,第一个就是id转化为浮点值后需要不等于‘1’,这里使用的是!==,所以这个条件肯定是满足的,然后条件中也需要id的最后一个字符是‘9’。
好了,一个查询界面还有三段php代码,这就是从题目中能获取的信息了
2. 思路分析
从这几段代码上来看,flag可能存在flag.php中,那么我们就需要读取这个文件,要读取这个文件,就必须将session设置为admin,要将session设置为admin,那么就需要传入正确的id使得sql语句查询到的结果不为空。因此整体思路可以是这样:
1. 看是否能构造出一个正确的id,使得sql查询出来的结果不为空,将session设置为admin
2. 然后利用文件上传将上传特定内容的文件(比如一句话木马),这里要看看是否能够绕过文件后缀的正则校验
3. 通过蚁剑进行连接来获取shell
3. 解题过程
3.1 id设置为1-9,获取到admin的session
这里sql查询是我没想到的点,按理说应该查不出来才是,网上搜索发现对于这一点的解释是这里sql查询可能存在弱比较,忽略了后面的-9
3.2 利用文件上传漏洞上传一句话木马
从代码上看,对后缀过滤得很严格,这时候考虑apache解析漏洞,在apache2.x版本上,php.xxx会被当成php来解析,我们可以利用这一点来绕过后缀的校验,同样也可以通过目录穿越进行绕过
这里将file设置为b.php/1.php/..,这样就绕过了后缀的限制,实际上写入的文件仍然是b.php(这里在burpsuite进行操作时,一定不要将body中的数据进行url编码,否则蚁剑会连接不上)
这样文件就正常上传成功了
3.3 最后使用蚁剑连接获取到flag
使用蚁剑连接如下:
打开该文件,获取到flag为cyberpeace{6c06d2a0ccbbdae70cb51fa61760e66a}
4. 总结
这道题考查的点比较多,但是思路上并不算难,因为源码已经给出来了。这里的难点在于在知道条件的情况下,如何进行绕过。比如如何绕过php后缀的限制,如何绕过id的条件判断保证sql一定能查出来,这些知识点都是有价值的。