原文鏈接:https://www.ibrahim-elsayed.com/?p=150
原作者:Ibrahim M. El-Sayed
譯:RunningSnail

譯者注:作者分享了他是如何通過文件遍歷+SQL注入+XXE漏洞的組合拳一步步滲透Deutsche Telekom網站,并且不厭其煩地告訴我們信息收集在滲透測試中的重要性。初次翻譯,如有不足之處忘各位看官輕噴。

我一直認為在漏洞賞金項目中找到漏洞是件容易的事,其中主要的技巧在于信息收集階段。這篇文章的目的不只是演示這些漏洞以及如何找到他們,也是為了演示在滲透測試(尋找漏洞)的過程中如何進行出色的信息收集。許多人都不分享他們是如何找到漏洞的,對此我深表理解,我也不打算分享我所有的技術但是我會在這篇文章中分享一些重要的技巧。

在我們開始這篇文章前,讓我簡要的介紹下Deutsche Telekom。

Deutsche Telekom AG(德國電信)是一個總部位于波恩的德國通信公司。Deutsche Telekom成立于1996年。2012年Deutsche Telekom建立了他們的漏洞賞金項目。他們有個非常有趣的漏洞賞金項目,從它開始之初(大概三年前)我就一直參與其中。我最喜歡他們賞金項目的地方在于他們只接受遠程代碼執行(RCE),SQL注入(SQLi)和其他高危漏洞(不同人的評判不同)。他們不接受xss,csrf和其它客戶端的攻擊。對我來說這非常具有挑戰性。

一切都從下面這個子域名說起:https://raz.telekom.de/ 。我用了各種搜索引擎來搜索這個子域名(感謝sublist3r),但是我沒有找到任何與它相關的信息。我也用了subbrute去嘗試所有的3位字母組合,但是暴力枚舉后沒有什么發現。

當我訪問“ https://raz.telekom.de/ ”時,頁面返回403。

我用dirbuster的自定義字典找到了一些頁面。下面是main.php頁面的截圖:

從這個頁面中你可以看到,也許是因為混亂的session管理,我以一個guest用戶的身份成功登錄并且可以進行一些操作。在開始尋找漏洞前,我總是努力去理解應用程序的目的以及它是如何工作的。這是信息收集過程的重要一步,是無法用任何工具實現的。我看了下這個應用并試了下不同的功能。從應用的名字可以看出,它是一個許可證管理應用,我可以導入許可證,驗證不同設備的許可證,更新許可證并查看許可證的信息。對我來說,這是個非常有趣的應用程序,有許多吸引人的功能可以去測試。我總是喜歡從“豐富的”功能下手。最終,我決定從“許可證導入”處的上傳功能開始。我嘗試上傳一些不同后綴名的文件,但是每次我都得到了下面的報錯信息。

從頁面的報錯信息中可以看出,我上傳的文件與定義在配置文件(test date)中的特定格式不相符。我想我需要找到這個配置文件然后上傳一個正確的符合配置文件中定義格式的文件,然后才能通過注入php代碼或者SQL注入來實現遠程代碼執行。

開始尋找這個配置文件,下面是上傳我的許可證時發送的請求:

我在“conf”變量(似乎是配置文件的一個參數)處加了一個單引號,可以看到頁面報錯“文件似乎不存在或者不可讀”。我決定嘗試文件遍歷來看下我能否讀這個文件或者判斷出它的路徑來直接訪問它。

我在“conf”變量值前加上“./”,代碼成功解析了配置文件。

我嘗試直接在根目錄下訪問“test date”(https://raz.telekom.de/test%20date ),但是卻不存在。可能配置文件在另一個文件夾下。當我在“man”參數后加上單引號時,得到了同樣的錯誤信息“無法解析文件”。 我想“man”參數的值“Funkwerk”應該是配置文件的父目錄。因此我在“conf”變量的值“test date”前加上“../Funkwerk/”。

“test date”文件被成功解析。正如預料的那樣,“man”參數是配置文件所在的目錄(“Funkwerk”也許是“manufacturer”的縮寫)。我繼續我的猜想并嘗試直接訪問配置文件。我試了下“https://raz.telekom.de/Funkwerk/test date ”,但是卻不存在。顯然我可能少輸了一些內容。我試了下“https://raz.telekom.de/Funkwerk ”,但是也不存在,也許這個目錄不在應用上,或者“Funkwerk”有父目錄。我用Dirbuster去枚舉所有可能的目錄(信息收集永遠不會結束)。我寫了一個python腳本將dirbuster的字典作為“Funkwerk”目錄的父目錄。如果我得到的結果不是404說明找到了父目錄,最后確認父目錄是“config”。有意思,離成功近了一步!

當我訪“https://raz.telekom.de/config/Funkwerk ”時,頁面返回403。為了下載這個配置文件,我得找到它的擴展名。但是在開始尋找擴展名之前,我決定尋找另一個配置文件,因為“test date”可能只是一個測試用的文件,不會有任何有價值的內容。接著我進行了如下測試(實際上這是很愚蠢的行為):

接著我試了下文件遍歷:

為了得到配置文件的擴展名(收集信息永遠不會結束),我決定寫一個Python腳本來枚舉“https://raz.telekom.de/config/OneBridge/obmg .[4個字母]”。我嘗試了所有的3到4個字母組合,最終確定了擴展名是“ini”。

訪問“obmg.ini”,結果如圖:

尷尬,這個文件才應該叫做“test”不是o(╯□╰)o。

接著我訪問了“test date”文件,如圖:

CSV

我們可以上傳一個以“;”作為分隔符的CSV文件,一切都如我猜想的那樣。現在我需要測試CSV文件中能否插入SQL代碼和php代碼,看下它是否會存為php頁面。我可以上傳任意擴展名的文件,只要它的內容與配置文件中定義的格式相符就行,所以我上傳了一個各個字段都是“<?phpinfo();?>?”的CSV文件。利用Dirbuster找到了一個“uploads”目錄。每次我上傳一個文件,我都嘗試從該目錄下訪問它,但是都不存在,目前來看似乎此法不通。

那么我們來試下SQL注入吧。我在CSV文件的每個字段處都加上一個單引號,結果如下:

顯然是有SQL注入的,開心!下面是我的poc(報錯注入):

別急,我想用遠程代碼執行來拿下這個應用服務器。我決定繼續尋找這個網站其他的漏洞。在繼續滲透前,我需要改進下我的代碼(信息收集工作永遠不會結束)。我之前確定了擴展名是“ini”,我嘗試去尋找所有有價值的配置文件。在代碼中加入“ini”,進一步枚舉“raz.telekom.de”下的有用文件。

在信息收集中,我發現了另一個頁面,只要你給它一個HW序列號(HWSerNum),它就會去數據庫中驗證許可證的內容。我發現它是有SQL注入的(努力就有回報)。

SQL注入 II

繼續收集信息,我發現在服務器上運行著PHPMyAdmin,通過注入測試了下我是否是root用戶,如果是的話我可以登錄到PHPMyAdmin來提權,不過很可惜我不是root用戶。接著我發現了一個有趣的配置文件“lms.ini”。

提權

“lms.ini”中有數據庫的用戶名和密碼,也就是說我可以登錄phpmyadmin。登錄phpmyadmin后,我發現這是個有XXE漏洞的老版本phpmyadmin。我在?secforce上找到了metasploit利用代碼。phpmyadmind的版本高亮如下:

成功利用XXE漏洞。

我在“lms.ini”文件中發現了一個webserver接口,而且有SQL注入。

SQL注入 III

“lms.ini”文件中有許多有用的信息,如“.cfg”配置文件。我繼續尋找遠程代碼執行漏洞。我全面測試了下文件上傳頁,我發現所有CSV文件都會重名為“[timestamp].csv”,我嘗試了不同的方法來繞過,但還是沒能更改擴展名。我又看了下是否有文件包含漏洞,讓另一個文件來包含這個csv文件以達到代碼執行的目的,可惜的是沒能成功,還是不能實現遠程代碼執行。

然而,我還是對我的成果感到滿意,因此我決定向廠商報告我的發現。這篇文章即將結束,文中我一直想強調的就是信息收集是找到漏洞的重要一環。信息收集工作永遠不會結束!


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/256/