標籤:模式 image 版本 nbsp 去除 reg str eval mil
PHP 代碼審計代碼執行注入
所謂的代碼執行注入就是 在php裡面有些函數中輸入的字串參數會當做PHP代碼執行。
如此的文章裡面就大有文章可以探究了
一 常見的代碼執行函數
Eval,assert,preg_replace
Eval函數在PHP手冊裡面的意思是:將輸入的字串編程PHP代碼
測試代碼如下,然後在URL裡面將變數moon的值賦值為phpinfo()
執行成功 得出當前PHP版本,
preg_replace執行Regex搜尋和替換
當pattern 中存在/e 模式修飾符,即允許執行代碼
assert()將檢查給定的斷言,如果其結果為FALSE,則採取適當的操作。
首先測試eval函數 這是測試代碼
下面是測試結果
preg_replace()
1第一個參數注入
/* 大致就是Regex過濾後是phpinfo()
必須有參數/e URL測試 加 reg=/e
*/
大致意思就是 將String中含reg的字串的樣式去除
首先都有參數/e ,這個模式下才能進行代碼執行
然後輸入要過濾的字元,輸入<\/php>,模式/e,將<php>phpinfo()</php>過濾成
Phpinfo(),成功執行
2 第二種方式比較簡單好理解,直接注入
preg_replace("/moon/e",$_GET[‘moon‘],"I love moon");
3參數三注入成功
後面附上整個測試代碼
<?php//PHP 代碼審計代碼執行注入/* if(isset($_GET[‘moon‘])){ $moon=$_GET[‘moon‘]; //1.eval("\$moon=$moon;"); //2.assert("\$moon=$moon;");} */ //正則代碼執行/* 參數一注入 echo $regexp = $_GET[‘reg‘];$String = ‘<php>phpinfo()</php>‘;//preg_replace("/<php>(.*?)$regexp","\\1",$String);var_dump(preg_replace("/<php>(.*?)$regexp","\\1",$String)); */ //參數二注入//preg_replace("/moon/e",$_GET[‘moon‘],"I love moon");//參數三注入preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $_GET[‘moon‘]); ?>
PHP 代碼審計代碼執行注入