Ping类-linux命令的绕过
本章主要是一些linux命令的绕过
<?php
function sanitize($s) {
$s = str_replace(';', '', $s);
$s = str_replace(' ', '', $s);
$s = str_replace('/', '', $s);
$s = str_replace('flag', '', $s);
return $s;
}
if (isset($_GET['source'])) {
highlight_file(__FILE__);
die();
}
if (!isset($_POST['ip'])) {
die('No IP Address');
}
$ip = $_POST['ip'];
$ip = sanitize($ip);
if (!preg_match('/((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])/', $ip)) {
die('Invalid IP Address');
}
system('ping -c 4 '.$ip. ' 2>&1');
?>; :
:(分号):各种命令按从左到右的顺序执行,彼此之间不关心是否执行成功
| :
管道符:上一条命令的输出作为下一条命令的输入
在ping题型中127.0.0.1|ls因为 ping 命令的输出不会被 ls 命令所使用,所以 ls 命令只是按照其常规行为列出当前目录的内容,而与 ping 命令的输出无关。
$
$在命令参数后代表此命令将在后台进行,为后台进程
ping 127.0.0.1$ls,ping 127.0.0.1和ls会几乎同时开始执行。ping命令会一直运行,直到您手动停止它(通常使用Ctrl + C)。而ls命令会在完成文件列表操作后结束。
默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作。
对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&'实现这个目的。
$$ :
与,只有左边命令为真时后面才会执行
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。
当 $? == 0 时,表示执行成功;
当 $? == 1 时(非0的数,返回值在0-255间),表示执行失败。|| :
或
编码绕过
echo Y2F0IGZhbGcucGhw|base64 -d|bash //cat flag.php
License:
CC BY 4.0