应用案例
前期通过信息收集拿到大量的URL地址,由于SQLMAP每检测一个站点都需要开启一个新的命令行窗口或者结束掉上一个检测任务。虽然 -m 参数可以批量扫描URL,但是模式也是一个结束扫描后才开始另一个扫描任务。这个时候通过api接口,下发扫描任务就简单了,无需开启一个新的命令行窗口进行批量的SQL注入检测 (SRC挖掘)
sqlmap地址:https://github.com/sqlmapproject/sqlmap
查看sqlmapapi使用方法
python sqlmapapi.py -h
获取sqlmapapi接口信息 sqlmapapi.py -s
1 创建新任务记录任务ID @get("/task/new")
2 设置任务ID扫描信息 @post("/option/<taskid>/set")
3 开始扫描对应ID任务 @post("/scan/<taskid>/start")
4 读取扫描状态判断结果 @get("/scan/<taskid>/status")
5 如果结束删除ID并获取结果 @get("/task/<taskid>/delete")
6 扫描结果查看 @get("/scan/<taskid>/data)
启动服务端
python sqlmapapi.py -s
批量检测脚本
大致流程
通过GET请求 http://ip:port/task/new 创建一个新的扫描任务
通过POST请求 http://ip:port/scan/start 并通过json格式提交参数,开启一个扫描
通过GET请求 http://ip:port/scan//status 来获取指定的taskid的扫描状态:一种是run状态,一种是terminated状态
扫描完成后获取扫描的结果
**具体代码
**
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:
# 通过GET请求 http://ip:port/task/new 创建一个新的扫描任务
r = requests.get(f"{self.server}/task/new")
taskid = r.json()['taskid']
# 通过POST请求 http://ip:port/scan/start 并通过json格式提交参数,开启一个扫描
r = requests.post(
f"{self.server}/scan/{taskid}/start",
data=json.dumps({'url': url}), headers={'content-type': 'application/json'}
)
# 通过GET请求 http://ip:port/scan//status 来获取指定的taskid的扫描状态
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__':
# 把url复制到sql_urls.txt
ssqli = slghack_sqli(urlsfile='sql_urls.txt')
ssqli.get_urls()
ssqli.sent_server()
批量扫描测试,效率上肯定比手工测试效率高
联动burp对参数识别进行批量化扫描
流程
burp开启代理模式,对流量进行检测,联动sqlmapapi自动查找可能存在注入的点
效果图如下:
最底部获取链接
★
付费圈子
欢 迎 加 入 社区 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
👇点击下方链接查看详细介绍👇
星球未过期成员看下图免费续会员
免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦