zoukankan      html  css  js  c++  java
  • 0X01 OWASP WebGoat Splitting

    • 什么是HTTP Splitting 

      HTTP 拆分攻击又名CRLF注入攻击。即是发送一个或几个HTTP指令迫使漏洞服务器产生一个攻击者构想好的输出。可以让服务器误把几条HTTP请求。当作一次完整的HTTP请求来解释。攻击者完全控制第二条HTTP请求,在第二条请求中加入请求指令到目标系统。第一部分使服务器接受两个HTTP响应,第二部分即是在服务器上请求一些非法资源,而服务器将会自动匹配到第二次响应,输出攻击者想要请求的资源,从而达到攻击者的目的。

      HTTP请求是基于请求---响应的请求,当浏览器发出请求,HTTP服务器返回响应,浏览器根据响应再发出请求,依次类推。但需要知道的是,响应的返回通常是基于队列的形式

    • HTTP Splitting 核心
      • 输入的参数没有过滤。主要是(%0D和%0A 行首,换行)
      • 参数放入请求头当中
      • 重定向(302重定向)
    • 什么是重定向响应:

    • 举例:

      接下来的例子采用的是owasp webgoat 实验环境举例。下面看操作步骤:

    1.   首先我们需要判定是否存在这个HTTP Splitting 漏洞。它形成的主要原因是应用程序没有对换行等字符进行处理。那么,我们先随意输入下列字符:‘en%0d%0a’,使用抓包工具开查看结果:从结果我们可以看出存在一个HTTP Splitting 漏洞

       2.  既然服务器可以返回我们输入的值进入请求头当中,且没有做任何的处理。那么我们就可以构造请求值并且让服务器返回回来。接下来,我们先补充一下概念:

    content-length:0  :当响应队列读取到第一个content-length:0的时候,会认为这个响应已经结束接着向浏览器发出,而把之后的内容留在了响应队列里。而后面的内容是我们精心构造的内容,正好又形成了另外一个响应,当浏览器根据重定向的地址请求访问的时候,后面这个响应正好发出

    这个时候我们开始构造我们需要服务器返回的响应。现在我们将下面的值进行URL编码来发送给服务器。

    en
    
    Content-Length: 0
    
    
    
    HTTP/1.1 200 OK
    
    Content-Type: text/html
    
    Content-Length: 31
    
    <html>hacked successfully</html>
    en%0D%0AContent-Length%3A%200%0D%0A%0D%0AHTTP%2F1.1%20200%20OK%0D%0AContent-Type%3Atext%2Fhtml%0D%0AContent-Length%3A%2031%0D%0A%3Chtml%3E%20hacked%20successfully%3C%2Fhtml%3E

    输入值之后,我们抓包来查看信息:

    请求包:

    返回包:

     从返回包我们发现这是一个重定向返回包,那么接下来浏览器会自动在发送一个请求。接下来我们查看查看自动请求的包:我们有发现,我们输入的值再次被发送。

     自动请求包的返回包查看,

     

     在返回包当中我们发现,我们精心构造的内容被服务器返回回来了。接下来,我们准备Cache Posioning

      3.  在进行攻击之前,我们先了解一下新的请求头:Last-modify

      比如在构造的http 200请求中加入Last-modify字段,并设置一个将来的值比如2020年1月1日。意思是服务器告诉浏览器,这个网页最后一次修改在2020年1月1日的时候。然后如果浏览器不清除缓存,下一次仍然请求这个页面的时候,它会加上if-modify-since字段,并且值是2020年1月1日,也就是说浏览器会问服务器,这个网页在2020年1月1日之后修改过嘛?当然服务器是人的话肯定会对这个问法莫名其妙,怎么会传过来一个未来的值?但是因为是程序,服务器会比对最后一次修改时间和传过来的时间,发现传过来的时间较新(都是未来了,肯定新),就会回发304响应,即not modify,表示这个网页没有被修改过。浏览器接受到了这个响应会从本地缓存读取网页,当然是我们之前注入的错误网页。换句话说,如果浏览器不清除缓存,再也别想读取到正确的网页信息了。
      接下来,我们修改一下“值”
    en
    
    Content-Length: 0
    
    
    
    HTTP/1.1 200 OK
    
    Content-Type: text/html
    
    Last-Modified: Mon, 27 Oct 2051 14:50:18 GMT
    
    Content-Length: 31
    
    <html>hacked successfully</html>

    编码之后发送

    这个时候,我们查看一下界面,

  • 相关阅读:
    Ubuntu中的vsftpd配置
    Ubuntu学习-增加更新源及安装软件及卸载软件
    Ubuntu16.04下安装sublime text3
    需要读的书
    同一机器 部署 两个 jboss
    log4j 总结 精华
    oracle 笔记
    oracle 用户 多个表空间
    json
    json 基础
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12930512.html
Copyright © 2011-2022 走看看