目錄
-
- 挖機思路
- 代碼執行的類型
- 指令執行常見的函數
- 過濾和預防函數
-
- 1. 過濾
就是通過php函數執行系統的指令,比如cmd,shell
挖機思路
- 使用者輸入的内容能夠控制函數
- 存在輸入可執行代碼的危險函數
代碼執行的類型
- 代碼的過濾的不嚴
- 系統的漏洞造成指令注入
- 調用第三方的元件存在執行代碼執行漏洞
指令執行常見的函數
-
system()函數
格式
咧
代碼
URL<?php $a=$_GET['cmd']; system($a); ?>
結果 URLxxxx?cmd=ipconfig
結果xxxx?cmd=echo 222>a.txt
-
passthru()函數
system() 函數還會嘗試在每行輸出完畢之後, 自動重新整理 web 伺服器的輸出緩存而passthru()函數擷取一個指令未經任何處理的
咧
咧
代碼
結果<?php $a = $_GET['cmd']; echo "<pre/>"; passthru($a); echo "<pre/>"; ?>
-
exec()函數
函數執行系統指令和
函數是PHP中的内置函數,用于執行外部程式并傳回輸出的最後一行。如果沒有正确運作指令,它也傳回NULL
代碼
<?php echo "<pre>"; $a = $_GET['cmd']; echo exec($a,$file); echo "</br>"; print_r($file); echo "<pre/>"; ?>
結果
他應為用的用的是echo輸出的隻能輸出一行
-
shell_exec()函數
shell_exec()函數是PHP中的一個内置函數,用于通過shell執行指令并以字元串的形式傳回完整的輸出。shell_exec是backtick操作符的别名,用于*nix。如果指令失敗,則傳回NULL,并且這些值對于錯誤檢查不可靠。
咧
代碼
結果<?php $a = $_GET['cmd']; echo "<pre>"; echo shell_exec($a); echo "<pre/>"; ?>
-
``反引号
與shell_exec是一樣的,就是用的shell_exec函數
咧
代碼
結果<?php $a = $_GET['cmd']; echo "<pre>"; echo `$a`; echo "<pre/>"; ?>
過濾和預防函數
1. 過濾
-
escapeshellcmd()函數
這個函數是過濾整條指令的,他會叫符号前面加上^
咧
代碼
<?php $a=escapeshellcmd($_GET['cmd']); system($a); echo "<br/>".$a; ?>
結果
他不會叫222寫入到a.txt檔案裡面
-
escapeshellarg()函數
将給字元串增加一個單引号并且能引用或者轉碼任何已經存在的單引号,這樣以確定能夠直接将一個字元串傳入 shell 函數,并且還是確定安全的
咧
代碼
結果<?php $a=escapeshellarg($_GET['cmd']); system($a); echo "<br/>".$a; ?>