本文主要针对BurpSuite常见编写进行介绍,通过针对个人测试需求或者一些定制化的测试,使用自行编写的BurpSuite插件可以使得测试事半功倍。
burpsuite Resutful API
第一部分主要学习Burp API配置是怎么实现的、它的主动和被动扫描、自定义扫描规则以及API怎么调用,怎么使用的。
1.burpsuite的HTTP API配置
打开我们的burp在用户选项中,找到REST API并开启服务器,默认端口是1337,去访问的话就可以访问到HTTP 接口信息。
三个接口第一个是漏洞介绍的接口,漏洞id,漏洞name等等;第二接口也是最常用的扫描接口;第三个接口则是通过id去查它的一个扫描状态。
2.burpsuite 主动和被动扫描
•新建主动扫描
可以新建策略,也可以从库中选择。在新建的策略中注意的一个问题就是扫描类型的选择,默认的话它是全选,我们可以根据自己的需求选择类型,最后保存后就会在扫描设置中出现,也会在库中增加了这个配置,以后扫描就可以直接进行选择了。
对于资源池中可进行并发的大小修改,默认是10个并发,建议10个并发就可以了,给的太大扫描就会卡住。
•被动扫描
3.burpsuite 自定义扫描规则
在插入点的选项中,默认是全选。但是在POC编写要搞清楚漏洞的插入点,然后根据插入点选择插入点类型再去扫,这样就大大降低了它的发包率。
像PHPSESSID、session_id等都是会话标识,没有必要进行一个插入,它们几乎是不可能有漏洞的。
经常插入点就是当访问一个网站不同功能时,它的数据包中cookie信息都是一样的,那么就会直接跳过扫描下一个插入点了。
XSS插件编写
官方扩展器API demo:https://portswigger.net/burp/documentation/desktop/extensions/creating/extender-api-examples-legacy
在我们测试验证的时候都是一个一个插入xss语句,为了方便让它自动插入,因此尝试编写XSS脚本
XSS-payload
"<Svg/Onload=confirm(document.domain)>",
"<<img src=x
onerror='prompt(1)'><",
"<input onfocus=javascript:alert(1)
autofocus>",
"<input value="test"
onfocus=alert(0)>",
"<a
href="javascript:alert(document.domain)">Click
Here</a>",
"<script>alert(xss)</script>"
class
BurpExtender(IBurpExtender, IScannerCheck):
#
# implement
IBurpExtender
#
# registerExtenderCallbacks注册插件
def
registerExtenderCallbacks(self, callbacks):
# keep a
reference to our callbacks object 保留对我们的回调对象的引用
self._callbacks
= callbacks
# obtain
an extension helpers object 获取扩展助手对象 用来分析数据包 转换字节码等
self._helpers
= callbacks.getHelpers()
# set our
extension name 设置插件名称 callbacks回调类对象设置成全局
callbacks.setExtensionName("Custom
scanner XSS")
# obtain
our output and error streams 打印输出流
stdout =
PrintWriter(callbacks.getStdout(), True)
self.stdout
= stdout
# register
ourselves as a custom scanner check 注册自定义扫描检查
callbacks.registerScannerCheck(self)
def
doActiveScan(self, baseRequestResponse, insertionPoint):
# make a
request containing our injection test in the insertion point
for
payload in payload_list:
# 记录开始时间
scan_time
= str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 把请求结构的响应分析一下,取出它的URL,这个URL就是扫描的URL地址
scan_url
= str(self._helpers.analyzeRequest(baseRequestResponse).getUrl())
#
payload(从列表拿出来的每一个语句)转换成字符串
scan_payload
= str(payload)
# 插入点 把scan_payload转换成字节码数组,重新构造请求这个请求
checkRequest
= insertionPoint.buildRequest(bytearray(scan_payload))
# 打印时间 url payload
self.stdout.println(scan_time
+ " ------ url:" + scan_url + "Payload:" + scan_payload)
# 重新发请求,基于baseRequestResponse结构体获取它http符 和构造的checkRequest请求
checkRequestResponse
= self._callbacks.makeHttpRequest(baseRequestResponse.getHttpService(),
checkRequest)
# report
the issue
return
原文始发于微信公众号(白帽少年):BurpSuite插件编写
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论