
一 代码执行函数
PHP中可以执行代码的函数。如eval()、assert()、``、system()、exec()、shell_exec()、passthru()、 escapeshellcmd()、pcntl_exec()
等
demo
1 | <?php |
二 文件包含代码注射
文件包含函数在特定条件下的代码注射,如include()、include_once()、 require()、require_once()
。
当allow_url_include=On
,PHP Version>=5.2.0
时,导致代码注射。
demo
1 | <?php |
访问http://127.0.0.1/include.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E
即
执行phpinfo()
三 正则匹配代码注射
众所周知的preg_replace()
函数导致的代码注射。当pattern
中存在/e模式修饰符,即允许执行代码。这里我们分三种情况讨论下
3.1 preg_replace() pattern
参数注射
pattern即第一个参数的代码注射。
当magic_quotes_gpc=Off
时,导致代码执行。
demo
1 | <?php |
访问http://127.0.0.1/preg_replace1.php?reg=%3C\/php%3E/e
即
执行phpinfo()
3.2 preg_replace() replacement
参数注射
replacement即第二个参数的代码注射,导致代码执行。
demo
1 | <? |
当我们提交 http://127.0.0.1/preg_replace2.php?h=phpinfo() 即
执行phpinfo()。
3.3 preg_replace()
第三个参数注射
我们通过构造subject参数执行代码。提交:http://127.0.0.1/preg_replace3.php?h=[php]phpinfo()[/php]
或者 http://127.0.0.1/preg_replace3.php?h=[php]${phpinfo%28%29}[/php]
导致代码执行
demo
1 | <? |
四 动态代码执行
4.1 动态变量代码执行
demo
1 | <?php |
我们提交 http://127.0.0.1/dyn_func.php?dyn_func=system&argument=ipconfig
执行ipconfig命令
4.2 动态函数代码执行
demo
1 | <pre lang="php" file="demo42.php" colla="+"> |
我们提交 http://127.0.0.1/create_function.php?foobar=system%28dir%29
执行dir命令
五 其他
5.1 ob_start()函数的代码执行
demo code 5.1:
1 | <pre lang="php" file="demo51.php" colla="+"> |
5.2 array_map()
函数的代码执行
demo
1 | <pre lang="php" file="demo52.php" colla="+"> |
我们提交 http://127.0.0.1/array_map.php?callback=phpinfo
即执行phpinfo()
5.3 unserialize()
与eval()
unserialize()
是PHP中使用率非常高的函数。不正当使用unserialize()
容易导致安全隐患。
demo
1 | <pre lang="php" file="demo53.php" colla="+"> |
我们提交 http://127.0.0.1/unserialize.php?saved_code=O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo%28%29;%22;}
即执行phpinfo()
5.4 容易导致安全问题的函数
同类型函数还有很多
1 | array_map() |
- Post title:PHP中容易产生命令执行漏洞的那些函数
- Post author:langu_xyz
- Create time:2016-10-10 21:00:00
- Post link:https://blog.langu.xyz/PHP中容易产生命令执行漏洞的那些函数/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.