shopify插件

当前位置: 主页 > shopify插件

shopify 插件 开发(Burp Extender Apis 插件开发 (六))shopxo插件开发,一篇读懂,

时间:2023-05-11 00:07:05|栏目:shopify插件|点击:

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

| |

/uploads/allimg/20230913/1-230913232SH48.jpg

联系QQ:1303712368 | 邮箱:fy669088

Copyright © 2002-2024 ChatGPT-Sora-人工智能AI 版权所有桂ICP备2021004354号-4