“本文前言:
最近在写一款漏洞检测软件的时候,发现对于SQL注入的一些判断还有测试不是很精准,于是乎我就想到了本文的一个主角,SQLMAPAPI,这个API是SQLMAP官方提供的一个调用SQLMAP里面服务的一个API,以前觉得SQLMAP自己玩得挺好的了,但是当我接触了SQLMAP API后发现自己还是太年轻了。同时国内对于SQLMAP的API的一些记录不是很多或者很细,于是乎就有了这篇文章,来总结和记录一个过程。同时写的不好的话还望大佬们手下留情!(P.S. 本文为了方便理解很多东西都是用大白话去讲解的,还望各位大佬们海涵)”
本文目录:
1.对SQLMAP API的一个介绍
2. sqlmapapi.py的使用帮助
3. SQLMAP API的两种模式
01
—
对SQLMAP API的一个介绍
P.S. 介绍废话有点多各位可以酌情看
为什么要使用SQLMAP API?
有的读者就要问了,我们的-m不是可以批量检测吗?为什么还要来调用SQLMAP API呢?虽然-m参数可以批量扫描URL,但是他的一个运行方式是一个扫描完成后再开始下一个任务。但是我们通过api接口,直接下发扫描任务后台就可以直接静默开始运行,无需开启一个新的命令行窗口。这样的话对于我们进行大量测试的时候就可以批量去提交任务了。这样的话对我们的工作就可以起到很大的一个辅助。同时对于一些国外的站点的话我们在进行一些测试的时候就可以把我们的API放在我们的VPS上,这样的话就可以直接来加快我们的测试。
02
—
详细对SQLMAP API的真容进行一探究竟
1.环境与搭建:
我们只需要下载完成Python2.7和安装配置后,再下载我们的SQLMAP里面就直接自带了API。
附上一些下载地址:
最新的Python 2.7.x 下载地址:
https://www.python.org/downloads/release/python-2718/
SQLMAP 下载地址:
https://github.com/sqlmapproject/sqlmap/zipball/master
2.SQLMAP API的真容
那说了那么多,到底api如何使用呢?在下载安装SQLMAP后,你会在sqlmap安装目录中找到一个 sqlmapapi.py 的文件,这个 sqlmapapi.py 文件就是sqlmmap api。我们的SQLMAP API就静静的在这里,你看着他,他也在看着你。
同时我们的sqlmap api分为服务端和客户端,sqlmap api有两种模式,一种是基于HTTP协议的接口模式,一种是基于命令行的接口模式。
我们下面可以来看看SQLMAP API官方的一些帮助:
这里我们来看看每一个参数详细的一个介绍
Usage: sqlmapapi.py [options]
Options: -h, --help 显示帮助信息并退出
-s, --server 作为api服务端运行
-c, --client 作为api客户端运行
-H HOST, --host=HOST 指定服务端IP地址 (默认IP是 "127.0.0.1")
-p PORT, --port=PORT 指定服务端端口 (默认端口8775)
--adapter=ADAPTER #服务端标准接口 (默认是"wsgiref")
--username=USERNAME #可空,设置用户名
--password=PASSWORD #可空,设置密码
3.启动API服务
1. 服务端模式:
无论是基于HTTP协议的接口模式还是基于命令行的接口模式,首先都是需要开启api服务端的。通过输入以下命令即可开启api服务端:
python sqlmapapi.py -s
命令执行成功后我们的返回信息如下:
其他的一些信息就是IPC数据库的位置,api服务端已经和IPC数据库连接上了,正在使用bottle 框架wsgiref标准接口。这里呢我们就不过多的去解释了
但是通过上面的这种方式开启api服务端有一个缺点,当服务端和客户端不是一台主机会连接不上,这个只是针对于我们本地调用的时候使用的,因此如果要解决这个问题,可以通过输入以下命令来开启api服务端。
python sqlmapapi.py-s-H "0.0.0.0" -p 8775
这样的话就可以直接指定创建一个开放的地址和端口了。
2.客户端模式(命令行接口模式):
有的时候我们只是需要调用,而不需要我们的程序调用的时候,就可以直接用我们的客户端模式来进行连接(P.S. 我们的API服务还是要开启)
然后通过下面代码就可以连接到我们的SQLMAP API了
python sqlmapapi.py -c -H(必须大写,小写的是帮助) 地址 -p 端口
这样的话我们就进入了我们的命令行。
同时我们可以执行的命令有这些:
help显示帮助信息
new ARGS[我们的一些参数等等] 开启一个新的扫描任务
use TASKID 切换taskid
data获取当前任务返回的数据
log获取当前任务的扫描日志
status获取当前任务的扫描状态
option OPTION 获取当前任务的选项
options 获取当前任务的所有配置信息
stop停止当前任务
kill杀死当前任务
list显示所有任务列表
flush清空所有任务
exit退出客户端
之后我们可以用
[例如:new-u “url”]这样就可以直接开始扫描新的任务
我们就可以通过这个来进行创建我们的新的任务(如下图)
并且已经切换到了我们的这个任务的ID.
(P.S. 我们的每一个任务只能是一个单独测试点,每个任务对应一个ID)
创建成功后就会这样,之后我们可以通过输入status来获取当前的一个运行情况
这个就是我们的状态
我们的状态分为
running 正在扫描(running的一个截图)
terminated 扫描完成
(P.S. SQLMAP API扫描完成后,不会进行主动推送完成信息)
(上图是在我们扫描不存在注入的时候的截图)
我们的returncode如果返回的是0,那么我们的注入就是成功的。我们可以输入data来获取我们的详细的信息。
返回的数据都是JSON格式的数据
里面的信息都十分的详细包括了 注入类型 数据库类型 注入的存在点等等
到这里就是我们这个命令行接口模式的一个使用了,同时我们如果细心一点就可以发现。
我们的每一步,其实都是调用了http的对应的接口的。那么我们就可以通过HTTP接口来让其他的程序也可也调用我们们的SQLMAP API来进行注入的测试。
同时我们的api接口都是静默运行的只会有部分的调用信息在我们的命令框中
这里如果我们执行了多任务的话list可以来进行查看我们的所有当前的执行任务
我们可以用:use + taskid #来进行切换任务的切换
以上就是我们对于命令行模式中的一些使用了,其他的命令呢,各位有兴趣都可以自己去测试一下。这一篇呢也就到这里就结束了,之后下一篇我会更新基于HTTP协议的调用方式和对SQLMAP API的代码去进行分析。感兴趣的小伙伴们可以持续关注哦!
如果喜欢本文的话可以关注零维安全公众号哦,我们会不定期更新部分小白技术文章给各位新人哦!
原文始发于微信公众号(WhITECat安全团队):SQLMAPAPI-一个被遗忘的API接口《第一章:初识SQLMAP API和命令行中调用》
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论