【CTF入門】BUUCTF Misc刷題
簽到
點開發現簽到題直接把flag交出來了,直接複製提交即可
考點:瞭解CTF中flag的格式一般為flag{}
金三胖
下載檔案,發現裡面是一張gif圖片,我們檢視一下發現總有東西一閃而過
這裡我們介紹第一個在Misc影像隱寫中非常常用的工具——StegSolve
StegSolve功能一——逐幀檢視gif檔案
隱寫圖片解析神器,下載地址:http://www.caesum.com/handbook/Stegsolve.jar
它的用途有很多,之後我們會一步一步進行講解,首先我們開啟StegSolve(打不開的,參考這篇文章:詳細教程:Stegsolve的下載,jdk的下載、安裝以及環境的配置_stegsolve下載-CSDN部落格)
開啟發現只有一個非常小的視窗,點選File->open匯入gif圖片
Analyse->Frame Browser使用幀瀏覽器功能分解gif的幀
用下面的左右箭頭檢視各個幀的影像,我們發現了隱藏的flag:flag{he11ohongke}
考點:利用工具逐幀檢視gif檔案影像
你竟然趕我走
下載檔案,發現裡面是一張jpg圖片,我們檢視一下貌似什麼也沒有
圖片隱寫沒有具體的思路,我個人一般按照以下步驟做(來源於圖書《CTF那些事兒》):
圖片隱寫思路:
1. 檢視圖片的屬性是否藏了東西
2. 使用010 Editor、strings等工具發現插入隱藏資訊
3. 使用StegSolve、zsteg等工具發現隱寫隱藏資訊
4. 使用binwalk、foremost等工具提取隱藏資訊
010 Editor:十六進位制編輯器
它可以把檔案以十六進位制的格式開啟、檢視、修改,下載地址:http://www.caesum.com/handbook/Stegsolve.jar(雖然還有winhex等編輯器,但個人認為010 Editor更好用一些)
首先我們開啟010 Editor,匯入檔案
我們看到花花綠綠一大片的東西,啥啊這是?
JPG檔案格式介紹
JPG格式沒有直接儲存影像的畫素值資訊,而是將其轉換為YUV色彩空間(Y表示畫素的亮度,U和V一起表示色調與飽和度)儲存到影像資訊中,儲存時既可以選擇無失真壓縮也可以選擇有失真壓縮。
JPG檔案按照“段”的格式來組織儲存,一個檔案由多個段組成,每個段代表不同的資訊。同時,每個段也有自己唯一的識別符號。識別符號由兩個位元組組成,格式形如0x FF XX,其中FF代表不同的型別。
例如,SOI(Start Of Image)表示影像的開始,其段的識別符號為0X FF D8。更加詳細請檢視這篇文章:
整個JPG圖片的組織便是由這些不同型別的段和經過JPG壓縮後的資料組成的。(原文來自《CTF那些事兒》)
010 Editor的模板功能
010 Editor的模板功能可以自動為我們帶來檔案解析後的結果(亮色標記),我們就可以更加直觀地看出JPG檔案的各個段的位置,我們可以透過模板儲存庫來檢查和新增檔案的模板(一般沒有模板會在你匯入檔案的時候提醒你自動下載)
回到題目,我們發現從頭到尾檔案好像都沒什麼問題
我們可以ctrl+f進入字串搜尋,因為是CTF題目所以直接搜尋flag,檢視是否有直接插入的flag資訊,果然,我們發現了:
flag插入在檔案結尾段的後邊,被模板識別為“unknowPadding”段,我們直接可以複製flag提交了
考點:利用十六進位制編輯器找到隱藏的資訊
補充:StegSolve功能二——檢視圖片的具體資訊
這道題我們匯入StegSolve,使用檢視圖片的具體資訊功能也可以解開
我們用這個功能可以檢視圖片的具體資訊,其中包括了結尾插入的隱藏Ascii(字串)
二維碼
下載檔案,發現裡面是一張png格式的二維碼圖片,我們用二維碼識別軟體QR Research掃一掃,發現隱藏資訊——secret is here,並沒有flag
按照圖片隱寫思路,第一步無果,我們優先開啟010 editor開啟圖片檢視:
(PNG模板出了點問題,沒有很明顯的顏色,但不影響分析)
PNG檔案格式簡介
PNG是一種點陣圖檔案儲存格式,既可以儲存灰度影像(只有黑白灰,沒有彩色),也可以儲存彩色影像。PNG使用從LZ77派生的無損演算法壓縮影像資訊,能獲得較高的壓縮比,並利用特殊的編碼方法標記重複出現的資料,因而對影像的顏色沒有影響,也不可能產生顏色的損失,這樣就可以重複儲存而不降低影像質量。
PNG影像格式檔案由檔案頭和資料塊(Chunk)組成。PNG影像整體格式如下:
檔案頭(89 50 4E 47 0D 0A 1A 0A)+資料塊+資料塊+資料塊+......
回到題目,我們可以發現chunk[3]是PNG檔案的檔案尾,後面的chunk[4]塊大小為0h也就是之後的內容無法被PNG模板解析了。
根據常見的檔案頭(記一些常用的就好)的記錄我們可以發現50 4B 03 04是ZIP格式檔案的檔案頭,也就是說這張圖片後邊插入了ZIP壓縮包,我們應該如何把這壓縮包從這張圖片檔案中分離出來呢?
檔案分離
-
淳樸的複製貼上手工藝:使用十六進位制編輯器,我們把ZIP檔案從檔案頭到檔案尾的內容複製一遍,然後新建十六進位制檔案貼上上去,儲存後上“.zip”的字尾就有了。
-
利用Binwalk工具自動提取:Binwalk是一個自動提取檔案系統,該工具可以自動完成指定檔案的掃描,發現潛藏在檔案中中所有可疑的檔案型別以及檔案系統。使用命令:
binwalk QR_code.png -e
-e 提取隱藏檔案
即可自動提取出其中的隱藏檔案 -
利用foremost工具自動提取:foremost透過分析不同型別的頭、尾和內部資料結構,同映象檔案的資料進行比對,來還原檔案。支援19中型別檔案的恢復。使用者還可以透過配置檔案擴充套件支援其他檔案型別。使用命令:
foremost QR_code.png -o yincang
-o 輸出檔名
總而言之,我們分離出了zip檔案,我們嘗試開啟,發現裡面存在一個名為“4number.txt”的檔案。我們嘗試解壓卻發現壓縮包含有密碼。
遇到含有密碼的壓縮包思路
1. 仔細注意題目是否給出壓縮包解壓密碼的相關線索,有的話就填或者是利用工具爆破
2. 使用010 editor觀察zip檔案是否存在偽加密的情況
3. 需要CRC32爆破的特殊情況
根據檔名“4number”,我們可以猜測解壓密碼是四個數字,我們使用ARCHPR工具開始進行爆破。
ARCHPR爆破壓縮包密碼
爆破壓縮包密碼的工具,含有多種爆破模式。因為正版需要購買所以給出吾愛破解論壇大佬的破解版下載貼:Advanced Archive Password Recovery 4.54-壓縮包破解工具 - 『精品軟體區』 - 吾愛破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
我們開啟ARCHPR,匯入zip檔案,攻擊型別選擇暴力(按照順序一個個嘗試密碼),暴力範圍選項選擇數字,在長度那一欄最小口令和最大口令都填入4:
然後我們就可以開始爆破了,很快成功的訊息就彈出來了:
我們可以知道解壓密碼為:7639
解壓檔案,在“4number.txt”中得到了flag
考點:檔案分離、壓縮包密碼爆破
大白
下載檔案,發現裡面是一張png格式的圖片:
按照圖片隱寫思路,第一步無果,我們優先開啟010 editor開啟圖片檢視:
我們根據題目提示,優先檢視PNG圖片是否進行了寬高隱寫
PNG寬高隱寫
原理:更改了PNG圖片的寬度和高度,隱藏了被擷取部分圖片的資訊
做法:根據圖片的CRC校驗值更改圖片的長度和寬度(CRC校驗值計算原理:https://www.bilibili.com/video/BV1V4411Z7VA?vd_source=69c558b0c7be97607c79afbd75bd1f7c,理解有這個東西就行)
因此我們首先根據圖片的CRC校驗值計算PNG圖片正確的長度和寬度:
import binascii
import struct
crcbp = open("dabai.png", "rb").read() #開啟圖片
crc32frombp = int(crcbp[29:33].hex(),16) #讀取圖片中的CRC校驗值
print(crc32frombp)
for i in range(4000): #寬度1-4000進行列舉
for j in range(4000): #高度1-4000進行列舉
data = crcbp[12:16] + \ #建立一個資料段,內容為從檔案內容的位元組12到16(包含第12位元組,不包含第16位元組),這部分通常是固定的。
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29] #將寬度變數'i'和高度變數'j'轉換成大端格式的四位元組(大端格式:字資料的高位元組儲存在低地址中,而字資料的低位元組則存放在高地址中)
crc32 = binascii.crc32(data) & 0xffffffff #計算data資料段的CRC校驗值,'& 0xffffffff'確保CRC校驗值為32位
print(crc32)
if(crc32 == crc32frombp): #計算當圖片大小為i:j時的CRC校驗值,與圖片中的CRC比較,當相同,則圖片大小已經確定
print(i, j)
print('hex:', hex(i), hex(j))
exit(0)
struck.pack(format,v1,v2,...):返回一個位元組物件,該物件包含根據格式字串格式打包的值v1、v2,…。引數必須與格式要求的值完全匹配。
binascii. crc32 (data) :計算data的 32 位校驗和——CRC-32
執行指令碼,可以得到:
正確的寬高應該為679x479,16進位制後的值應該為00 00 02 A7和00 00 01 DF,使用010editor更改PNG圖片如下:
儲存檔案,發現圖片的高度恢復出現了新的內容,得到flag:
考點:PNG寬高隱寫、理解爆破PNG寬高原理
烏鎮峰會種圖
下載檔案,發現裡面是一張jpg格式的圖片:
按照圖片隱寫思路,第一步無果,我們優先開啟010 editor開啟圖片檢視:
又一次,我們在檔案尾後面發現了插入的flag:
考點:利用十六進位制編輯器找到隱藏的資訊
wireshark
下載檔案,發現裡面是一個pcap格式的檔案。這是什麼東西?
網路流量分析
網路分析工具對指定網路卡進行資料包捕獲,方便工作人員監測網路流量情況。
而pcap格式就是網路分析工具儲存的網路資料包,是捕獲的從網路卡傳送或者接收的每一個資料包的離線網路流量。
我們想要踏入這一部分的內容,首先我們應該熟悉網路協議的基礎知識和OSI七層網路參考模型:https://www.bilibili.com/video/BV1EU4y1v7ju?vd_source=69c558b0c7be97607c79afbd75bd1f7c
我希望能夠從題目入手,帶大家對這方面的內容進行深入理解
回到題目,我們知道了pcap格式是網路分析工具儲存的檔案,那麼我們應該擁有網路分析的工具。我們將重點介紹wireshark,這不僅是題目名,更是非常重要的網路分析工具。
wireshark
WireShark是非常流行的網路封包分析工具,可以擷取各種網路資料包,並顯示資料包詳細資訊。常用於開發測試過程中各種問題定位。官網下載地址:Wireshark · Download
首先我們用wireshark開啟pacp檔案:
花花綠綠的一大片資料包,我們應該從何處入手?
資料包分析思路
1. 觀察分組數(wireshark右下角),如果分組數量較大我們就進行協議分級進行分析,數量較小就逐個人工檢視(數量小協議分級效果不明顯,但還是可以優先協議分級減小工作量)
2. 根據協議分級的結果,我們優先分析數量多佔比高的協議流量,分析過程根據題目不同思路也有所不同
wireshark功能一:協議分級
對資料包按TCP/IP協議棧從底層向高層逐層進行統計,顯示每個協議的資料包數、位元組數以及各協議所佔的百分比。
我們可以發現應用層HTTP協議佔比最高,應該優先分析。
wireshark功能二:顯示過濾器
決定哪些資料包被顯示,在顯示過濾器中輸入表示式,使過濾規則生效。
在前面我們已經找到了需要顯示過濾來分析的HTTP協議,因此我們在協議分級視窗中選中HTTP協議作為過濾器應用:
這樣我們就顯示過濾了HTTP協議相關的資料包,可以看見左上方的應用顯示過濾器的輸入框內容也新增了”http“,現在只有29個資料包了,我們即將開始逐個分析。
HTTP協議資料包分析
HTTP協議介紹:https://www.bilibili.com/video/BV1zb4y127JU?vd_source=69c558b0c7be97607c79afbd75bd1f7c
HTTP資料包分析:HTTP資料包詳解 - dream_fly_info - 部落格園 (cnblogs.com)
wireshark功能三:資料包分析
在左下角的TCP/IP協議棧解析視窗我們可以以更清晰的格式分析協議的訊息結構,我們逐個分析,發現第三個POST請求包的URL加密資訊裡面找到了“password”欄位:
題目說管理員的密碼即是答案,因此使用flag{}包起提交即可
考點:網路流量分析、理解HTTP協議資料包結構
補充:CTF流量分析解題鑽空
我們明白要分析HTTP協議後,直接在顯示過濾器中查詢包含”flag“欄位的資料包有時候能直接找到我們想要的東西:
N種方法解決
下載檔案,發現裡面是一個exe格式的檔案,我們執行也執行不起:
這又不是逆向題,給我們exe檔案幹嘛!所以我們優先使用010 editor分析檔案:
發現它的內容純純的就是一普通的文字檔案,根據左上方開頭的提示我們發現這些資料是源內容經歷了base64編碼的jpg格式的圖片,因此我們使用cyberchef來進行解碼:
解碼後的內容雖然是亂碼,但看檔案頭含有“PNG”欄位應該就是我們的PNG格式檔案了!cyberchef有個很方便的魔法解密功能,可以直接分析出下一步應該如何解密,點選Output欄的魔法棒圖示即可自動解密:
可以發現它自動將PNG圖片16進位制的亂碼轉為了圖片,出現了二維碼,直接掃描解密出二維碼隱藏的內容:
考點:會使用工具解碼base64、會將PNG圖片的16進位制的亂碼轉換為PNG圖片
補充:
我們也可以將輸出內容複製貼上到010 editor裡面建立新的16進位制檔案,儲存為.png格式也是可以發現二維碼圖片的。
基礎破解
下載檔案,發現裡面是一個rar的壓縮包,根據題目提示,它是四位數字加密的。按照遇到含有密碼的壓縮包思路,我們直接使用工具爆破:
解出壓縮包密碼為:2563,開啟獲得經過base64編碼的flag,解碼即可:
考點:壓縮包密碼爆破
檔案中的秘密
下載檔案,發現裡面是一張jpeg圖片,我們檢視一下貌似什麼也沒有
按照圖片隱寫思路首先檢視圖片屬性的詳細資訊,在圖片的備註中發現了flag:
考點:會檢視圖片屬性。
LSB
下載檔案,發現裡面是一張png圖片,我們檢視一下貌似什麼也沒有
雖然題目已經明示了這是一道LSB隱寫的圖片,但我們還是會按照圖片隱寫思路做。第一步無果,我們優先開啟010 editor開啟圖片檢視:
貌似沒有插入資訊,我們再用string檢視:
strings flag11.png
strings 查詢一個二進位制檔案中所含有的字元資訊並將其輸出來
跑出一堆沒用的亂碼,我們可以開始第三步了。
StegSolve功能三——調整圖片通道
LSB隱寫原理:隱寫術鑑賞2:11分到3:57分處
我們使用StegSolve開啟圖片時,下面有兩個箭頭,我們點選可以選擇調整圖片通道來觀察是否有隱藏的資訊。(影片中有解說,每張圖片每個畫素點都擁有紅綠藍三種顏色還有透明度的通道)
我們可以發現,當我們關閉紅色通道(red plane 0)、綠色通道或是藍色通道時,圖片的上方出現了黑白的印記,很顯然是二進位制的資訊,我們繼續使用StegSolve進行分析。
StegSolve功能四——資料提取
主要用於提取位元並排列組合
由我們之前得到的資訊可知,應該如下圖般配置,配置完成後點選preview檢視隱藏資訊:
Alpha 之前發現透明度通道沒有什麼隱藏資訊,故不選
Red plane 0含有隱藏資訊
Green plane 0含有隱藏資訊
Blue plane 0含有隱藏資訊
Extract By 我們發現圖片上方在關閉通道出現黑白的印記是橫向的,因此按row(行)提取畫素而不是column(列)
Bit Order 我們知道畫素值是按最低位的修改進行隱寫的,因此選LSB(畫素值最低位作為第一位)
Bit Plane Order 設定RGB通道的順序,預設RGB
我們發現隱藏資訊是一張png圖片檔案,我們點選Save Bin,將圖片儲存為.png格式的檔案,發現是張二維碼圖片:
掃一掃即可得到flag
考點:理解LSB隱寫原理、學會利用工具
zip偽加密
下載檔案,發現裡面是一個rar的壓縮包,根據題目提示,它是偽加密的。
ZIP壓縮包格式
一個ZIP壓縮檔案由如下三部分組成:壓縮原始檔資料區、壓縮原始檔目錄區和壓縮原始檔目錄結束標誌。具體而言,一個ZIP檔案可以按如下方式分解:
[本地檔案頭+檔案資料+資料描述符]{1,n}+目錄區+目錄結束標識
[本地檔案頭+檔案資料+資料描述符] 構成壓縮原始檔資料區
{1,n} 表示這部分資料最少出現1次,也可以出現n次,n的數量和壓縮前的檔案數量一致
目錄區 會儲存壓縮前檔案和資料夾的目錄資訊,這部分資料一般均為明文顯示
目錄結束標識 存在於整個壓縮包的結尾,用於標記壓縮的目錄資料的結束
(源於《CTF那些事兒》)
更多詳細內容可以參考文章:一個zip檔案由這樣三個部分組成_zip 檔案結構-CSDN部落格
zip偽加密
原理:透過修改zip壓縮包特定的位元組(全域性方式位標記),使得在開啟檔案時壓縮包被識別為使用了密碼加密,但實際上並沒有真正加密的技術。
回到題目,我們使用010 editor開啟zip檔案:
我們可以在壓縮原始檔資料區中可以找到全域性方式位標記,它的值為09 00:
當全域性方式位標記的第二個數字(即09 00中的第二個數字9)為奇數時,ZIP檔案被識別為加密;而當這個數字為偶數時,檔案被視為未加密。因此,我們將09 00改為00 00,儲存後就可以直接開啟壓縮檔案了:
考點:理解zip偽加密原理
被嗅探的流量
下載檔案,發現裡面是一個pcapng格式的檔案,我們使用wireshark開啟檢視:
按照資料包分析思路,我們先進行協議分級:
可以發現HTTP協議佔比最高,並且看HTTP協議內容像是在上傳媒體檔案:
flag可能就隱藏在這上傳的檔案裡面,我們應該如何提取這其中的檔案呢?
wireshark功能四:匯出檔案物件
方法一:匯出物件法。這種方法依賴於wireshark自帶的解析功能,wireshark可以根據不同的協議自動匯出檔案,這題主要匯出使用http協議傳輸的檔案:
點選全部儲存即可,我們依次分析發現upload(3).php中包含一張jpg圖片,並且結尾處插入了flag:
當離線流量太大或者傳輸檔案頭受損時,這種方法會失效;而且匯出物件法支援的協議過少,應用範圍有限。
方法二:匯出分組位元組流法。我們在找到的傳輸檔案的HTTP包的內容進行匯出分組位元組流:
儲存型別預設為.bin檔案,但我們可以改成.jpg,並使用010 editor進行分析:
我們也可以在結尾處發現插入的flag。
這是一種完全由人工操作的提取方法(再不濟直接把16進位制文字複製下來修復),具有廣泛的適用性。
方法三:binwalk提取法。利用binwalk對離線流量檔案進行檢測和提取:
binwalk -e 被嗅探的流量.pcapng
我們發現這道題分解不出來,所以我們使用以下命令指定輸出檔案:
binwalk -D=jpeg 被嗅探的流量.pcapng
發現圖片檔案貌似受損,但使用010 editor還是能發現其中隱藏的flag:
binwalk檢測的原理是根據檔案頭特徵,如果流量中檔案的檔案頭損壞binwalk也無法提取成功,這時仍需手工提取。
考點:網路流量分析、理解HTTP協議資料包結構、學會提取流量包中的檔案
rar
下載檔案,發現裡面是rar格式的壓縮包,根據題目提示,這是我們遇到的第三個需要爆破密碼的壓縮包了,我們直接爆破得到密碼:
解開rar檔案,獲得flag
考點:壓縮包密碼爆破
qr
下載檔案,發現裡面是一張png格式的二維碼圖片,我們用二維碼識別軟體QR Research掃一掃,發現flag:
這題應該是一道簽到題,能夠保證大部分同學做出來
考點:會掃二維碼。
鏡子裡面的世界
下載檔案,發現裡面是一張png圖片,我們檢視一下貌似什麼也沒有
按照檔名提示我們應該使用Stegsolve來檢視,在此跳過圖片隱寫思路前兩步直接使用Stegsolve開啟,調整通道檢視圖片發現:
我們可以發現,當我們關閉紅色通道(red plane 0)、綠色通道或是藍色通道時,圖片的上方出現了黑白的印記,很顯然是隱藏的二進位制的資訊,我們繼續使用StegSolve進行分析:
我們可以以文字形式儲存,獲得flag。相當於我們再次複習了LSB隱寫的題目。
考點:理解LSB隱寫原理、學會利用工具
greatescape
(因為需要寫實驗報告所以先把與實驗相關的題目做了把部落格當實驗報告上交(▽))
下載檔案,發現裡面是一個pcap格式的檔案,我們使用wireshark開啟檢視:
按照資料包分析思路,我們先進行協議分級:
我們發現TCP協議佔比最高,並且使用了TLS協議加密(Transport Layer security)佔比的內容很多;協議中使用了FTP協議,優先檢視FTP協議發了些什麼檔案,過濾FTP Data:
發現是TLS加密的金鑰,我們透過匯出分組位元組流儲存為私鑰檔案(包的後邊也提示了檔名為ssc.key)
wireshark功能五:匯入金鑰
SSL/TLS是一種密碼通訊框架,TLS協議位於傳輸層和應用層中間,其功能是一個加密通道,和上層應用協議無關。由於HTTP採用明文傳輸,很容易被攻擊者竊聽或者篡改內容,透過引用TLS對HTTP的內容進行加密等操作,可以有效防止竊聽、篡改和劫持等。
這裡HTTP協議的內容已被加密:
因此我們需要匯入我們獲得的私鑰檔案進行解密:
在edit裡面新增私鑰檔案:
解密後我們直接摸魚搜尋”FLAG“字串:
得到了flag。
考點:網路流量分析、理解SSL/TLS密碼通訊框架、學會使用wireshark匯入私鑰檔案