题目概述
脚本接受一个名为c的GET参数,并在通过一定的安全检查后,将该参数作为命令执行。目标是找到一种方法绕过安全检查,并执行能够获取flag的命令。
解题步骤
- 分析脚本
首先,我们分析PHP脚本的关键部分:
if(isset($_GET[‘c’])){ |
$c=$_GET[‘c’]; |
if(!preg_match(“/\;|cat/i”, $c)){ |
system($c.” >/dev/null 2>&1″); |
} |
} |
从脚本中可以看出,c参数的值被存储在变量$c中,并且通过一个正则表达式进行检查。如果$c中包含分号(;)或字符串cat(不区分大小写),则不会执行system函数。
- 寻找绕过方法
我们的目标是找到一个能够绕过这个正则表达式检查的输入,同时又能执行有用的命令来获取flag。
经过尝试,我们发现可以使用逻辑或操作符||来构造一个可能有效的输入。由于脚本将输出重定向到/dev/null,我们无法直接看到命令的输出,但可以假设题目设计者在后台设置了某种机制来检测特定的输入,并相应地返回flag。
- 构造输入
基于上述分析,我们构造了以下输入:
c=more%20flag|| |
这里,%20是空格的URL编码。这个输入尝试使用more命令来显示一个名为flag的文件的内容,同时使用逻辑或操作符||来尝试执行后面的命令(虽然在这个例子中后面没有命令)。重要的是,这个输入成功地绕过了正则表达式检查。
- 验证结果
