一、目的

本文主要介绍如何用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代理

sqlmap报错No module named filesystem sqlmap -r_sql

 

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

sqlmap报错No module named filesystem sqlmap -r_命令行_02

 

 

2.2.3.设置浏览器代理(google为例)

设置--高级--打开代理设置,输入代理为第2.2.1中设置的Burpsuite的ip和端口

sqlmap报错No module named filesystem sqlmap -r_命令行_03

 

2.2.4 访问页面,在Burpsuite的target-sitemap中找到对应的请求信息,查看raw请求

sqlmap报错No module named filesystem sqlmap -r_安装包_04

 

 

2.2.5 将raw复制,保存到文件req.txt文件中,后续步骤要用

三、sqlmap执行

前提:有sqlmap安装包已经解压好,以windows为例(linux同理),sqlmap安装包解压在D:\sqlmap文件夹下,可以找到sqlmap.py文件

cd D:\sqlmap\
python sqlmap.py -r D:\req.txt -v 3 --risk=2 --tamper=space2comment

说明:

req.txt 是第二步中保存的请求报文文件

-v 表示输出信息的级别,3级别会输出payload信息,默认为1级别

-batch 表示无需手动输入交互信息,自动判断输入,默认输入Y

四、结果检查

在控制台会实时输出注入信息

以下输出表示无注入风险:

sqlmap报错No module named filesystem sqlmap -r_sql_05

 

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

sqlmap报错No module named filesystem sqlmap -r_安装包_06