1.php中的动态调用
这是别人对PHP动态条用函数的讲解:
看看PHP动态调用函数到底有什么作用,在PHP中是可以动态调用函数的,像这样
f
u
n
(
)
,
P
H
P
解
析
器
可
以
根
据
变
量
fun(),PHP解析器可以根据变量
fun(),PHP解析器可以根据变量fun的值来调用对用的函数,例如$fun=‘a’,解析器看到的将是a();这样的形式,从而调用函数a,具体代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
(isset($_GET['fun'])&&$_GET['fun']!='')?$fun=$_GET['fun']:$fun='def';
controller($fun);
function controller($fun){
if(function_exists($fun)) $fun();
else echo "函数{$fun}未定义";
}
function def(){
echo "由于用户没有传递参数,调用了缺省的函数def()";
}
function a(){
echo "函数a被调用!";
}
function b(){
echo "函数b被调用!";
}
?>
</body>
</html>
实例代码:
<?php
require_once showErrMsg.php;
$_action = (isset($_REQUEST[action])?$_REQUEST[action]:"");
if($_action!=null&&$_action!=){
if(function_exists($_action)){
eval("$_action();");
}else{
die(showErrMsg ( "<br>当前php文件中不存在方法[<b>".$_action."()</b>]。"));
}
}
?>
<?php
function showErrMsg($strMsg){
return "<font color=red>".$strMsg."</font>";
}
?>
看完他的实例代码,虽然可以看懂,但还是可以感觉道自己对PHP开发思维的不足,以后要多加练习,像这一段代码:
(isset($_REQUEST[action])?$_REQUEST[action]:"");
if($_action!=null&&$_action!=){
if(function_exists($_action)){
就很有开发的感觉,细节很到位,层层递进。像自己写的代码,直接就“eval("$_action();");”了,根本不管变量存不存在的问题。
2.漏洞利用
我们先试一下这个代码:
2.1没有传任何值:
2.2fun=a
等于b也差不多,就是a变成了b。
2.3fun=1
2.4 system
如果fun参数可控,并且这个地方参数也可控的话: