本帖最后由 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提交数据的接口和方式。
第一个:创建一个任务这样直接说过于片面,我们直接简单写一个py脚本就明白了。
这里就是以get请求对接口地址发送了一个请求,表示要创建任务,而请求返回就是表示成功,并给我们返回了一个任务的ID号。
同样我们可以在命令行窗口看到我们刚刚创建好的任务的回显信息。
第二个:设置任务ID的扫描信息
- @post("/option/<taskid>/set")
复制代码 就相当于我们要给刚刚创建的任务设置我们要扫描的目标是谁
还是拿py代码来实现
这里就是以POST请求对接口地址发送了我们的任务设置,而请求返回就是表示成功。
命令行同样回显。
第三个:开始扫描对应ID的任务
- @post("/scan/<taskid>/start")
复制代码 继续代码
和第二步基本一样,只是简单修改一下接口地址即可,返回true表示开始扫描。
命令行同样显示开始。
第四个:读取扫描状态判断结果
- @get("/scan/<taskid>/status")
复制代码 这个就是要读取一下sqlmap你扫的咋样了,是否在正常工作,有没有错误等等。(像极了苦苦等待爱情回应的我)
命令终端同样有回显,显示读取扫描状态。
第五个:扫描结果查看
- @get("/scan/<taskid>/data")
复制代码 当扫描结束时,我们查询状态的判断结果就变成了。
我们就可以查看一下扫描结果,代码如下
很简单,就是换个接口请求即可,我们可以看到返回了扫描结果。
命令行同样回显
第六个:如果结束删除 ID 并获取结果
- @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了,感兴趣的小伙伴可以去这个地址看看,代码很拉,望包含。
- 项目地址:https://github.com/wxwhhh/sqlmapapi
复制代码
|