在研究漏洞过程中发现了一个有趣的玩意

  众所周知,URL中的空格往往会被编码成%20
 如:
GET /url end_url HTTP/1.1
 会被解析为:
GET /url%20end_url HTTP/1.1

 那么,假设我们使用 burp 直接发送空格呢?

空格测试
随手复制并构建的包,不需要关注其它内容哈

 很明显,是直接发送出去的。下面测试一下服务器能否正常识别,编写PHP代码如下:

<?php
// 获取url参数
$param = $_GET['param'];

// 根据参数值返回不同的结果
if ($param == 'value1') {
   echo '这是参数为value1时返回的结果';
} elseif ($param == ' value2') {
   echo '这是参数为value2时返回的结果';
} else {
   echo '未知参数';
}
?>

 注意观察,' value2'前面是带有空格的。
 发送数据包观察:

识别测试
phpstudy 的 WNMP 环境可以正常识别

 重点来了:我发现某些设备中,http 数据包如果没有按照标准来,可能会出现无法解析的问题。这就是个典型例子,经过测试。出现了能识别出 HTTP 协议,但无法解析的情况。直接连告警都不会触发。剩下不多说了。