码迷,mamicode.com
首页 > 其他好文 > 详细

代码执行函数

时间:2021-01-06 12:14:00      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:注入   防御   func   string   post   file   标点符号   info   其他   

一、代码执行(相关函数)

大致分为五类:
1、eval + assert函数
2、pre
3、用户自定义函数
4、动态函数
5、其他

二、eval

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 执行一个正则表达式的搜索和替换
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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!