【安全测试】SQLmap的使用及jenkins集成
2022-04-25 14:16 码上起舞 阅读(629) 评论(0) 收藏 举报一、目的
本文主要介绍如何用sqlmap来测试某个接口是否有sql注入的风险,以及查看对应的注入的payload。
sqlmap支持-u指定接口的url信息,也支持-r 来解析文件中的请求信息。本文主要介绍-r的方式。
其他的sqlmap的命令行模式,见sqlmap命令行参数详解。
二、准备接口报文
准备工作主要是指收集接口的请求信息,包括单接口或多接口,get请求或post请求,cookie参数等,以下以一个接口的注入测试为例
辅助工具:
fiddler、Burpsuite(以下二者选一即可,目的是拿到接口请求的raw报文)
2.1 fiddler收集接口的请求信息
1.fidler设置代理,在页面访问指定功能后,fidler抓取对应的接口请求信息;
2.将raw原始的接口请求信息,全部复制粘贴,保存到文件req.txt(文件名无限制,后缀为txt即可)
2.2 Burpsuite收集接口的请求信息
2.2.1.设置Burpsuite代理

2.2.2.Burpsuite设置只打断指定ip的请求

2.2.3.设置浏览器代理(google为例)
设置--高级--打开代理设置,输入代理为第2.2.1中设置的Burpsuite的ip和端口

2.2.4 访问页面,在Burpsuite的target-sitemap中找到对应的请求信息,查看raw请求
2.2.5 将raw复制,保存到文件req.txt文件中,后续步骤要用
2.2.6 Burpsuite保存日志文件,收集请求报文(也是保存报文的一种方式之一,选一种即可)
上述步骤是保存单个接口的报文,也可以结合Burpsuite收集接口访问的全部日志的接口信息,设置如下:
Project options--Misc--Logging--勾选proxy 后的request,弹出框中选择日志保存的路径,并命名日志文件。
注意,这里可以构建proxy后面的request,所有经过代理的请求报文都会记录在日志里面,然后结合sqlmap的--scope参数进行过滤检测
也可以选择repeater的后面的request,这样每个发送到repeater的请求报文都可以记录在日志里面。在sqlmap中用-l req.log 参数来进行日志文件的注入检测

三、sqlmap执行
前提:有sqlmap安装包已经解压好,以windows为例(linux同理),sqlmap安装包解压在D:\sqlmap文件夹下,可以找到sqlmap.py文件
cd D:\sqlmap\
python sqlmap.py -r reqfile.txt -v 3 --tamper=space2comment --risk=2 -batch --random-agent --output-dir $WORKSPACE/output
说明:
req.txt 是第二步中保存的请求报文文件
-v 表示输出信息的级别,3级别会输出payload信息,默认为1级别
-batch 表示无需手动输入交互信息,自动判断输入,默认输入Y
--output-dir 表示输出文件的路径
四、结果检查
在控制台会实时输出注入信息
以下输出表示无注入风险:

以下输出表示有注入漏洞存在:

五、集成jenkins
新增构建参数为文件参数,上传接口请求报文保存的txt文件,在工程中新增execute shell,命令为第三步的命令即可。

六、Troubshooting
1.在集成jenkins的过程中,jenkins的控制台无法输出完整的信息,而是输出
using 'STDIN' for parsing targets list
解决:通过跟踪断点信息,发现有个config的参数conf.stdinPipe的值和直接在shell中执行命令行的值不一致,所以在sqlmap的源码的lib/core/option.py 中的init()方法中设置conf.stdinPipe=None后解决了此问题


浙公网安备 33010602011771号