Drupal 7.31SQL注入getshell漏洞利用詳解及EXP

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協議規范,拼接結構如下:

1

在調試程序時,使用burpsuite進行輔助很有效果,通過burpsuite你可以清楚看到每一次交互的數據包格式與字段內容。

GetShell利用:

  • 使用超級管理員進行登錄
  • 開啟網站的PHP?Filter功能
  • 新建block,編輯PHP代碼
  • 使用PHP_CODE進行保存

Post請求構造如下:

2

使用python進行發包,有個缺點就是不直觀,我們無法獲知我們的數據包構造是否正確,這時候可以使用requests模塊的proxies參數,將代理設置為burpsuite,然后就可以分析調試了。不過,使用新建block的方法獲取shell可能權限比較小。

在構造請求包的時候,有兩個字段是form_build_id和form_token,他們是Drupal自帶的防止CSRF所使用的token(類似于Django中的csrf防護)。發包之前必須找到這兩個東西,使用小型爬蟲即可。

3

還有一個關鍵點就是模擬登陸后要保存cookie,因為后續的攻擊利用都要攜帶admin的cookie,否則會執行出錯。

 

0x02

命令執行效果:本地監聽端口獲取反彈shell

測試環境:本地測試

程序執行:如下圖

4

由于反彈shell的基礎是socket,所以通信雙發沒有完成通信會發生阻塞,這里的表現是接收反彈shell的過程中主線程會阻塞。

反彈出shell的效果:

5

0x03

這個漏洞威力大,帶給對方主機的危害也大,且涉及到用戶覆蓋以及改變網站原有設置的問題。

如果想要隱蔽地利用,那么需要做很多輔助工作,比如在開啟php?filter的過程中,涉及到小型爬蟲抓取網站原有的配置信息。還有就是管理員的獲取方式進行改進,比如插入用戶之后將用戶加入管理員權限,這個本身我沒有測試過,但是是可行的。

接下來就是放出關鍵部位的代碼:

模擬登錄函數

6

開啟PHP?Filter:

7

代碼執行:

8

0x04

向這種關于Web的exp寫起來真的是不太順暢,因為要處理很多細節,比如模擬登陸、驗證碼、csrf的token、甚至徒手拼接POST attachment也不是沒有可能。

關于這個漏洞利用,其實還有一種方法,就是使用了Drupal的回調機制,利用SQL Injection在menu_router表中插入一些構造好的數據,配合最終構成了RCE,然后就是各種花式getshell了。由于篇幅有限,我這里就不再分析了。

最后,這個EXP對網站構成的危害比較大(覆蓋用戶名并且有可能改變網站結構),所以也只是寫出來供大家學習交流使用,重點是過程,不要用于非法用途。

相關文件下載:

鏈接:http://pan.baidu.com/s/1eQ3V7Bc 密碼:s9yi