WebGoat Day1 HTTP Basic

General - HTTP Basic

其他可用的交互式代理工具

owasp zap
burp suite
awvs

第一次代理失败了,发现是浏览器的SwitchOmega配置的问题,删除任何不代理的地址列表。

This happens because your browser is bypassing the proxy config for local addresses. Have a look your browser proxy config, including any options labelled advanced/exceptions, and ensure that it is not configured to make any exceptions.
If this doesn’t work, then a workaround to convince your browser to proxy local addresses is to add the following to your hosts file:
127.0.0.1 whatever.com
and then use that domain name to access the application.

burp论坛 - 问题解决 - configure-intercept-web-app-localhost

General - HTTP Splitting (CRLF Injection / HTTP Response Splitting)

摘要

HRS这种漏洞出现的前提是(恶意)用户的输入出现的服务器返回包的HTTP Header中,其造成的结果是(恶意)用户在一定程度上获得了修改服务器响应包的权限,从而实现任意HTML/JavaScript注入

注意漏洞的影响范围,仅存在于较老的Web服务器版本,比如Tomcat 4.1.24之前的版本(现在的WebGoat已经不存在此课程)

漏洞利用

在漏洞利用方面感觉会和反射型XSS的利用相似,应配合钓鱼邮件使用,通过注入HTTP Body,可以插入任意脚本。
关于深入利用,可以参考CRLF Injection漏洞的利用与实例分析

  1. 绕过XSS过滤器
    X-XSS-Protection:0

@mramydnei 还想到了一个利用字符编码来绕过XSS Filter的方法,当编码是is-2022-kr时浏览器会忽略%0f,这样我们在onerror后面加个%0f就能绕过filter,前提是注入一个

1
<meta charset=ISO-2022-KR>

  1. 缓存投毒

我们可以利用这个漏洞进一步进行缓存中毒的攻击,为了做到这一点,我们需要在前面提交的参数中,自己伪造的HTTP响应头中添加一个Last-Modified字段,并且把它的值设为一个未来的值。这样当浏览器在下次请求同一个页面的时候发送If-Modified-Since字段并且这个值是一个未来的值,服务器在发现这个值大于该页面最后修改时间之后将返回HTTP的304响应码表示该页面没有更新过,从而达到了污染受害者缓存的目的。

漏洞防御与修复

当用户输入会引入服务器响应包的任意字段时,应过滤\r 、\n之类的换行符,避免输入的数据污染到其他HTTP头。

需要说明的是,这是因为现在的主流Web服务器比如IIS,Apache HTTP Server以及WebGoat使用的Tomcat等等都有对这个问题作过改进,服务器会对即将发送出去的HTTP响应头里面每一项的值都会做一定的编码或者转换,以避免这个问题。比如Tomcat就响应头中的每一项的值都做过了URLEncode,从而保证即使Web应用存在HTTP应答拆分的漏洞,Web服务器上也从底层平台的角度保证了尽可能避免HTTP应答拆分漏洞带来的威胁。所以如果想要在自己的实验室环境中重现对HTTP应答拆分漏洞的成功利用,可以尝试安装比较老的Web服务器版本,比如Tomcat 4.1.24之前的版本。

自动化检测的可行性

感觉是可行的,并且与自动化反射型XSS检测的思路一致。
对服务器进行参数 fuzzing, 检测响应包中 header 中的字段是否出现参数部分。

参考资料

[1] WebGoat之Http Splitting攻击
[2] [WebGoat 中文手册]