webgoat其他项目的学习笔记在我的博客里有。
General(总体目标)
1、Http Basics(HTTP基础知识)
点击Http Basics,查看页面信息,显示输入信息后,服务器接收请求后会返回用户的输入信息,并回显给用户。我在Enter your Name输入“hello”,点击Go!
使用burpsuite代理抓取数据包,person数值为“hello”,点击forward,返回数据。
webgoat界面再次提交,显示完成。
2、HTTP Splitting(HTTP拆分)
介绍:HTTP拆分攻击是指由于Web应用程序缺乏有效的输入验证,允许攻击者将CR和LF字符插入到应用程序响应的报头,从而将服务器的回应拆分成两个不同的HTTP消息的攻击手段。攻击者通过发送经过精心构造的HTTP请求,试图完全控制第二个响应来实现攻击。
在页面中输入kong并提交(已开启burpsuite抓包)
Bupsuite抓包显示如下
把language的值后面加上%0d%0a%0d%0a%0d%0a,点击forward返回。
注入特殊字符后,HTTP 响应数据包中“Content‐Length: 0”告诉浏览器响应已经结束。
重新开始操作,把language值修改为以下字符串:
foobar%0d%0aContent‐Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent‐Type:%20text/html%0d%0aContent‐Length:%2047%0d%0a%0d%0a<html> Hacked J </html>
这段字符串的HTTP请求的URL编码为
第一次响应:
第二次请求:
第二次响应:
点击forward之后,浏览器显示如下,表示步骤一完成
接下来重新开始,进行步骤二,把language的值改成下列字符串
kong%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2047%0d%0a%0d%0a<html>Hacked</html>
这段字符串的HTTP请求的URL编码为
第一次响应:
第二次请求:
第二次响应:
点击forward,返回数据,浏览器显示如下,表示攻击成功。
HTTP Splitting攻击的防御方法:
防范HTTP拆分攻击,可以限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头;也可以删除参数中的回车,换行,引号等特殊字符。