【Pyhon】利用BurpSuite到SQLMap批量测试SQL注入

本文介绍如何使用Python脚本自动化从Burp Suite提取HTTP请求,并将其转换为SQLMap可读格式,以批量测试大型网站的SQL注入漏洞。通过导出Burp的请求包并配置SQLMap,实现高效安全测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

通过Python脚本把Burp的HTTP请求提取出来交给SQLMap批量测试,提升找大门户网站SQL注入点的效率。

导出Burp的请求包

配置到Burp的代理后浏览门户站点,Burp会将URL纪录存储在HTTP History选项卡的内容里

549050-20181113011546460-1557564274.png

导出Burp的请求包到SQLMAP中测试SQL注入漏洞,可以通过【Filter】选择【Show only parametrized requests】筛选出需要测试的URL请求。

549050-20181113012028102-240055238.png

Ctrl+A全选所有的请求条目,右击点击保存【Save items】

549050-20181113012227155-858657424.png

默认输出的HTTP请求包是经过Base64编码后的。可以选择勾选掉【Base64-encode requests and responses】

配置SQLMap

环境变量里把SQLMap设置为直接打开cmd窗口就可以使用。

Burp-To-SQLMap Script

测试环境:Windows10、Python2。

脚本测试命令,使用示例代码保存的Brup包不需要勾选掉Base64的编码。因为不用Base64编码的文件数据看起来太混乱了。

- 导出的文件名如果是burp情况


把Burp导出的文件放到脚本目录下,直接用这个脚本就可以了。

> Burp-to-sqlmap.py


- 自定义参数

  Usage: ./burp-to-sqlmap.py [options]"
    print"  Options: -f, --file               <BurpSuit State File>"
    print"  Options: -o, --outputdirectory    <Output Directory>"
    print"  Options: -s, --sqlmappath         <SQLMap Path>"
    print"  Options: -p, --proxy              <Use Proxy>"
    print"  Example: python burp-to-sqlmap.py -f [BURP-STATE-FILE] -o [OUTPUT-DIRECTORY] -s [SQLMap-Path] -p [Proxy]"

代码:

#encoding: utf-8


import os
from bs4 import BeautifulSoup
import os.path
import argparse
import sys
import base64

# SQLMap自定义选项
_options = " --technique BEST --batch --threads 10 "


def usage():
    print" "
    print"  Usage: ./burp-to-sqlmap.py [options]"
    print"  Options: -f, --file               <BurpSuit State File>"
    print"  Options: -o, --outputdirectory    <Output Directory>"
    print"  Options: -s, --sqlmappath         <SQLMap Path>"
    print"  Options: -p, --proxy              <Use Proxy>"
    print"  Example: python burp-to-sqlmap.py -f [BURP-STATE-FILE] -o [OUTPUT-DIRECTORY] -s [SQLMap-Path] -p [Proxy]"
    print" "


parser = argparse.ArgumentParser()
parser.add_argument("-f", "--file",default="burp")
parser.add_argument("-o", "--outputdirectory",default="output")
parser.add_argument("-s", "--sqlmappath")
parser.add_argument("-p", "--proxy")
args = parser.parse_args()

if not args.file or (os.path.exists("burp") == False):
    usage()
    sys.exit(0)
    
if os.path.exists("output") == False:
    os.mkdir("output")

if args.proxy:
    proxyvalue = "--proxy " + args.proxy
else:
    proxyvalue = ""

vulnerablefiles = []
filename = args.file
directory = args.outputdirectory
sqlmappath = args.sqlmappath
if not os.path.exists(directory):
    os.makedirs(directory)

# 提取数据包
packetnumber = 0
print " [+] Exporting Packets ..."
with open(filename, 'r') as f:
    soup = BeautifulSoup(f.read(), "html.parser")
    for i in soup.find_all("request"):
        packetnumber = packetnumber + 1
        print "   [-] Packet " + str(packetnumber) + " Exported."
        outfile = open(os.path.join(args.outputdirectory, str(packetnumber) + ".txt"), "w")
        outfile.write(base64.b64decode(i.text.strip()))
    print " "
    print str(packetnumber) + " Packets Exported Successfully."
    print " "

# SQLMap测试
print " [+] Testing SQL Injection on packets ...  (Based on your network connection Test can take up to 5 minutes.)"
for file in os.listdir(directory):
    print "   [-] Performing SQL Injection on packet number " + file[:-4] + ". Please Wait ..."
    _command = "sqlmap -r " + directory + "\\" + file + _options + proxyvalue + " > " + directory + "\\testresult" + file
    print _command
    os.system(_command)
    if 'is vulnerable' in open(directory + "\\testresult" + file).read() or "Payload:" in open(
            directory + "\\testresult" + file).read():
        print "    - URL is Vulnerable."
        vulnerablefiles.append(file)
    else:
        print "    - URL is not Vulnerable."
    print "    - Output saved in " + directory + "\\testresult" + file
print " "
print "--------------"
print "Test Done."
print "Result:"
if not vulnerablefiles:   
    print "No vulnerabilities found on your target."
else:
    for items in vulnerablefiles:
        print "Packet " + items[:-4] + " is vulnerable to SQL Injection. for more information please see " + items
print "--------------"
print " "

测试效果

549050-20181113013445418-1318487660.png

549050-20181113013507042-294333580.png

参考

https://www.exploit-db.com/docs/english/45428-bulk-sql-injection-using-burp-to-sqlmap.pdf

转载于:https://www.cnblogs.com/17bdw/p/9950113.html

### 回答1: 可以使用 Python 的 re 模块来实现正则匹配,以下是一个提取电话号码的例子: ```python import re text = "我的电话号码是 123-4567-8901,另一个号码是 010-1234-5678。" # 定义电话号码的正则表达式 pattern = r"\d{3}-\d{4}-\d{4}|\d{4}-\d{3}-\d{4}" # 使用 findall 方法查找所有匹配的电话号码 phone_numbers = re.findall(pattern, text) # 输出结果 print(phone_numbers) ``` 输出结果为: ``` ['123-4567-8901', '010-1234-5678'] ``` 正则表达式 `r"\d{3}-\d{4}-\d{4}|\d{4}-\d{3}-\d{4}"` 匹配了两种格式的电话号码,一种是 3-4-4 格式,另一种是 4-3-4 格式。使用 `re.findall` 方法可以查找所有匹配的电话号码。 ### 回答2: 使用正则表达式可以很方便地提取电话号码。在Python中,可以使用re模块来进行正则表达式的操作。以下是一个示例代码: ``` import re text = "我的电话号码是15012345678,办公室电话是010-12345678。" phone_numbers = re.findall(r"\d{11}|\d{3}-\d{8}", text) print("提取到的电话号码:") for number in phone_numbers: print(number) ``` 以上代码使用re.findall函数来查找文本中的所有符合正则表达式的电话号码。其中的正则表达式为`\d{11}|\d{3}-\d{8}`,表示查找11位数字(即手机号码)或者3位数字 + "-" + 8位数字(即带区号的电话号码)。在文本中找到的电话号码会以列表的形式存储在phone_numbers变量中,最后逐个打印出来。 使用正则表达式提取电话号码是一种灵活且高效的方法,可以方便地应对不同形式的电话号码。当然,正则表达式的实现也需要根据具体需求进行调整。 ### 回答3: Python利用正则表达式可以方便地提取电话号码。首先,我们需要导入re模块,它提供了用于正则表达式处理的函数和方法。 接下来,我们需要定义一个电话号码的正则表达式模式。电话号码的格式可能有所不同,例如:(123) 456-7890、123-456-7890、123 456 7890、123.456.7890等等。在这里,我以一个常见格式的电话号码为例:XXX-XXX-XXXX。 定义好模式后,我们可以使用re模块中的findall()函数来提取所有匹配的电话号码。示例代码如下: ```python import re text = "我的电话号码是:123-456-7890,你的电话号码是:987-654-3210。" pattern = r'\d{3}-\d{3}-\d{4}' phone_numbers = re.findall(pattern, text) for number in phone_numbers: print(number) ``` 运行上述代码将输出匹配到的电话号码,结果为: ``` 123-456-7890 987-654-3210 ``` 在这里,`r'\d{3}-\d{3}-\d{4}'`表示匹配三个数字,一个短横线,再匹配三个数字,再匹配一个短横线,最后匹配四个数字。这样就能提取出格式为XXX-XXX-XXXX的电话号码。 需要注意的是,不同电话号码的格式可能会有所不同,我们可以根据实际情况灵活修改正则表达式的模式来适应不同的电话号码格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值