安全矩阵

 找回密码
 立即注册
搜索
查看: 2615|回复: 0

利用SqlmapAPI编写简单的注入批量检测脚本

[复制链接]

180

主题

231

帖子

1176

积分

金牌会员

Rank: 6Rank: 6

积分
1176
发表于 2022-4-26 16:02:47 | 显示全部楼层 |阅读模式
本帖最后由 Grav1ty 于 2022-4-26 16:04 编辑

利用SqlmapAPI编写简单的注入批量检测脚本

内容目录
    简述
    SqlmapAPI简介
    SqlmapAPI的简单使用
    开工-完成自动化脚本编写
    小结
简介
等到渗透学到中期,就会发现,开发的使用只会越来越频繁,POC—EXP的编写,漏洞验证工具的编写以及自己开始开发小工具,没有一个到几个熟悉的编程语言说实话很难长久发展,我自己也是好久没有写程序了,学的也是有点举步维艰,所以也是温习一下之前的编程知识,简单写一个这个小东西。
SqlmapAPI简介
我们在日常sqlmap扫描时,也只是打开一个新窗口,然后扫描,虽然sqlmap -m参数可以完成批量扫描,但是模式也是一个结束扫描后才开始另一个扫描任务。所以sqlmap的开发者新加了sqlmapapi.py,可以直接通过接口调用来操作,简化了sqlmap命令执行方式。
sqlmapapi的地址就在sqlmap目录下,和sqlmap.py安静的躺在一起。

SqlmapAPI的简单使用
我们这里就直接运行

python3 sqlmapapi.py -h
你就可以看到他的各个参数的简介。


不过我们编写批量脚本暂时只需要-s参数即可,其他参数有兴趣的师傅可以自己看看。
第一步:我们-s开启服务端


我们这里就开启成功,127.0.0.1:8775就是api接口的地址。

直接访问也是ok的。
第二步:我们需要了解几个东西(很重要),也就是利用api提交数据的接口和方式。
第一个:创建一个任务

  1. @get("/task/new")
复制代码
这样直接说过于片面,我们直接简单写一个py脚本就明白了。

这里就是以get请求对接口地址发送了一个请求,表示要创建任务,而请求返回就是表示成功,并给我们返回了一个任务的ID号。

同样我们可以在命令行窗口看到我们刚刚创建好的任务的回显信息。

二个:设置任务ID的扫描信息

  1. @post("/option/<taskid>/set")
复制代码
就相当于我们要给刚刚创建的任务设置我们要扫描的目标是谁
还是拿py代码来实现

这里就是以POST请求对接口地址发送了我们的任务设置,而请求返回就是表示成功。

命令行同样回显。
第三个:开始扫描对应ID的任务

  1. @post("/scan/<taskid>/start")
复制代码
继续代码

和第二步基本一样,只是简单修改一下接口地址即可,返回true表示开始扫描。

命令行同样显示开始。
第四个:读取扫描状态判断结果

  1. @get("/scan/<taskid>/status")
复制代码
这个就是要读取一下sqlmap你扫的咋样了,是否在正常工作,有没有错误等等。(像极了苦苦等待爱情回应的我)

命令终端同样有回显,显示读取扫描状态。
第五个:扫描结果查看

  1. @get("/scan/<taskid>/data")
复制代码
当扫描结束时,我们查询状态的判断结果就变成了。

我们就可以查看一下扫描结果,代码如下

很简单,就是换个接口请求即可,我们可以看到返回了扫描结果。

命令行同样回显
第六个:如果结束删除 ID 并获取结果

  1. @get("/task/<taskid>/delete")
复制代码
这里换delete接口即可


我们扫描完后删除这个任务,减少资源的浪费,用完直接丢掉,无情的备胎命运,运行结果会显示true。


命令行同样回显。
ok,到现在为止,基本的接口使用情况我们应该都明白了,我们现在要做的就是整合起来,让其实现自动化检测。开工-完成自动化脚本编写
首先,创建一个sqlmapapi的函数
我们先把需要的data和headers写好,url的位置我们设置成变量,最后使用循环遍历即可。
第一步:创建任务,获取ID号


这里使用我们只需要ID的值,所以这里用到json库,只获取taskid的值,此外这里增加了一条判断,如果返回值中存在success,就说明执行成功,就让程序打印出'第一步任务创建成功!!'

第二步:设置任务ID的扫描信息

同样,和我们前面做的单独测试一模一样,只是增加了一个if判断而已,如果返回包存在success,就打印'第二步任务信息创建成功!!'

第三步:启动扫描

这里很简单,和之前单独测试接口的写法一模一样,加个if即可。

第四步:查看扫描状态,保存扫描结果


这里首先用了一个while循环,让他一直对扫描状态发送请求,while 1就是一直循环,然后我们这里加一个if判断,如果我得到的扫描状态回显中存在running那就说明还在进行中,一旦返回其他的信息,那么扫描肯定是结束了,所以就会跳到else这里,然后方便我们后期复现查看,我们就直接将扫描信息保存到scan_sql.txt中,中间写点字符分割一下,美观一点。

第五步:扫描结束任务删除

既然任务完成了,那就不要占用资源了,直接调用删除接口删除就可以了,然后下一个任务我们让他延迟3秒。这里延迟还是不延迟都可以!

第六步:读取url列表,批量跑。

if __name__ =='__main'就是告诉程序,代码从我这里开始执行,然后我们写一个for循环,从ip.txt中遍历出每一行的url,这里由于每一行后面会有一个换行符,所以这里利用rstrip删除。
然后调用我们之前写好的sqlmapapi函数就ok啦,我们运行起来看看。

这里开始扫描了

结束后退出,因为我这里在ip.txt中写了一个url,所以就扫了一次。

然后我们在当前目录下会生成一个scan_sql.txt,里面就是扫描的结果。

小结
当然看起来数据有点乱,但是我们可以在写入的时候选择性保存,就和第一步只选择taskid值一样。(大家可以自己动手改一改)
在注入漏洞查找上那就也很简单,可以利用谷歌语法,fofa呀这些,批量爬取放入到ip.txt中,然后再调用我们的sqlmapapi.py批量扫描即可。
这里我也是简单写个一个百度爬虫,输入搜索语法,输入爬的页数,然后把爬取的url写入到ip.txt中,方便sqlmapapi的使用,当然这个只做简单实验研究,因为百度有反爬,我没有往里面加入代理ip,所以就用延时替代了,所以比较慢。后面慢慢优化吧,哈哈


东西我就放github了,感兴趣的小伙伴可以去这个地址看看,代码很拉,望包含。

  1. 项目地址:https://github.com/wxwhhh/sqlmapapi
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 06:02 , Processed in 0.015876 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表