0x00php
這個漏洞威力確實很大,並且Drupal用的也比較多,使用Fuzzing跑字典應該能夠掃出不少漏洞主機,可是作批量可能會對對方網站形成很大的損失,因此我也就只是寫個Exp再也不深刻下去。python
0x01shell
關於漏洞的原理和POC在個人博客上已經有文章進行解釋,這裏只是着重說一下利用過程。配合POC的效果,我主要是從遠程代碼執行和GetShell方面去作的利用。cookie
遠程代碼執行利用:socket
1.使用超級管理員進行登陸函數
2.開啓站點PHP Filter功能學習
3.新建aticle,選擇PHP_CODE模式(編輯php代碼)並預覽測試
4.預覽頁面載入後就會執行代碼網站
對應EXP中DrupalSQLin類的codeExecution函數,這個函數所作的事情就是把上述過程自動化。我編寫這個部分比較費勁的 是,requests發送attachment遇到了問題,沒有找到比較合適的Python模塊,最後實在沒辦法就本身對Post數據包進行拼接,拼接的 時候要當心,建議遇到一樣問題的朋友參考一下RFC1867協議規範,拼接結構以下:ui
在調試程序時,使用burpsuite進行輔助頗有效果,經過burpsuite你能夠清楚看到每一次交互的數據包格式與字段內容。
GetShell利用:
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