記一次CTF比賽過程與解題思路-MISC部分

程式設計實驗室發表於2021-11-05

前言

最近好久沒更新部落格和公眾號了,有朋友問是不是在憋大招,但我不好意思說其實是因為最近一段時間太懶了,一直在當鹹魚…

意識到很久沒更新這個問題,我是想寫點什麼的,但好像一直當鹹魚也沒啥可分享的,最近剛參加了一個CTF比賽,來分享一些作為CTF小白的解題過程和思路~

由於篇幅太長,所以本文第一篇就先只發MISC部分,相比較於固定型別的幾種題目,MISC是最好玩的,比較考驗知識廣度和想象力(而且有簽到題)

推薦滲透測試工具

比賽回顧

大概看下這次比賽有哪些題

MISC

PDF

下載下來是個PDF,裡面只有一張圖,啥也沒有

嘗試轉換成word,得到flag

Ext Alpha

看一下題目,啥提示也沒有,好吧,先下載來看看

開啟是個亂碼檔案

嗯… 感覺二進位制檔案,丟binwalk分析一下

分析不出來… 又嘗試用UE和HEdit之類的16進位制編輯器開啟,但沒啥用,難道是什麼其他奇怪的二進位制格式嗎,我再試試

找了個Python的檔案轉換指令碼試試,結果還是不行

最後看了官方的writeup,才知道有種文字編碼格式叫 Ext Alpha 無語 =.=,從一開始我的思路就不對了

官方的WriteUp是用Word來開啟這個檔案。。如下:

我們先用txt開啟,看一下:

亂碼,我們需要換種方式開啟。這時可以考慮嘗試用word開啟。因為word對於初始文字編碼下多數字體不常見時會彈出換字型編碼視窗。如下:

Windows簡體中文文字編碼出現亂碼,我們可以考慮換其他編碼:

可見,Ext Alpha就是這個misc txt文字的編碼格式。flag就是:flag{0a07c11e46af753fd24d40023f0fdce1}

題目名稱就叫Ext Alpha,結果檔案編碼就是這個,這是真的沒想到,我的經驗還是太少啊~

而且這個編碼格式是真的小眾的那種,我都搜不到…

只能說,學到了,666

dddns

又是沒有啥提示的一道題,先下載附件吧

下載下來是個壓縮包,裡面有個wireshark的流量包

開啟裡面都是DNS流量包

分析一下DNS流量特徵

從中得到兩個資訊:

  • 根域名為:b.dns.xibai
  • 關鍵字特徵 type NULL:可知該流量包中的流量就是基於iodine這一工具建立的DNS隧道的流 量

參考:DNS_Tunnel 分析

官方writeup裡也有一個指令碼,應該也是網上哪裡找的~ 這裡官方的writeup說:

“注意不要使用pyshark庫,其解析DNS中的域名資訊時會將非ascii字元解析為其他值的亂碼,直接手動實現一個建議的DNS流量解析功能即可”

wireshark抓包分析什麼的這塊我不太熟(大學計算機網路沒認真學),但參考文章裡的分析,找到一個現成的指令碼,可以解密iodine流量(解析DNS流量中傳遞的明文請求和響應)

程式碼就不貼,是在這裡找到的:hxp CTF 2017 - Write-ups | Rawsec

執行之後就解出來

Successfully extracted 23 packets into test.pcapng

重新用wireshark開啟,追蹤TCP流

flag出來了!

簽到2

題目提示「Base64÷4」,但base64解碼解不出來,base16也解不出,猜測16進位制hex轉字串,成功解出flag

normal_png

題目依然沒東西

下載下來看看,就簡單一張圖

老規矩,binwalk分析一下

果然不是簡單的圖片,暗藏玄機。拉出Hex Editor,這波修改png的高度,就可以把隱藏的東西顯示出來

03 6b改為04 6b

可以看到flag出來了

BBB

繼續沒題目

檔案是個壓縮包,開啟裡面有python程式碼

開啟看看

看起來這是一段加密程式碼,第13行的註釋是加密後的密文。

所以這裡就根據這個加密函式寫一個解密的,把密碼放進去解密

根據程式碼,加密的思路是先生成一個隨機數(1-100之間),將明文中每個字元的ASCII碼值與生成隨機數異或,然後將異或的結果base64編碼,再進行逆序得到密文。

逆向思維寫解密程式碼,先將密文base64解碼之後逆序,然後爆破隨機數得到flag

def decode(enc):
    tmp = base64.b64decode(enc[::-1])
    for k in range(1, 100):
        flag = ""
        for i in tmp:
            flag += chr(ord(i) ^ k)
        if "flag" in flag:
            return flag

PS:python3的話要把flag += chr(ord(i) ^ k)改成flag += chr(i ^ k)

執行一下

print(decode('=Q2Lh8SLusyfvg3K4pXIt0iKrwyfgwyLrwXfhESL/pyLgImf4V3f'))

爆破出:flag{963f488de2659f523448ca2a6f274686}

長安沒有秋天

沒題目,起了這個名字不知道是啥

又是壓縮包,哦吼是個損壞的壓縮包

有註釋,有加密

flag就在裡面那個檔案裡,那就來看看這個密碼是啥咯

首先是這個註釋key2{736e6f772a32},看起來應該是16進位制字串,解碼一波得到snow*2

試了下snow*2snowsnow密碼都不對,不過題目哪有這麼簡單的,既然這個是key2,那應該還有個key1。

聯想到剛才開啟壓縮包的時候提示損壞,那這個壓縮包應該還暗藏什麼玄機,用010 editor開啟看看~ 果然藏了點私貨在裡面

這裡key1就拿到了:key1{666c61672a33},繼續16進位制解碼一下

試著用flag*3flagflagflag這個密碼解壓flag,成功了,不過這檔案……有點奇怪

看似空白檔案,其實是有東西的

結合前面key2有個snow*2,聯想到是snow隱寫,密碼應該是snowsnow~

參考:

用snow工具來解碼試一試:

Nice!flag到手!下一題~

黑客入侵

MISC部分的最後一題了~ 這次居然有提示,不過沒啥用

下載下來依然是壓縮包,還套娃

那我繼續解壓

還有個說明

就是要分析流量識別出webshell唄,那就開始,先wireshark開啟分析

過濾http協議,看到都是192.168.68.128這個IP的請求

追蹤一下TCP流,Host: 192.168.68.128:9080,埠9080

提示裡要的是黑客最後用的木馬檔名,所以找到no數值最大的一個HTTP請求包

所以最後一個木馬名稱是:tlswslhaoev4lva.php

接下來就是要找“一個著名的webshell管理工具的名字”了,繼續追蹤TCP流

流量加密了,繼續

好了,這裡只能靠經驗了,或者主流的Webshell管理工具就這幾個,一個個嘗試看看

  • godzilla
  • caidao
  • antsword
  • behinder

這個特徵應該是godzilla,接下來計算一下md5就能得出flag了~

線上工具:MD5線上加密(HASH)工具 - 010tools

最後flag:flag{fe7c3416a2ace0d97e4029e77368c5ab}

參考資料

線上工具

歡迎交流

程式設計實驗室專注於網際網路熱門新技術探索與團隊敏捷開發實踐,在公眾號「程式設計實驗室」後臺回覆 linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關技術文章和資料,同時有任何問題都可以在公眾號後臺留言~

程式設計實驗室.jpg

相關文章