为什么使用sqlapi
由于SQLMAP每检测一个站点都需要开启一个新的命令行窗口或者结束掉上一个检测任务。虽然 -m 参数可以批量扫描URL,但是模式也是一个结束扫描后才开始另一个扫描任务。通过api接口,下发扫描任务就简单了,无需开启一个新的命令行窗口。
sqlmapapi
在sqlmap安装目录下的sqlmapapi.py文件,这个就是sqlmap api,sqlmapapi分为服务端以及客户端。
进入sqlmap安装目录,执行命令:
python sqlmapapi.py -h
返回信息:
Options:
-h, --help 显示此帮助消息并退出
-s, --server 运行服务端
-c, --client 运行客户端
-H HOST, --host=HOST 指定服务器的ip地址(默认为“127.0.0.1”)
-p PORT, --port=PORT 指定服务器的端口(默认8775)
--adapter=ADAPTER 服务端标准接口 (默认是 "wsgiref")
--username=USERNAME 设置用户名(可空)
--password=PASSWORD 设置密码(可空)
开启sqlmapapi服务
在sqlmap安装目录下执行命令:
python sqlmapapi.py -s
不过此种此种方式仅仅在服务端和客户端是同一台上可以使用,如果服务端和客户端不在同一设备上,可以利用如下命令:
python sqlmapapi.py -s -H “0.0.0.0” -p 8775
此时,服务端以及客户端如果不在同一机器上也可进行访问。
启动客户端
启动客户端的命令为:
python sqlmapapi.py -c
如果服务端和客户端不在同一机器上,使用如下命令:
python sqlmapapi.py -c -H “[ip]” -p 8775 #ip为服务端的ip
输入以上命令后,会进入交互模式,如图所示。
相关命令
help 显示帮助信息
new ARGS 启动一个新的扫描任务
use TASKID 切换taskid
data 获取当前任务返回的数据
log 获取当前任务返回的日志
status 获取当前任务返回得的状态
stop 停止当前任务
kill 结束当前任务
list 显示所有任务列表
flush 清空所有任务
exit 退出客户端
这里使用客户端对构建在另一台机器上的sqli进行检测,首先创建一个任务:
new -u “http://192.168.137.131/sqli/Less-1/?id=1”
虽然我们仅仅是指定了一个 -u 参数,但是可以发现返回数据显示创建了一个id为956a22c689cf4ed1的task,然后又发起了一个请求去开始任务。因此可以发现该模式的实质是基于HTTP协议的。
通过输入status来查看当前任务的状态:
若返回数据的status字段的值为terminated则说明扫描已经完成,同理status的值如果为running,则说明扫描正在进行。
输入data查看当前任务的返回数据
检测POST、Cookie、Http头注入等方式时,输入以下命令,在data.txt中加入星号,指定注入的位置,达到检测POST、Cookie、Http头等注入的目的:
new -r data.txt
总结:
以上仅仅是sqlmapapi的命令行接口模式,还有基于http协议接口模式,相对而言命令行接口模式操作比较简单,但是实用性不大;Http协议接口模式虽然操作起来比较繁琐,但是可以通过编写python脚本的方法来进行使用,可以利用sqlmapapi将sqlmap集成到python程序中,因此对接下来的项目有很大的帮助。
遇到的问题:
python环境适配的问题,实验过程中使用过python3、python2.6、python2.7,发现只有python2.7操作成功了,估计是因为sqlmap的适配问题吧,毕竟sqlmap是利用python2.7开发的。