curl http header_在HTTP头中进行XSS

be25a8893df30878063c68df3b44f67c.png

说到 XSS 相信大家肯定都不陌生(都 2020 年了,还在讲 XSS 这种老掉牙的东西),有些人甚至看到输入框就想往里面输 <script>alert(1)</script> ,今天我们就来学习 怎样在 HTTP 头中进行 XSS ?

直奔主题,先几个 XSS 的经典案例:

  • <form action="/xss.php/"><svg οnlοad=alert(1)>" method="POST">
  • <p><svg οnlοad=alert(1)></p>
  • <input type="text" name="a" value=""><svg οnlοad=alert(1)>">
  • <input type="text" name="a" value=""&gt;><svg οnlοad=alert(1)&gt;">
  • var test = '</script><svg οnlοad=alert(1)>';
  • ...

当然,远不止这些,枚不胜举。

其他关于 XSS 的知识就不多讲了,毕竟是老生常谈的东西,下面就来讲讲不一般的 XSS。

HTTP头中的XSS

开门见山,在某些情况下,没有清除应用程序 HTTP 头中传递的信息,并将其输出到请求页面的某个位置时,导致的 XSS 情况。

一种情况

我们可以控制 HTTP 头中的某些信息存储在数据库中,然后在同一页面中,应用程序中的其他任何地方甚至在另一个不可访问的系统中检索到。但是,由于 CDN 和 WAF 的存在,还存在另一种非常普遍的情况,无需进行数据库操作即可持续进行攻击:Web 缓存中毒

实践

练习地址:https://brutelogic.com.br/lab/header.php

59941bd17ca183b5857ecf9e17735dd2.png
<?=json_encode(getallheaders())."n";

在命令行中执行命令 curl -i,它向我们显示了响应的 HTTP 标头以及 JSON 格式的请求头。

curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面,它支持多种协议。
-i 参数可以显示 http response 的头信息,连同网页代码一起。

5b6f950ff2c1dd683bb25c859b06e193.png

由于实验靶场的 WAF 提供了最后一个标头 x-sucuri-cache,因此我们需要在 URL 中添加一些内容来避免缓存,该标头的值为 HIT,意思就是它来着 WAF 的缓存。

5e4e6a1aecee3a9fbc5f4031fe36c181.png

因此,访问带参数“lololol”的页面,我们能够得到页面的非缓存版本,标头 x-sucuri-cache 的标头值变成了 MISS 。再注入自己的标头(使用参数 -H),以检查它是否以响应的形式出现。

-H --header 在 http request 之中,自行增加一个头信息。

95398ecf67ac4176b1f3e5eb97d73d3f.png

响应成功,得到带有 Test:myValue 的响应。再更改字符串为“kkkkk”发出另一个请求,不然将返回带有“ lololol”字符串的缓存响应。

686a669cafe6317b9b60b36350886a55.png

再使用“kkkkk”作为字符串来再次开始缓存处理。如上图所示,还带入了 XSS payload。但仅是对自己有用,因为只是本机终端发送该标头。payload 不会出现在其他的浏览器请求中。

b11180d8e3a9143b74ec5f43ed488f9b.png

发另一个请求(注意看 data 时间不同),貌似没有什么区别。这是因为缓存机制是基于 MISS-MISS-HIT,因此下一个为 MISS。

73d8a617e2f7eb0ce2c0ad6488a63d07.png

验证是否已经缓存,打开目标 URL

https://brutelogic.com.br/lab/header.php?kkkkk

1dc9cff5729e8ebfdb87cb71cf742d1d.png

该 URL 将保持中毒状态,直到缓存过期,这就是缓存投毒。

练习地址2:https://brutelogic.com.br/lab/welcome.php

工作原理跟上面一样,不过没有了那么明显的输出点,执行 XSS 需要先找到输出点。页面的源代码如下:

<!DOCTYPE html>
<body>
<?php
$name = $_COOKIE["name"];
if($name){
    echo "<p>Welcome, $name!</p>n";
}else{
    echo "<p>Welcome, guest!</p>n";
}
?>
</body>
</html>

尝试进行 XSS 吧,完成的同学,评论区欢迎:)

来源: https:// brutelogic.com.br/blog/ xss-via-http-headers/

二向箔安全的网络安全技能包更新了!CISP-PTE 认证技能包,让你免费体验 CISP-PTE 认证内容。

d2c63cc5d4640effe44d2cecaecc55ab.png

更多有关渗透测试的内容请前往二向箔安全进行学习,最近推出了“挖洞”班,想了解更多资讯的,可咨询客服微信 twosecurity02

627c7b046747b1ffecb2b8c4edf854f9.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值