欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP代码执行漏洞总结

程序员文章站 2022-03-30 12:47:20
...
这篇文章介绍的内容是关于PHP代码执行漏洞总结,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

PHP代码执行漏洞总结


ref : http://blog.csdn.net/kuangmang/article/details/27170309
ref : http://blog.csdn.net/fuckcat_2333/article/details/52125951

1 代码执行函数

php中可以执行代码的函数有: eval()、assert()、``、system()、exec()、shell_exec()、passthru()、 pcntl_exec()
这些函数中的参数(部分)可控时,则可能命令注入漏洞。通常会使用escapeshellarg对参数进行处理,但在低版本的PHP库函数中该函数存在漏洞(原因:Windows上未对反斜杠进行过滤),需要注意。

2 文件包含代码注入

当文件包含函数(include、include_once、require、require_once)中包含输入变量时,可能导致代码注射。
条件:allow_url_include=On,PHP Version>=5.2.0
demo code:

<?phpinclude($_GET['a']);?>

访问http://127.0.0.1/demo.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E时,即执行phpinfo()。

3 正则表达代码注入

preg_replace()函数:
当pattern中存在/e模式修饰符,匹配上时,即允许执行replacement中的代码。

3.1 第一个(pattern)参数注入

条件:magic_quotes_gpc=Off,pattern参数中注入/e选项;
demo code:

<?phpecho $regexp = $_GET['reg'];
$var = '<php>phpinfo()</php>';
preg_replace("/<php>(.*?)$regexp", '\\1', $var);?>

访问http://127.0.0.1/preg_replace1.php?reg=%3C/php%3E/e
即会执行phpinfo()

3.2 第二个人(replacement)参数注入

条件:pattern参数中带/e

<?phppreg_replace("/testxxx/e",$_GET['h'],"jutst test testxxx!");?>

提交 http://127.0.0.1/demo2.php?h=phpinfo()时, 即 执行phpinfo()。

3.3 第三个参数注射

4 动态代码执行

4.1 动态变量代码执行

<?php$dyn_func = $_GET['dyn_func'];
$argument = $_GET['argument'];
$dyn_func($argument);?>

当http://127.0.0.1/dyn_func.php?dyn_func=system&argument=ipconfig时,执行ipconfig命令

4.2 动态函数代码执行

关键函数:create_function
demo code:

<?php$foobar = $_GET['foobar'];$dyn_func = create_function('$foobar', "echo $foobar;");$dyn_func('');?>

当提交http://127.0.0.1/create_function.php?foobar=system%28dir%29时,执行dir命令

5 其他

array_map()函数
ob_start()函数???
函数处理函数:http://www.php.net/manual/zh/book.funchand.php

相关推荐:

PHP执行程序php.exe参数解析

以上就是PHP代码执行漏洞总结的详细内容,更多请关注其它相关文章!

相关标签: php 总结 漏洞