在上一章中,我们已经完成了WebGoat的安装,接下来,就可以来搞事情了。首先,第一部分是对WebGoat的介绍,上一章已经详细介绍过了,我们直接进入实战部分。
本节主要练习的是HTTP基本知识
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:WorldWide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP基于TCP/IP协议,HTTP的客户端请求包括请求行,请求头部,空行和请求数据四个部分组成。
本节主要目的是了解浏览器和Web程序之间的数据传输,在输入框输入任意字符,之后点击提交,然后一直点击GO,即可通关。
2. HTTP拆分
(1)判断,重定向里边的Location参数恰好是提交的参数’ chinese’,这样,就存在HTTP应答拆分的可能。
先使用Burpsuite抓包,然后将截获的数据包发送到Repeater,来观察请求和响应。
发送到Repeater之后点击Go,来观察响应内容
可以看到,在请求的发送和请求的响应中,都存在Location=chinese,就可以判定,存在HTTP拆分的可能性。
(2)对于HTTP拆分攻击,我们可以自定义HTTP头,然后转化为URL编码进行攻击,可以用URL编码转换(或WebGoat提供的http://yehg.net/encoding/)进行URL编码,将URL编码后提交。
China
Content-Length: 0
HTTP/1.1 200 OK
Content-Type: application/x-www-form-urlencoded
Content-Length: 47
<html>Gogoing</html>
URL编码为:
China%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0AContent-Length%3A%2047%0A%3Chtml%3EGogoing%3C%2Fhtml%3E%0A
然后刷新一下网页,第一阶段已经通过
如果某行的内容是Content-Length:0,则浏览器响应队列会认为这个响应已经结束.浏览器向重定向地址发送请求后会把Content-Length:0之后的内容当成下一个响应,从而显示<html>Gogoing</html>页面内容。
(3)在这个基础上可以改进攻击方式让它更有威胁.在构造的请求中加入Last-modify字段,并设置一个将来的值比如2020年1月1日.意思是服务器告诉浏览器,这个网页最后一次修改是在2020年1月1日.如果浏览器不清除缓存,下一次请求这个页面会加上if-modify-since字段,值是2020年1月1日,也就是说浏览器会问服务器,这个网页在2020年1月1日之后修改过嘛?当然服务器是人的话肯定会对这个问法莫名其妙,怎么会传过来一个未来的值?但是因为是程序,服务器会比对最后一次修改时间和传过来的时间,发现传过来的时间较新,就会回送304即Not Modified,表示这个网页没有被修改过.浏览器接受到了这个响应会从本地缓存读取网页,当然是之前注入的错误网页.如果浏览器不清除缓存,再也别想读取到正确的网页信息了.这就是HTTP的Cache Poisoning(缓存毒化)。
china
Content-Length:0
HTTP/1.1200 OK
Content-Type:application/x-www-form-urlencoded
Last-Modified:Mon, 27 Oct 2222 14:50:18 GMT
Content-Length:47
URL编码:
china%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0ALast-Modified%3A%20Mon%2C%2027%20Oct%202222%2014%3A50%3A18%20GMT%0AContent-Length%3A%2047
作者:小英雄宋人头
来源:Ms08067安全实验室
本文分享自 Ms08067安全实验室 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!