shopify 插件 开发(Burp Extender Apis 插件开发 (六))shopxo插件开发,一篇读懂,
No.1
新闻稿
虽然散播、利用该文所提供的信息而造成的任何人直接或是间接地的不良后果及损失,均由采用者本人负责,火神众测以及该文作者不为此承担任何人责任。
火神众测拥有对此该文的修正和议决。轴果转发或散播此该文,必须保证此该文的准确性,包括著作权新闻稿等文章文本。需经火神众测允许,严禁任一修正或是不定此该文文本,严禁以任何人方式将其用作商业目的。
No.2
序言
这节课的来源是在写fastjson rce检验应用程序而所遇到的问题并解决后的讲义。
他们晓得fastjson的统计数据是json文件格式的, 所以后面学的buildParameter就不适用于该情形了,会导致采用buildParameter解构模块后收起。
这节课学习 buildHttpMessage 解构json统计数据,并结合后面专业课程实现fastjson rce检验应用程序
No.3
getContentType
此方式用作以获取最新消息节录的文本类别,由IRequestInfo第一类初始化
非官方api:https://portswigger.net/burp/extender/api/burp/IRequestInfo.html#getContentType()
实例标识符如下表所示:
reqContentType = analyzedRequest.getContentType()
假如统计数据是json文件格式,所以analyzedRequest.getContentType()回到来的值是4。
所以就可以通过reqContentType是否等于4过滤器掉并非json文件格式的报文,从而而因应用程序只检验当正则表达式是json时才促发。
接下去预备解构报文。
No.4
stringToBytes()
byte[] stringToBytes(java.lang.String data)
此方式可用作将统计数据从字符串方式切换为二进制字符串。该切换不充分反映任何人某一Unicode,八进制则表示为0xWXYZ的字符串将始终切换为则表示方式为0xYZ的二进制。它执行与方式相反的切换bytesToString(),并保证采用这两种方式将如前所述二进制的统计数据切换为String并再次回到,以保证其准确性(充分反映取值Unicode的切换可能并非这种情形)。
非官方api:https://portswigger.net/burp/extender/api/burp/IExtensionHelpers.html#stringToBytes(java.lang.String)
非官方的解释有点貌似,其实很简单,就是把他们想递交的字符串文本切换为burp能重新认识的正则表达式。
实例标识符如下表所示:将字符串payload切换为burp重新认识的二进制类别,这样newBody的正则表达式就变成了byte,就能够在下一个api里采用了。
newBodyPayload = {"age":25, "name":"Bob""}
newBody = self._helpers.stringToBytes(newBodyPayload) # 将字符串切换为二进制
当内部结构好payload后,下面预备解构http最新消息
No.5
buildHttpMessage
byte[] buildHttpMessage(java.util.List headers, byte[] body)
此方式构筑包含选定的file和最新消息节录的HTTP最新消息。假如适用于,将根据节录的宽度加进或预览Content-Lengthfile。
非官方api:https://portswigger.net/burp/extender/api/burp/IExtensionHelpers.html#buildHttpMessage(java.util.List,%20byte[])
buildHttpMessage的第一个模块headers是IRequestInfo第一类的getHeaders()方式回到值
实例标识符如下表所示:假如不晓得analyzedIRequestInfo是什么变量,请回顾前几节课。
reqHeaders = analyzedIRequestInfo.getHeaders()
buildHttpMessage的第二个模块body是IExtensionHelpers.stringToBytes(字符串)的回到值
newBody = self._helpers.stringToBytes(newBodyPayload) # 将字符串切换为二进制
预备好两个模块后,传递给buildHttpMessage即可解构http最新消息
newRequest = self._helpers.buildHttpMessage(reqHeaders, newBody) # 解构json文件格式的统计数据不能用buildParameter,要用buildHttpMessage替换整个body解构http最新消息。
然后接下去同样采用makeHttpRequest发送统计数据并响应即可。
newIHttpRequestResponse = self._callbacks.makeHttpRequest(httpService, newRequest) # 发送统计数据
fastjson rce检验应用程序demo
实例标识符如下表所示:
# -*-coding:utf-8 -*-
# 被动扫描fastjson rce检验
from burp import IBurpExtender, IScannerCheck, IScanIssue, IMessageEditorTabFactory, IContextMenuFactory
from burp import IScanIssue
import sys
import time
import os
class BurpExtender(IBurpExtender, IMessageEditorTabFactory, IContextMenuFactory, IScannerCheck):
def registerExtenderCallbacks(self, callbacks):
# Required for easier debugging:
sys.stdout = callbacks.getStdout()
# 用作设置当前扩展的显示名称,该名称将显示在Extender工具的用户界面中。模块:name - 扩展名。。
self._callbacks = callbacks
# 用作以获取IExtensionHelpers第一类,扩展可以采用该第一类执行许多有用的任务。回到:包含许多帮助器方式的第一类,用作构筑和分析HTTP请求等任务。
self._helpers = callbacks.getHelpers()
# 用作设置当前扩展的显示名称,该名称将显示在Extender工具的用户界面中。模块:name - 扩展名。
self._callbacks.setExtensionName("Passive Fastjson Check")
# 注册扫描
callbacks.registerScannerCheck(self)
# 以获取请求的url
def get_request_url(self, protocol, reqHeaders):
link = reqHeaders[0].split( )[1]
host = reqHeaders[1].split( )[1]
return protocol + :// + host + link
# 以获取请求的一些信息:请求头,请求文本,请求方式,请求模块
def get_request_info(self, request):
analyzedIRequestInfo = self._helpers.analyzeRequest(request) # analyzeRequest用作分析HTTP请求,并以获取有关它的各种关键详细信息。生成的IRequestInfo第一类
reqHeaders = analyzedIRequestInfo.getHeaders() # 用作以获取请求中包含的HTTP头。回到:请求中包含的HTTPfile。
reqBodys = request[analyzedIRequestInfo.getBodyOffset():].tostring() # 以获取最新消息节录开始的请求中的偏移量。回到:最新消息节录开始的请求中的偏移量。
reqMethod = analyzedIRequestInfo.getMethod() # 以获取请求方式
reqParameters = analyzedIRequestInfo.getParameters()
return analyzedIRequestInfo, reqHeaders, reqBodys, reqMethod, reqParameters
# 以获取响应的一些信息:响应头,响应文本,响应状态码
def get_response_info(self, response):
analyzedIResponseInfo = self._helpers.analyzeRequest(response) # analyzeResponse方式可用作分析HTTP响应,并以获取有关它的各种关键详细信息。回到:IResponseInfo可以查询的第一类以以获取有关响应的详细信息。
resHeaders = analyzedIResponseInfo.getHeaders() # getHeaders方式用作以获取响应中包含的HTTPfile。回到:响应中包含的HTTPfile。
resBodys = response[analyzedIResponseInfo.getBodyOffset():].tostring() # getBodyOffset方式用作以获取最新消息节录开始的响应中的偏移量。回到:最新消息节录开始的响应中的偏移量。response[analyzedResponse.getBodyOffset():]以获取节录文本
# resStatusCode = analyzedIResponseInfo.getStatusCode() # getStatusCode以获取响应中包含的HTTP状态标识符。回到:响应中包含的HTTP状态标识符。
return resHeaders, resBodys
# 以获取服务端的信息,主机地址,端口,协议
def get_server_info(self, httpService):
host = httpService.getHost()
port = httpService.getPort()
protocol = httpService.getProtocol()
ishttps = False
if protocol == https:
ishttps = True
return host, port, protocol, ishttps
# 以获取请求的模块名、模块值、模块类别(get、post、cookie->用来内部结构模块时采用)
def get_parameter_Name_Value_Type(self, parameter):
parameterName = parameter.getName()
parameterValue = parameter.getValue()
parameterType = parameter.getType()
return parameterName, parameterValue, parameterType
# 开始检验
def start_run(self, baseRequestResponse):
self.baseRequestResponse = baseRequestResponse
# 以获取请求包的统计数据
request = self.baseRequestResponse.getRequest()
analyzedRequest, reqHeaders, reqBodys, reqMethod, reqParameters = self.get_request_info(request)
reqContentType = analyzedRequest.getContentType() # 以获取请求文件格式,例如json
if reqContentType == 4: # json文件格式统计数据
# 以获取服务信息
httpService = self.baseRequestResponse.getHttpService()
newBodyPayload = {"age":25, "name":"Bob""}
newBody = self._helpers.stringToBytes(newBodyPayload) # 将字符串切换为二进制 https://portswigger.net/burp/extender/api/burp/IExtensionHelpers.html#stringToBytes(java.lang.String)
newRequest = self._helpers.buildHttpMessage(reqHeaders, newBody) # 解构json文件格式的统计数据不能用buildParameter,要用buildHttpMessage替换整个body解构http最新消息。https://portswigger.net/burp/extender/api/burp/IExtensionHelpers.html#buildHttpMessage(java.util.List,%20byte[])
newIHttpRequestResponse = self._callbacks.makeHttpRequest(httpService, newRequest) # 发送统计数据
response = newIHttpRequestResponse.getResponse() # 以获取响应包
analyzedIResponseInfo = self._helpers.analyzeRequest(response) # analyzeResponse方式可用作分析HTTP响应,并以获取有关它的各种关键详细信息。回到:IResponseInfo可以查询的第一类以以获取有关响应的详细信息。
resBodys = response[analyzedIResponseInfo.getBodyOffset():].tostring()
newUrl = self._helpers.analyzeRequest(newIHttpRequestResponse).getUrl()
print resBodys
if fastjson in resBodys:
print [+] {}.format(newUrl)
self.save(newUrl)
self.issues.append(CustomScanIssue(
newIHttpRequestResponse.getHttpService(),
newUrl,
[newIHttpRequestResponse],
"FastJson RCE",
"fastjson",
"High"))
else:
print [-] {}.format(newUrl)
def doPassiveScan(self, baseRequestResponse):
:param baseRequestResponse: IHttpRequestResponse
:return:
self.issues = []
self.start_run(baseRequestResponse)
return self.issues
def consolidateDuplicateIssues(self, existingIssue, newIssue):
相同的报文,只报告一份报告
:param existingIssue:
:param newIssue:
:return:
if existingIssue.getIssueDetail() == newIssue.getIssueDetail():
return -1
return 0
class CustomScanIssue(IScanIssue):
def __init__(self, httpService, url, httpMessages, name, detail, severity):
:param httpService: HTTP服务
:param url: 漏洞url
:param httpMessages: HTTP最新消息
:param name: 漏洞名
:param detail: 漏洞细节
:param severity: 漏洞等级
self._httpService = httpService
self._url = url
self._httpMessages = httpMessages
self._name = name
self._detail = detail
self._severity = severity
def getUrl(self):
return self._url
def getIssueName(self):
return self._name
def getIssueType(self):
return 0
def getSeverity(self):
return self._severity
def getConfidence(self):
return "Certain"
def getIssueBackground(self):
pass
def getRemediationBackground(self):
pass
def getIssueDetail(self):
return self._detail
def getRemediationDetail(self):
pass
def getHttpMessages(self):
return self._httpMessages
def getHttpService(self):
return self._httpService
效果如下表所示:
当正常发送报文时,响应包没收起
再来看看应用程序的情形,可以看到响应包里出现了fastjon字符串,说明payload检验出了该漏洞
这里demo用的是写死的payload,自己写的时候根据自己的需求将payload请求的地址改为dnslog的地址。
上一篇:shopify 插件 开发(可以分享独立站和独立站插件怎么做吗?)shopify常用插件,快来看,
栏 目:shopify插件
下一篇:shopify 插件 开发(Burp Extender Apis 插件开发 (二))shopify+fb,满满干货,
本文标题:shopify 插件 开发(Burp Extender Apis 插件开发 (六))shopxo插件开发,一篇读懂,
本文地址:http://www.shopify123.cn/g/5932.html
您可能感兴趣的文章
- 05-12shopify限购插件(【干货】Shopify Pixel & Attribuly多触点数据归因插件配置操作指南)shopify建站多少钱,越早知道越好
- 05-12shopify汽配插件(ChatGPT宣布接入首批插件(附详细清单))shopee插件哪个好用,快来看,
- 05-12shopify汽配插件(独立站三问:做不做?什么时机做?怎么做?(shopify))shopify导入产品插件,燃爆了,
- 05-12shopify 插件 开发(微信小程序开发者福利:AI运动识别插件功能升级)shopify shop app,越早知道越好,
- 05-12shopify 插件 开发(基于chatGPT插件开发)shopify 插件是怎么开发的,一篇读懂,
- 05-11shopify 插件 开发(Burp Extender Apis 插件开发 (一))shopifylnc,燃爆了,
- 05-11shopify 插件 开发(Burp Extender Apis 插件开发 (二))shopify+fb,满满干货,
- 05-11shopify 插件 开发(Burp Extender Apis 插件开发 (六))shopxo插件开发,一篇读懂,
- 05-11shopify 插件 开发(可以分享独立站和独立站插件怎么做吗?)shopify常用插件,快来看,
- 05-11shopify插件免费(WordPress建站5 个最佳免费缓存插件)shopify页面插件,干货满满,
阅读排行
- 1shopify限购插件(【干货】Shopify Pixel & Attribuly
- 2shopify汽配插件(ChatGPT宣布接入首批插件(附详细清单))shopee插件哪个
- 3shopify汽配插件(独立站三问:做不做?什么时机做?怎么做?(shopify))sho
- 4shopify 插件 开发(微信小程序开发者福利:AI运动识别插件功能升级)shopify
- 5shopify 插件 开发(基于chatGPT插件开发)shopify 插件是怎么开发的,
- 6shopify 插件 开发(Burp Extender Apis 插件开发 (一))sho
- 7shopify 插件 开发(Burp Extender Apis 插件开发 (二))sho
- 8shopify 插件 开发(Burp Extender Apis 插件开发 (六))sho
- 9shopify 插件 开发(可以分享独立站和独立站插件怎么做吗?)shopify常用插件,
- 10shopify插件免费(WordPress建站5 个最佳免费缓存插件)shopify页面插
推荐教程
- 03-28数据插件shopify(3个免费的shopify竞品数据下载,竞品分析工具)数据插件怎么使
- 05-11shopify 插件 开发(Burp Extender Apis 插件开发 (二))sho
- 04-16Shopify付款插件(折腾特斯拉model Y 篇四:无SSH权限的极空间Z2S成功安装
- 05-12shopify限购插件(【干货】Shopify Pixel & Attribuly
- 05-10shopify插件安装(Lightmap HDR Light Studio Carbon
- 04-18shopify尺寸插件(推荐一款很厉害的Shopify插件)shopify size ch
- 04-15shopify插件ryviu(有点厉害!谷歌浏览器新插件来了:微信也能跟ChatGPT聊天
- 04-03制作shopify插件(魔兽世界地图插件制作代码)shopify插件大全,干货分享,
- 03-26shopify插件(Shopify插件大全,看这一篇就够了)shopify 插件是怎么开发
- 03-17shopify 插件(Shopify插件怎么选?看看这29款Shopify大卖们都在用的插