SqlmapAPI调用实现自动化SQL注入安全检测

admin 2024年6月6日22:16:12评论4 views字数 2479阅读8分15秒阅读模式

应用案例

前期通过信息收集拿到大量的URL地址,由于SQLMAP每检测一个站点都需要开启一个新的命令行窗口或者结束掉上一个检测任务。虽然 -m 参数可以批量扫描URL,但是模式也是一个结束扫描后才开始另一个扫描任务。这个时候通过api接口,下发扫描任务就简单了,无需开启一个新的命令行窗口进行批量的SQL注入检测 (SRC挖掘)

sqlmap地址:https://github.com/sqlmapproject/sqlmap

查看sqlmapapi使用方法

python sqlmapapi.py -h

SqlmapAPI调用实现自动化SQL注入安全检测

  获取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

SqlmapAPI调用实现自动化SQL注入安全检测

批量检测脚本

大致流程

通过GET请求 http://ip:port/task/new 创建一个新的扫描任务通过POST请求 http://ip:port/scan/start 并通过json格式提交参数,开启一个扫描通过GET请求 http://ip:port/scan//status 来获取指定的taskid的扫描状态:一种是run状态,一种是terminated状态扫描完成后获取扫描的结果

具体代码

import jsonimport queueimport requestsfrom threading import Threadfrom time import sleepclass 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()

SqlmapAPI调用实现自动化SQL注入安全检测

批量扫描测试,效率上肯定比手工测试效率高

联动burp对参数识别进行批量化扫描

流程

burp开启代理模式,对流量进行检测,联动sqlmapapi自动查找可能存在注入的点

效果图如下:

SqlmapAPI调用实现自动化SQL注入安全检测

获取链接

https://github.com/lemonlove7/findSQL

原文始发于微信公众号(鹏组安全):SqlmapAPI调用实现自动化SQL注入安全检测

 

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月6日22:16:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SqlmapAPI调用实现自动化SQL注入安全检测http://cn-sec.com/archives/2822616.html

发表评论

匿名网友 填写信息