标签:注入 防御 func string post file 标点符号 info 其他
大致分为五类:
1、eval + assert函数
2、pre
3、用户自定义函数
4、动态函数
5、其他
eval(PHP 4 , PHP 5 , PHP 7) - 把字符串作为PHP代码执行,当用户可以控制字符串那么此时就存在代码注入漏洞
eval ( string $code ) : mixed
把字符串 code 作为PHP代码执行。
参考:https://www.php.net/eval
<?php
highlight_file(__FILE__);
eval(‘phpinfo();‘);
?>
安全人员防御:开启GPC
在PHP5之前,magic_quotes_gpc 默认是开启的,magic_quotes_gpc 的作用很微妙,我一直使用PHP5多年,
magic_quotes_gpc 呈开启状态,平时没有受到任何影响。知道发现PHP的Cookie,如果有 ‘ 这样的标点符号,会将其转义 \‘
PHP在5.4之后将 magic_quotes_gpc 删除
PHP7 在 php.ini 里没有 magic_quotes_gpc 的选项,实际呈关闭状态。magic_quotes_gpc 关闭之后,
为了加强安全,原来所有的 $_POST[‘abc‘] 和 $_GET[‘abc‘] 最好全部加上 stripslashes() 来转义,例如:
$aa = stripslashes($_GET[‘abc‘]); //输入多余的单引号并没有报错,而被转义输出了
preg_replace 执行一个正则表达式的搜索和替换
preg_replace() 函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使 preg_replace() 参数当作PHP代码执行
<?php
highlight_file(__FILE__);
@preg_replace("/test/e",$_GET[‘cmd‘],"test");
?>
或者
<?php
highlight_file(__FILE__);
@preg_replace("/<data>(.*)<\/data>/e",‘$ret="\\1"‘,$_GET[‘cmd‘]);
?>
<?php
highlight_file(__FILE__);
$func = create_function(‘‘,$_GET[‘cmd‘]);
$func();
?>
或者
<?php
highlight_file(__FILE__);
if(isset($_GET[‘cmd‘])){
$myfunc = $_GET[‘cmd‘];
$myfunc();
}
?>
<?php
highlight_file(__FILE__);
$_GET[‘a‘]($_GET[‘b‘]);
?>
call_user_func 第一个参数是被调用的回调函数,其余参数是回调函数的参数。
使用 is_callable 函数 ,确定某函数是否可以回调
1,代表可以被回调
不输出代表不可以被回调
<?php
highlight_file(__FILE__);
@call_user_func(assert , $_GET[‘cmd‘]);
?>
<?php
highlight_file(__FILE__);
${phpinfo()}
?>
标签:注入 防御 func string post file 标点符号 info 其他
原文地址:https://www.cnblogs.com/lnterpreter/p/14225838.html