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>

    编码之后发送

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

  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12930512.html
Copyright © 2011-2022 走看看