0x00
這個漏洞威力確實很大,而且Drupal用的也比較多,使用Fuzzing跑字典應該可以掃出很多漏洞主機,但是做批量可能會對對方網站造成很大的損失,所以我也就只是寫個Exp不再深入下去。
0x01
關於漏洞的原理和POC在我的博客上已經有文章進行解釋,這里只是着重說一下利用過程。配合POC的效果,我主要是從遠程代碼執行和GetShell方面去做的利用。
遠程代碼執行利用:
1.使用超級管理員進行登錄
2.開啟站點PHP Filter功能
3.新建aticle,選擇PHP_CODE模式(編輯php代碼)並預覽
4.預覽頁面載入后就會執行代碼
對應EXP中DrupalSQLin類的codeExecution函數,這個函數所做的事情就是把上述過程自動化。我編寫這個部分比較費勁的 是,requests發送attachment遇到了問題,沒有找到比較合適的Python模塊,最后實在沒辦法就自己對Post數據包進行拼接,拼接的 時候要小心,建議遇到同樣問題的朋友參考一下RFC1867協議規范,拼接結構如下:
在調試程序時,使用burpsuite進行輔助很有效果,通過burpsuite你可以清楚看到每一次交互的數據包格式與字段內容。
GetShell利用:
- 使用超級管理員進行登錄
- 開啟網站的PHP Filter功能
- 新建block,編輯PHP代碼
- 使用PHP_CODE進行保存
Post請求構造如下:
使用python進行發包,有個缺點就是不直觀,我們無法獲知我們的數據包構造是否正確,這時候可以使用requests模塊的proxies參數,將代理設置為burpsuite,然后就可以分析調試了。不過,使用新建block的方法獲取shell可能權限比較小。
在構造請求包的時候,有兩個字段是form_build_id和form_token,他們是Drupal自帶的防止CSRF所使用的token(類似於Django中的csrf防護)。發包之前必須找到這兩個東西,使用小型爬蟲即可。
還有一個關鍵點就是模擬登陸后要保存cookie,因為后續的攻擊利用都要攜帶admin的cookie,否則會執行出錯。
0x02
命令執行效果:本地監聽端口獲取反彈shell
測試環境:本地測試
程序執行:如下圖
由於反彈shell的基礎是socket,所以通信雙發沒有完成通信會發生阻塞,這里的表現是接收反彈shell的過程中主線程會阻塞。
反彈出shell的效果:
0x03
這個漏洞威力大,帶給對方主機的危害也大,且涉及到用戶覆蓋以及改變網站原有設置的問題。
如果想要隱蔽地利用,那么需要做很多輔助工作,比如在開啟php filter的過程中,涉及到小型爬蟲抓取網站原有的配置信息。還有就是管理員的獲取方式進行改進,比如插入用戶之后將用戶加入管理員權限,這個本身我沒有測試過,但是是可行的。
接下來就是放出關鍵部位的代碼:
模擬登錄函數
開啟PHP Filter:
代碼執行:
0x04
向這種關於Web的exp寫起來真的是不太順暢,因為要處理很多細節,比如模擬登陸、驗證碼、csrf的token、甚至徒手拼接POST attachment也不是沒有可能。
關於這個漏洞利用,其實還有一種方法,就是使用了Drupal的回調機制,利用SQL Injection在menu_router表中插入一些構造好的數據,配合最終構成了RCE,然后就是各種花式getshell了。由於篇幅有限,我這里就不再分析了。
最后,這個EXP對網站構成的危害比較大(覆蓋用戶名並且有可能改變網站結構),所以也只是寫出來供大家學習交流使用,重點是過程,不要用於非法用途。
相關文件下載:
鏈接:http://pan.baidu.com/s/1eQ3V7Bc 密碼:s9yi