1. Windows下Ping命令的隐藏玩法很多人以为ping只是个检测网络连通性的小工具但在CTF赛场上这个看似简单的命令却能玩出各种花样。去年我在参加一场线下赛时就遇到过需要利用ping命令绕过过滤读取服务器文件的题目。当时我花了整整两小时才搞明白那些特殊字符的妙用今天就把这些实战经验完整分享给大家。在Windows系统中当我们通过URL参数传递ping命令时服务器通常会进行严格的过滤。比如题目中出现的/?ip127.0.0.1;cat flag.php这个请求系统会直接拦截包含空格的命令。这时候就需要用到一些特殊的空格替代符我整理了几个最常用的$IFS$9这是Linux下最经典的替代方案${IFS}效果和上面类似但更简洁%09URL编码的tab键{cat,flag.php}用逗号分隔的奇特语法# 实际使用示例 /?ip127.0.0.1;cat$IFS$9flag.php2. 绕过空格过滤的三种实战技巧2.1 变量拼接法当直接使用flag.php被拦截时可以尝试字符串拆分。我常用的方法是定义两个变量分别存储fl和ag然后拼接起来使用/?ip127.0.0.1;afl;bag;cat$IFS$1$a$b.php这里有个细节要注意变量定义的顺序最好打乱比如把ag放在前面定义。很多WAF会检测连续的flag字符串但很少会检测这种拆分开的变量组合。2.2 Base64编码法如果系统过滤了太多关键字符不妨试试编码转换。我习惯先用base64编码命令再通过管道解码执行/?ip127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh这个命令中Y2F0IGZsYWcucGhw就是cat flag.php的base64编码。记得最后要用sh而不是bash执行因为很多系统会过滤bash但放过sh。2.3 内联执行法这是最高阶的玩法需要把命令嵌套在反引号中执行。比如先列出目录再读取文件/?ip127.0.0.1;cat$IFS$9ls这种方法相当于把ls命令的输出作为cat的参数。我在实际测试中发现很多过滤系统对这种嵌套命令的检测都比较弱。3. 常见坑点与解决方案第一次尝试这些方法时我踩过不少坑。比如用%20替代空格在Linux环境下经常失效。后来发现$IFS$9的兼容性最好它利用了Linux的Internal Field Separator机制。另一个常见问题是权限限制。有时即使绕过过滤也会提示Permission denied。这时候可以尝试读取其他文件来获取线索/?ip127.0.0.1;cat$IFS$9index.php通过查看网站源码往往能找到过滤规则或者意外泄露的敏感信息。有次比赛我就是通过读取.git目录下的文件最终拿到了flag。4. 防御措施与实战建议作为安全爱好者我们不仅要会攻击更要懂防御。如果不想自己的服务器被这样轻易突破我有几个实用建议对用户输入进行严格过滤特别是分号、管道符等特殊字符限制Web用户的权限避免其执行系统命令定期更新WAF规则加入对$IFS等特殊字符串的检测在实战中遇到过滤不要慌。可以先用/?ip127.0.0.1;ls测试命令执行是否可行再逐步尝试各种绕过方法。记住多查看网页源代码有时候flag就藏在注释里。
[GXYCTF2019]绕过空格过滤的Ping命令实战
发布时间:2026/6/4 3:25:03
1. Windows下Ping命令的隐藏玩法很多人以为ping只是个检测网络连通性的小工具但在CTF赛场上这个看似简单的命令却能玩出各种花样。去年我在参加一场线下赛时就遇到过需要利用ping命令绕过过滤读取服务器文件的题目。当时我花了整整两小时才搞明白那些特殊字符的妙用今天就把这些实战经验完整分享给大家。在Windows系统中当我们通过URL参数传递ping命令时服务器通常会进行严格的过滤。比如题目中出现的/?ip127.0.0.1;cat flag.php这个请求系统会直接拦截包含空格的命令。这时候就需要用到一些特殊的空格替代符我整理了几个最常用的$IFS$9这是Linux下最经典的替代方案${IFS}效果和上面类似但更简洁%09URL编码的tab键{cat,flag.php}用逗号分隔的奇特语法# 实际使用示例 /?ip127.0.0.1;cat$IFS$9flag.php2. 绕过空格过滤的三种实战技巧2.1 变量拼接法当直接使用flag.php被拦截时可以尝试字符串拆分。我常用的方法是定义两个变量分别存储fl和ag然后拼接起来使用/?ip127.0.0.1;afl;bag;cat$IFS$1$a$b.php这里有个细节要注意变量定义的顺序最好打乱比如把ag放在前面定义。很多WAF会检测连续的flag字符串但很少会检测这种拆分开的变量组合。2.2 Base64编码法如果系统过滤了太多关键字符不妨试试编码转换。我习惯先用base64编码命令再通过管道解码执行/?ip127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh这个命令中Y2F0IGZsYWcucGhw就是cat flag.php的base64编码。记得最后要用sh而不是bash执行因为很多系统会过滤bash但放过sh。2.3 内联执行法这是最高阶的玩法需要把命令嵌套在反引号中执行。比如先列出目录再读取文件/?ip127.0.0.1;cat$IFS$9ls这种方法相当于把ls命令的输出作为cat的参数。我在实际测试中发现很多过滤系统对这种嵌套命令的检测都比较弱。3. 常见坑点与解决方案第一次尝试这些方法时我踩过不少坑。比如用%20替代空格在Linux环境下经常失效。后来发现$IFS$9的兼容性最好它利用了Linux的Internal Field Separator机制。另一个常见问题是权限限制。有时即使绕过过滤也会提示Permission denied。这时候可以尝试读取其他文件来获取线索/?ip127.0.0.1;cat$IFS$9index.php通过查看网站源码往往能找到过滤规则或者意外泄露的敏感信息。有次比赛我就是通过读取.git目录下的文件最终拿到了flag。4. 防御措施与实战建议作为安全爱好者我们不仅要会攻击更要懂防御。如果不想自己的服务器被这样轻易突破我有几个实用建议对用户输入进行严格过滤特别是分号、管道符等特殊字符限制Web用户的权限避免其执行系统命令定期更新WAF规则加入对$IFS等特殊字符串的检测在实战中遇到过滤不要慌。可以先用/?ip127.0.0.1;ls测试命令执行是否可行再逐步尝试各种绕过方法。记住多查看网页源代码有时候flag就藏在注释里。