利用inurl语法搜索+sqlmap梭哈挖到过一点sql注入,这不失为一种好方法。

但是现在的sql注入漏洞的网站是比较少的了,所以这样一个个手工测,不仅效率低,还不一定有什么收获。不妨写一个google-hacking+sqlmap联动的自动化脚本批量挖洞。

为此写了一个小的python爬虫脚本,目的是可以利用google-hacking搜索然后再从google浏览器页面自动批量爬取这些我们想要的url。

项目地址: https://github.com/slcsec/slghack

待测的目标url都准备好了,接下来就是如何优雅地利用sqlmap实现快速高效探测。这里可能会想到sqlmap的-m选项,它读取多个目标url快速扫描,然而在sqlmap项目的根目录下面有个sqlmapapi.py,可能很少有人注意到。

sqlmapapi.py是sqlmap提供的一个API接口,它允许用户通过编程方式调用sqlmap的功能。可以利用sqlmapapi.py开启服务端口,然后向sqlmapapi发送请求,就可以进行快速稳定的sql注入探测。

使用方法也很简单python sqlmapapi.py -s命令可在本地的8775端口开启一个sqlmapapi的服务,也可以通过-p指定端口。

没有找到关于sqlmapapi官方的API文档,只有一些第三方的文档可以参考:Unofficial SQLmap RESTful API documentation

基于HTTP协议的接口模式,可以通过HTTP请求与sqlmapapi.py进行交互,以下是一些可用的API端点:

sqlmapapi的主要工作流程:

  1. GET请求/task/new创建一个新的扫描任务

  2. POST请求/scan/<taskid>/start并通过json格式提交参数,开始一个扫描任务

  3. GET请求/scan/<taskid>/status来获取指定的taskid的扫描状态(run/terminated)

  4. GET请求/scan/<taskid>/data获取扫描结果

知道了这些就可以通过requests来模拟相应的api请求,以此来执行扫描任务了。

import json
import queue
import requests
from threading import Thread
from time import sleep class slghack_sqli:
def __init__(self, server="http://127.0.0.1:8775", urlsfile=None, output="sqli_result.txt"):
self.server = server
self.urlsfile = urlsfile
self.ouput = output
self.task_queue = queue.Queue() def get_urls(self):
with open(self.urlsfile, "r") as f:
for url in f.readlines():
self.task_queue.put(url.strip()) def sent_server(self):
threads = []
while not self.task_queue.empty():
url = self.task_queue.get().strip()
print(f"Target URL: {url}")
t = Thread(target=self.scan, args=(url,))
threads.append(t)
t.start() for t in threads:
t.join() def scan(self, url):
try:
r = requests.get(f"{self.server}/task/new")
taskid = r.json()['taskid'] r = requests.post(
f"{self.server}/scan/{taskid}/start",
data=json.dumps({'url': url}), headers={'content-type': 'application/json'}
) r = requests.get(f"{self.server}/scan/{taskid}/status")
count = 0
while r.json()["status"] == "running":
sleep(6)
r = requests.get(f"{self.server}/scan/{taskid}/status")
print(r.json()["status"])
count += 1
if count == 30:
# 每个task最多跑6*30=180s结束
requests.get(f"{self.server}/scan/{taskid}/stop")
r = requests.get(f"{self.server}/scan/{taskid}/data")
requests.get(f"{self.server}/scan/{taskid}/delete")
if r.json()['data']:
print("Injection found: " + url)
with open(self.ouput, "a") as f:
f.write(url + "\n")
except requests.ConnectionError:
print("Connection error!") if __name__ == '__main__':
ssqli = slghack_sqli(urlsfile='sql_urls.txt')
ssqli.get_urls()
ssqli.sent_server()

这种批量扫描探测,肯定是要比手工测的效率要高出不少的。

it works, nice!

参考文章:

https://www.freebuf.com/articles/web/204875.html


若有错误,欢迎指正!o( ̄▽ ̄)ブ

利用sqlmapapi和google-hacking联动自动化sql注入探测的更多相关文章

  1. 自动化SQL注入工具 sqlmap 使用手册

    0x00 sqlmap介绍 什么是sqlmap? sqlmap是一个开源的渗透测试工具,它自动化了检测和利用SQL注入缺陷 以及接管数据库服务器的过程.它配备了一个强大的检测引擎 ,以及终极渗透测试仪 ...

  2. SQL注入技术专题—由浅入深【精华聚合】

    作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...

  3. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  4. Oracle学习总结(6)—— SQL注入技术

    不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...

  5. sql注入搞事情(连载一)

    SQL注入搞事情(连载一) 概述 写在最前面 为了有个合理的训练计划,山人准备长期开放自己的训练计划以及内容以供大家参考.山人专业是信息对抗技术,不是web方向的博客保证句句手打,如有问题请及时小窗. ...

  6. 十大关系数据库SQL注入工具一览

    摘要:众所周知,SQL注入攻击是最为常见的Web应用程序攻击技术.同时SQL注入攻击所带来的安全破坏也是不可弥补的.以下罗列的10款SQL工具可帮助管理员及时检测存在的漏洞. BSQL Hacker ...

  7. 【web安全】第六弹:手工SQL注入详解

    前一段时间,在对SQL注入有了新的理解之后,写了这篇文章.本来准备投稿,因为内容过于基础被打回来了,想想屯着也没意思,发出来发出来~~本来有好多图的,但是博客园发图很麻烦,word文档的链接会贴在文章 ...

  8. 10个SQL注入工具(转载)

    众所周知,SQL注入攻击是最为常见的Web应用程序攻击技术.同时SQL注入攻击所带来的安全破坏也是不可弥补的.以下罗列的10款SQL注入工具可帮助管理员及时检测存在的漏洞. BSQL Hacker 1 ...

  9. SQL注入(二)

    5.限制输入长度 如果在Web页面上使用文本框收集用户输入的数据,使用文本框的MaxLength属性来限制用户输入过长的字符也是一个很好的方法,因为用户的输入不够长,也就减少了贴入大量脚本的可能性.程 ...

  10. 10 个 SQL 注入工具

    BSQL Hacker BSQL Hacker是由Portcullis实验室开发的,BSQL Hacker 是一个SQL自动注入工具(支持SQL盲注),其设计的目的是希望能对任何的数据库进行SQL溢出 ...

随机推荐

  1. C++ 项目目录结构

    目录结构 project_root/ ├── bin/ # 可执行文件目录 │ ├── my_app # 可执行文件 │ └── ... # 其他可执行文件或脚本 │ ├── build/ # 编译产 ...

  2. 探索一下 Enum 优化

    探索一下 Enum 优化 SV.Enums主要是探索如何让 enum 更高效 其中涉及的优化手段并非完全自创 很多内容参考于以下项目 NetEscapades.EnumGenerators FastE ...

  3. Gson toJson 忽略 long 为 0的数据

    起因于数据id过大,所以将对应int , Integer都修改为long, 测试过程中发现 Gson toJson时,字段将int为0的数据忽略,但long 没有, 所以 1. 新增适配器 impor ...

  4. 10 Python面向对象编程:类和对象以及和Java的对比

    本篇是 Python 系列教程第 10 篇,更多内容敬请访问我的 Python 合集 这里只介绍类和对象,self.属性.方法.访问控制.类继承.方法重写在后面的文章里介绍 在Python中,类和对象 ...

  5. CSS – Position

    前言 定位是 CSS 里蛮重要的一课. 图片黑影 (overlay), back to top button, header, footer 紧贴在屏幕上下方等效果都是靠 position 完成的. ...

  6. 【QT性能优化】QT性能优化之QT6框架高性能图形视图框架快速展示百万图元大规模场景

    QT性能优化之QT6框架高性能图形视图框架快速展示百万图元大规模场景 简介: 本文展示了使用QT图形视图框架在一个场景中绘制出百万个图元的程序的效果以及源代码:本文还介绍了QT图形视图框架的一些实用功 ...

  7. Spirng Aop 实现自定义注解及实现

    需求:日志记录 需要记录当前用户访问的每个接口对应的前端页面功能信息 声明一个注解 @Documented @Retention(RetentionPolicy.RUNTIME) @Target({E ...

  8. LeetCode 332. Reconstruct Itinerary 最小欧拉路径

    题意 给N个单词表示N个点,和N-1个单词对,表示可以走的路径,求字典序最小的总路径. 首先说下这么暴力DFS能过.暴力的我都不敢写= = class Solution { public: vecto ...

  9. Sealos Devbox 发布,珍爱生命,远离 CI/CD

    水滴攻击太阳系用的是最原始的攻击方式:撞击!却又如此有效率. 当我们搞了一堆容器.编排.CI/CD.DevOps,发明了一大堆没什么用的名词之后,最终发现这些操作都是花里胡哨,让开发者越陷越深. 最终 ...

  10. v-if 为什么不能和 v-for 一起使用 ?

    当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,通过v-if 移动到容器元素,不会再重复遍历列表中的每个值.取而代之的是,我们只检查它一次,且不会在 v-if 为否的时候运算 v- ...