题目概述

脚本接受一个名为c的GET参数,并在通过一定的安全检查后,将该参数作为命令执行。目标是找到一种方法绕过安全检查,并执行能够获取flag的命令。

解题步骤

  1. 分析脚本

首先,我们分析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函数。

  1. 寻找绕过方法

我们的目标是找到一个能够绕过这个正则表达式检查的输入,同时又能执行有用的命令来获取flag。

经过尝试,我们发现可以使用逻辑或操作符||来构造一个可能有效的输入。由于脚本将输出重定向到/dev/null,我们无法直接看到命令的输出,但可以假设题目设计者在后台设置了某种机制来检测特定的输入,并相应地返回flag。

  1. 构造输入

基于上述分析,我们构造了以下输入:

c=more%20flag||

这里,%20是空格的URL编码。这个输入尝试使用more命令来显示一个名为flag的文件的内容,同时使用逻辑或操作符||来尝试执行后面的命令(虽然在这个例子中后面没有命令)。重要的是,这个输入成功地绕过了正则表达式检查。

  1. 验证结果

admin

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注