01
其实对于熊海的cms,网上已经有不少人复现过了,而我做本期文章的目的,1是为了让大家了解审计的思路,2是尽量让所有人能够看懂,3就是让大家尽量了解每一个漏洞的判断方式与特征
02
复现过程如下:
全局审计
我相信大部分的人,很少有喜欢自己通读全文代码的吧,因为文件又多,又不好找,不过这有两个方式解决,第一就是我们可以根据文件名,初步判断这个文件是关于什么的,比如admin就是跟管理员操作有关,include就是一些函数,install就是cms安装之类的,第二种就是我们利用工具,包括我在内的人,我查了一下,大部分都喜欢用seay来进行代码审计
那么废话不多说,先开始审计一波
这一个cms就具有这么多的可疑漏洞,不过还不能确定,所以我们要逐一筛选出,可以利用的,有价值的漏洞
1 文件包含漏洞
我们先来说一下,什么是文件包含漏洞
在官方语言中,是这么说的:
在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP
语言中。
相信看完之后,大伙肯定一脸懵b,因为我第一次看这段文字的时候也傻了,那么我直接给大家演示一下
首先建两个文件,第一个文件1.php格式如下
这串代码b接收id的值,include执行,我们在同一个文件夹下建立一个新的文件
很简单的一句话,输出zac字符,我们到本地网站测试一下
可以看到,执行了zac.txt中的php代码
那么回到这个cms
可以看到,是r来接收值,然后include执行
我们直接在根目录新建一个文件,zac.php
输出<?php phpinfo();?>
然后在网站中构造payload: ?r=../zac,如下
/admin/index.php文件包含同理,这就不在细讲了
2 SQL注入 UPDATE
SQL注入我有一期专门讲过原理,这里就不在赘述了
着重看14,19两行,14行最后使用单引号将navid变量保护起来原因如下:
但是19行并没有任何过滤,所以很容易发现是一个update的sql注入
构造一个payload如下
?r=content&cid=1 or updatexml(1,concat(0x7e,(select concat(
user,0x3a,password) from manage)),1)
我们分析一下这个payload,?r=content这个大家肯定没有问题,cid是在第8行使用转义函数addslashes转义
然后updatexml如下
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
concat函数如下
MySQL中concat函数 使用方法:
CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
0x7e是sql的错误代码
from manage
举个例子,你建了一个表,名字叫zac,然后里面有name,id,age
select * from zac where Age='18';
这句的意思就是从zac中找到所有18岁的
那么函数大家都了解了,我们上传payload
然后剩下的很多都是update报错注入,剩下的不讲了,有兴趣的可以去下载熊海cms源码,然后自己审审试试
s
3 XSS
可以看到,在contact文件下,page只进行了部分的转义
所以我们可以直接构造payload,如下:
?r=contact&page=<script>alert(/ZAC/)</script>
file/list.php
download.php
这两个文件也具有此漏洞,有兴趣的可以找找看
4 存储型XSS
可以看到,昵称未做任何的处理,就存储到数据库中,评论区可以提交昵称,邮箱,网址,头像,内容,但是评论只显示昵称,所以只能在昵称中做payload的
payload如下:
ZAC<img src=1 οnerrοr=alert(/ZAC/);>
本文来源:ZAC信息 微信公众号