0x01 前言
前面写了一篇某次通用型漏洞挖掘思路分享,其中扯了一下使用xray扫描发现通用型漏洞,有人说这样的方法没有发现啥有用的漏洞,这里展开讲讲。 知识星球:https://t.zsxq.com/0ahB6Mw1P
0x02 环境准备
准备xray+burp+搭建环境即可 1、因为漏洞暂未公开,这里不讲如何搭建环境。 2、xray只要在github中下载即可,我这里使用的是mac版 下载地址: Release XRAY 1.8.2 · chaitin/xray · GitHub
3、burp市面上太多教程了,这里不详细讲,可以看看这篇文章 Burp安装流程详解
0x03 发现漏洞
1、首先当然是打开搭建好的站点
2、配置burp流量走代理到7777端口
3、打开xray扫描
./xray_darwin_amd64 webscan --listen 127.0.0.1:7777 --html-output 1.html
4、浏览器挂上代理,在网站功能点上点点点(就是每个功能点都点一点,让流量走到burp,再到xray)
5、结束之后,在xray文件目录下,会看到1.html文件,也就是漏洞报告(1.html可以自己指定,指定位置在运行xray的命令中)
6、在报告中可以看到扫出了很多漏洞如sql注入、xss等
7、点击对应行,可以看到漏洞详情,这里是sortField参数存在sql注入,再往下可以看到漏洞请求包和响应包。
8、payload很明显是sql注入中的延时盲注,这里找到对应的数据包,使用burp的搜索功能 复制URL中的关键字,也可以复制整个URL
点击filter:Hiding CSS ...... 在Filter by search term中输入URL关键字 点击Apply
然后找到对应的数据包
9、右键发送到repeater重放数据包模块,将payload放到对应的参数位置,放包进行检测,成功延迟,并且延迟了5秒。 (这里好像是执行了2次,在后面代码分析中会解释怎么样执行的2次。)
10、这里可以更改一下payload,成功获取数据库库名第一个字段ascii码为101,对应字母e
(select*from(select+1+and+if(ascii(substr((select+database()),1,1))=101,sleep(3),1))a)
0x04 代码审计
1、找到对应的文件位置,全局搜索发现请求参数sortField
可以看到默认赋值给$sortname,然后调用pro_ListTaskData方法
2、全局搜索找到pro_ListTaskData方法的位置,可以看到很明显使用直接拼接的方式处理数据,放到了order by 后面
$query .= " ORDER BY " . $order . " " . $sens;
3、拼接完后,赋值给了$query,$query拼接赋值给$count,然后调用了方法pro_Getsumnumber处理$count
4、查看pro_Getsumnumber方法,未进行处理,直接使用exequery方法执行
5、全局搜索exequery方法,使用函数mysql_query执行并返回
6、回到pro_ListTaskData方法,继续往下看,后面继续进行拼接并执行,这也就是为什么sleep(2),但是实际上延时了5秒的原因了。
$search = $search_all . $query; $cursor = exequery($connection, $search);
0x05 结论
因为漏洞未公开,所以打了厚码,希望大家不要介意。这里不是想分享这一个漏洞,更多的是想分享白盒漏洞挖掘的一个新的思路,也想要集思广益,分享更多有趣的知识,对大家有所帮助。