[web安全]CRLF漏洞浅析与实战

CRLF漏洞浅析与实战

HTTP协议就是一种约定。HTTP报文,本质上也就是一串字符串。服务端监听端口,当客户端向指定端口发送一串字符流(实际上是字节流,这里用了协议分层中的对等的思想),服务端在接收到字符流后,按照http协议的格式,将字符串进行处理。

漏洞原理

部分情况下,由于与客户端存在交互,会形成下面的情况
image

也就是重定向且Location字段可控

如果这个时候,可以向Location字段传点qqgg的东西

image

实战操作

下面网站功能是重定向到指定的URL。这种漏洞

//index.php
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CRLF 漏洞测试</title>
</head>
<body>
    <center>
        <h1>CRLF 漏洞测试</h1>
        <form action="#" method="get">
            <input type="text" name="url"/>
            <input type="submit" name="submit" value="goto">
        </form>
    </center>
    
</body>
</html>
<?php
    if(isset($_GET['submit'])){
        echo "Header!";
        header("Location:".$_GET['url']);
    }
    echo "No Header!";

image

会话固定

可能是因为开发能力不足,感觉固定会话攻击没啥危害

反射xss

细节:需要把Location字段后面的所有响应头到响应体中

防御

  1. 对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、’、”、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。

  2. 创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中。

  3. 在将数据传送到http响应头之前,删除所有的换行符

posted @ 2021-12-05 23:57  Aur0ra*  阅读(274)  评论(0编辑  收藏  举报