这里说一点,代码执行和命令执行,都需要php.ini关闭safe_mode的情况下。。
如果不能获取环境变量,当然也可以通过com组件或全局变量,但我们只对这种类型
$cmd = $_GET['cmd']
代码执行,这里有两个传小马常用的危险函数
eval() 和 assert()
首先来找代码层面的phpinfo();然后通过?cmd=system(ipconfig)看是否能调用系统函数。
注意eval写法: eval("$a=$a");
assert写法: assert("$a=$a"); 网页提交phpinfo不能漏分号; ,eval函数是接受字符串的。
然后接着来看第二种代码执行,,,回调函数
目的是通过回调函数,调用出phpinfo()这样一个页面,导致代码执行
有两种,第一种,自定义的callback函数里封装着eval函数,
function callback(){
// $a = $_GET['cmd'];
eval($a); //callback函数里封装着eval这样的危险函数,我们通过调用变量a来调用危险函数。
//给cmd变量传入phpinfo ?cmd=phpinfo(); 实际上传到封装函数里eval参数执行。
}
call_user_func('callback',$a);
最经典的通过给参数?cmd赋值phpinfo();,eval($a)调用执行,变量a这里可控。。
第二种,,先给变量赋值phpinfo(),变量我们不可控,但传入的assert函数没做过滤,给变量a传入一个assert函数,导致代码执行
$b="phpinfo()";
call_user_func($_GET['a'],