选择上来先看source
LOW
<?php // 检查是否提交了表单 if (isset($_POST['Submit'])) { // 获取输入的目标 IP 地址 $target = $_REQUEST['ip']; // 确定操作系统并执行 ping 命令 if (stristr(php_uname('s'), 'Windows NT')) { // 如果是 Windows 操作系统 $cmd = shell_exec('ping ' . $target); } else { // 如果是类 Unix 操作系统 $cmd = shell_exec('ping -c 4 ' . $target); } // 将 ping 命令的输出显示给最终用户 echo "<pre>{$cmd}</pre>"; } ?>
这个是low等级,可以看到没做过滤,直接加命令
MED
接下来是
med等级
<?php // 检查是否提交了表单 if (isset($_POST['Submit'])) { // 获取输入的目标 IP 地址 $target = $_REQUEST['ip']; // 设置黑名单(用于防止命令注入) $substitutions = array( '&&' => '', // 移除 && ';' => '', // 移除 ; ); // 从输入中移除黑名单中的任何字符 $target = str_replace(array_keys($substitutions), $substitutions, $target); // 确定操作系统并执行 ping 命令 if (stristr(php_uname('s'), 'Windows NT')) { // 如果是 Windows 操作系统 $cmd = shell_exec('ping ' . $target); } else { // 如果是类 Unix 操作系统 $cmd = shell_exec('ping -c 4 ' . $target); } // 将 ping 命令的输出显示给最终用户 echo "<pre>{$cmd}</pre>"; } ?>
可以看到过滤了&&和;
直接用 | 解决
当然也有
这个是利用过滤将;删除之后剩余的&&
HIGH
<?php // 检查是否提交了表单 if (isset($_POST['Submit'])) { // 获取输入的目标 IP 地址,并去除首尾的空格 $target = trim($_REQUEST['ip']); // 设置黑名单,定义需要移除的特殊字符 $substitutions = array( '&' => '', // 移除 & ';' => '', // 移除 ; '| ' => '', // 移除 | '-' => '', // 移除 - '$' => '', // 移除 $ '(' => '', // 移除 ( ')' => '', // 移除 ) '`' => '', // 移除 ` '||' => '', // 移除 || ); // 从输入中移除黑名单中的任何字符 $target = str_replace(array_keys($substitutions), $substitutions, $target); // 确定操作系统并执行 ping 命令 if (stristr(php_uname('s'), 'Windows NT')) { // 如果是 Windows 操作系统 $cmd = shell_exec('ping ' . $target); } else { // 如果是类 Unix 操作系统 $cmd = shell_exec('ping -c 4 ' . $target); } // 将 ping 命令的输出显示给最终用户 echo "<pre>{$cmd}</pre>"; } ?>
对IP进行了很细致的过滤,但是只要是过滤就得出现绕过
这里的代码发现有
'| '
会修改|加空格,那么只要我们命令里没用空格就可以解决
还有“ | | ”这里有空格也可以绕过
PHP是世界上最好的语言
<?php // 检查是否提交了表单 if (isset($_POST['Submit'])) { // 检查 Anti-CSRF 令牌 checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php'); // 获取输入 $target = $_REQUEST['ip']; $target = stripslashes($target); // 将 IP 拆分成 4 个八位 $octet = explode(".", $target); // 检查每个八位是否为整数 if ( (is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4) ) { // 如果所有 4 个八位都是整数,重新组合 IP $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3]; // 确定操作系统并执行 ping 命令 if (stristr(php_uname('s'), 'Windows NT')) { // Windows $cmd = shell_exec('ping ' . $target); } else { // *nix $cmd = shell_exec('ping -c 4 ' . $target); } // 反馈给最终用户 echo "<pre>{$cmd}</pre>"; } else { // 操作失败。告知用户有错误 echo '<pre>ERROR: You have entered an invalid IP.</pre>'; } } // 生成 Anti-CSRF 令牌 generateSessionToken(); ?>
标签:target,ping,cmd,Ping,dvwa,substitutions,移除,device,操作系统 From: https://www.cnblogs.com/nish1hundun/p/17858211.html