前几天白嫖了XRAY的高级版,因此试着利用XRAY + AWVS的形式来看看能不能找到CNVD上公布的问题CMS的漏洞。
我们都知道cnvd发布突破公告的时候是没有详细细节的,因此只能根据突破的种类自己去寻找突破点,如果cnvd公告里有存在突破文件的名称,相对于简单一点,但是没有的话,就相当于从头自己去审核整套系统,于是就找到了一个小型CMS当做演示:
本文以cms的突破挖掘为基础,然后说说自己使用的感受。
XRAY + AWVS如何配置的,我就不在这里详细解析了,官网上已经写得很清楚了,有兴趣可以看:
https://chaitin.github.io/xray/#/scenario/awvs
需要注意两个点:
然后就可以下载CMS进行建造,,建造过程也比较简单,因此没有多余的述,下载地址可见:
https://github.com/chilin89117/ED01-CMS
安装好后就可以添加扫描了。
首要是首先在本地运行起xray,命令如下:
./xray webscan --listen 0.0.0.0:1111 --html-output awvs.html
这里的端口可以自己设定,某些我设定的就是8888:
然后添加已经建造好的CMS的地址:
因为是测试环境,所以我们可以开启登陆选项:
说不定挖掘的东西更多
其他配置就和XRAY官方介绍的一样,代理模板的端口要和你xray监听的端口一致:
点击爬虫模式扫描,创建后,就可以正式扫描目标地址了:
如下图,xray很快就接受到地址,并开始检测:
最终扫描结果如下:
#Plugin / VulnTypeTargetCreateTime#1xsshttp://192.168.52.1/testcms/aposts.php2019-12-22 17:51:05#2xsshttp://192.168.52.1/testcms/registration.php2019-12-22 17:51:08 #3xsshttp://192.168.52.1/testcms/cposts.php2019-12-22 17:51:23#4xsshttp://192.168.52.1/testcms/post.php2019-12-22 17:51:38#5xsshttp:// /192.168.52.1/testcms/admin/users.php2019-12-22 17:51:59#6xsshttp://192.168.52.1/testcms/admin/posts.php2019-12-22 17:56:19#7sqldethttp:// /192.168.52.1/testcms/cposts.php2019-12-22 17:51:28#8sqldethttp://192.168.52.1/testcms/post.php2019-12-22 17:51:40#9sqldethttp://192.168.52.1 /testcms/admin/users.php2019-12-22 17:51:59#10sqldethttp://192.168.52.1/testcms/admin/posts.php2019-12-22 17:56:09#11struts / s2-007http:/ /192.168.52.1/testcms/admin/users.php2019-12-22 17:55:32
以上是我简化的结果,有的文件中可能存两个两个两个以上的ParamKey存在突破但只保留一个。
由于同一个文件存在不同的漏洞,因此我们选择以文件分类来分析漏洞。
根据XRAY提供的信息:
u参数存在问题,找到aposts.php,关键代码如下:
if(isset($_GET['u'])) {
$uname = mysqli_real_escape_string($con, $_GET['u']);
....
if(!$posts) {
$div_class = 'danger';
$div_msg = 'Database error: ' . mysqli_error($con);
} else {
$post_count = mysqli_num_rows($posts);
if($post_count == 0) {
$page_count = 0;
$div_class = 'danger';
$div_msg = "Sorry, no posts found for user '$uname'.";
} else {
$page_count = ceil($post_count / 8);
$div_class = 'success';
$div_msg = " Showing published posts for user '$uname'.";
$div_msg .= " Show All";
}
}
}
GET取得u参数后,通过mysqli_real_escape_string函数赋值给uname,然后判断posts参数,如果没有找到结果,输出uname
我们知道mysqli_real_escape_string函数主要是转义在SQL语句中字符串中的特殊字符,而不是XSS的过滤函数,因此运用最基本的语句: