使用sqlmapapi.py批量化扫描实践

0x00 前言


sqlmap可谓是sql注入探测的神器,优秀的探测功能可以让任何一个使用者无基础挖掘sql注入。wooyun上关于sqlmap的文章已经有6篇了,都没有科 普sqlmapapi.py。因此我打算分享下这方面的实践。利用sqlmap测试SQL注入的效率很低,每一个url都需要手动测试,这样肯定不是理想状态。 sqlmap的作者肯定也察觉到这一点了,默默的开发了sqlmapapi.py,当你使用了sqlmapapi.py后才能体会到sqlmap的强大。sqlmap构建了一个自动化 分布式的扫描帝国!这篇文章我主要从sqlmapapi.py的代码角度和AutoSqli类的设计与实现的角度展开。

0x01 sqlmapapi.py综述


sqlmapapi.py给使用者提供了一个强大的功能,服务功能。使用者可以利用sqlmapapi.py开启服务端口,以后只要向sqlmapapi发送请求,就可以进行sql注入,然后发送查询请求,就可以得到这个url是否是注入点,以及详细的内容。同学们看到这里是不是有些小激动呢? sqlmapapi.py的help,我们需要用的是-s参数,也许你也有可能用到-p参数。

enter image description here

从sqlmapapi.py文件可以看出来,我们利用的文件的调用关系是

enter image description here

进入到lib/utils/api.py的server类,可以发现通过向server提交数据进行与服务的交互。 一共分为3种类型。

  • Users' methods 用户方法
  • Admin function 管理函数
  • sqlmap core interact functions 核心交互函数

可以提交数据的种类如下。

用户方法

  • @get("/task/new")
  • @get("/task//delete")

管理函数

  • @get("/admin//list")
  • @get("/admin//flush")

核心交互函数

  • @get("/option//list")
  • @post("/option//get")
  • @post("/option//set")
  • @post("/scan//start")
  • @get("/scan//stop")
  • @get("/scan//kill")
  • @get("/scan//status")
  • @get("/scan//data")
  • @get("/scan//log//")
  • @get("/scan//log")
  • @get("/download///")

不难发现这些操作可以完全满足我们的测试需求,因此利用这些就可以批量了。当然每一种请求都会有不同的返回值,这些返回值是json的形式传回, 解析就好了。其实这些我已经替大家做好了,调用AutoSqli类就可以了,但是还是要挑一些讲下。

task/new 任务建立

#!bash
GET /task/new Response:
{
    "taskid": "1d47d7f046df1504" 
}

    /scan/<task_id>/status 扫描任务状态
GET /scan/<task_id>/status Response:
{
    "status": "terminated",
    "returncode": 0 
}

详细内容请各自查阅代码。

0x02 AutoSqli类


我封装AutoSqli类的作用是想轻松的与sqlmapapi.py建立的server进行交互。

AutoSqli的run方法的执行逻辑图

enter image description here

这些步骤就是正常sqlmap扫描的逻辑,因此调用AutoSqli就可以正常执行。

Show code

enter image description here

具体代码查看Mspider项目的Autosqli.py文件。

https://github.com/manning23/MSpider

0x03 使用心得


AutoSqli类的初始化可以添加url的data,cookie,referer。因此无需顾虑探测需要登陆的页面。

enter image description here

对于AutoSqli类的使用,主要注意option_set()方法的使用,其数据结构为字典,由于可添加的内容超长,因此想添加自动的测试设置请参考Mspider项 目的set_option.txt文件。

enter image description here

说道使用场景,其实我自己已经玩了好久了,说实话效果没达到我的预期,分析下原因。

现在网站的sql注入确实少了,烧饼类型的主要点更少。

sqlmap的初始探针不怎么样,想要精准判断还需要研究,个人研究发现对于mysql数据库,使用时间类型探针效果最好,当然需要自己写探针,详 细的参考Mayikissyou牛的文章。顺便吐槽下,Mayikissyou牛的文章,对于探针的改写真是蜻蜓点水啊,我研究了好久才把lijiejie的那些方法加 上:)

有想法的同学肯定希望我把Mspider和AutoSqli结合下,可是我觉得方法我已经分享了,剩下的同学自己实践吧。实践才能有新的想法。

sqlmapapi.py就是sqlmap为了分布式扫描SQL注入做的,但是资料真的很少,实践的结果更少,希望这篇分享就当抛砖引玉了,有问题欢迎随时和我交流。还有,Mayikissyou牛的文章真心推荐大家读下,配合我这篇文章,sql注入真是想怎么玩就怎么玩了。

0x04 资料


http://volatile-minds.blogspot.jp/2013/04/unofficial-sqlmap-restful-api.html

/tips/?id=5254

©乌云知识库版权所有 未经许可 禁止转载


30
superfish 2016-06-20 13:09:55

sqlmapapi支持对伪静态url以及http头部字段的检测吗?

30
zjgwhh 2016-05-21 10:39:12

谢谢分享

30
杨某某 2016-04-25 16:34:08

Mspider项目中的autosqli代码删除了?

30
我在不想理你 2016-04-08 09:21:34

@GreyH4t sqlmapapi如何执行-r参数

30
无敌情痴 2016-04-04 10:27:50

谢谢LZ分享,收藏了

30
国光 2016-03-31 19:48:20

涨姿势了 感谢分享

30
niexinming 2016-03-10 23:35:47

@1c3z 表哥有用过吗

30
ning1022 2016-01-30 13:09:43

不错!

30
D&G 2016-01-28 15:28:34

感谢分享

30
D&G 2016-01-28 15:27:44

感谢分享

30
D&G 2016-01-28 15:27:29

dddddd

30
一己 2015-12-24 18:03:41

不错,感谢分享[´・ω・`]

30
Manning 2015-10-10 09:41:31

@1c3z 是的,确实这里有bug

30
chizhe 2015-09-29 01:57:12

真的不错

30
1c3z 2015-09-05 16:34:15

def option_set(self):
headers = {'Content-Type': 'application/json'}
option = {"options": {
"smart": True,
...
}
}
这里实现有点问题,应该把options这层去掉

30
BeenQuiver 2015-08-16 09:26:26

且看sql-hunter

30
2mi 2015-07-29 00:01:52

想实现一下。 在看这方面的资料。最好能实现批量扫描的。

30
玉林嘎 2015-07-08 17:13:46

@wilson post可以的 不过这个autosqli不行 改点代码就可以啦

30
Ztz 2015-06-28 21:04:45

这个有没有网络方面的功能。比如读取指定txt里的代理列表,并定时自动更换啥的。

30
smarttang 2015-06-25 12:34:45

点个赞! 之前一直都是用python写个比较简单的,结果导出到execl,然后用python读取。。。

30
feather 2015-06-21 13:44:41

@neal 同问,汉字dump变成乱码,而且特别慢。。。

30
GreyH4t 2015-06-19 20:03:57

@wilson 抱歉,看错了,sqlmapapi没玩过,不知道

30
GreyH4t 2015-06-19 20:03:02

@wilson 可以的,将post请求复制下来放到文本文档里,用-r参数加载就可以了

30
range 2015-06-19 18:14:14

@neal --charset?

30
sin 2015-06-19 16:30:29

楼主真高产,感谢分析

30
neal 2015-06-19 14:26:17

想知道 sqlmap --dump 乱码 怎么办

30
wilson 2015-06-19 11:51:15

sqlmapapi 好像 只能get注入检测。。post注入检测不知道可不可以。。。

感谢知乎授权页面模版