CTF-雜項與密碼學總結


雜項

01文件操作與隱寫

文件類型識別

1.File命令

當文件沒有后綴名或者有后綴名而無法正常打開時,根據識別出的文件類型來修改后綴名即可正常打開文件。
使用場景:不知道后綴名,無法打開文件。格式: file myheart
image-20200814162422418

2.winhex

通過winhex.程序中可以查看文件頭類型,根據文件頭類型判斷出文件類型
使用場景: windows 下通過文件頭信息判斷文件類型

image-20200814162539651

3.文件頭殘缺/錯誤

通常文件無法正常打開有兩種情況,一種是文件頭部殘缺, 另一種是文件頭部字段錯誤。針對文件頭部殘缺的情況,使用winhex或者010 Editor程序添加相應的文件頭,針對頭部字段錯誤,可以找一個相同類型的文件進行替換。
使用場景:文件頭部殘缺或文件頭部字段錯誤無法打開正常文件。
格式: file 文件名

image-20200814163338518

文件分離操作

1.Binwalk工具

Binwalk是Linux下用來分析和分離文件的工具,可以快速分辨文件是否由多個文件合並而成,並將文件進行分離。如果分離成功會在目標文件的目錄。
同目錄下生成一個形如_ 文件名_ extracted的文件目錄,目錄中有分離后的文件。
用法:
分析文件: binwalk filename
分離文件: binwalk -e filename

2.foremost

如果binwalk無法正確分離出文件,可以使用foremost,將目標文件復制到kali中,成功執行后,會在目標文件的文件目錄下生成我們設置的目錄,目錄中會按文件類型分離出文件。
用法:
foremost 文件名 -o 輸出目錄名

image-20200814165244610

3.dd

當文件自動分離出錯或者因為其他原因無法自動分離時,可以使用dd實現文件手動分離。

格式:
dd if=源文件 of=目標文件名名bs=1 skip=開始分離的字節數
參數說明:
if=file #輸入文件名,缺省為標准輸入。
of=file #輸出文件名,缺省為標准輸出。
bs=bytes #同時設置讀寫塊的大小為bytes,可代替ibs和obs。
skip=blocks #從輸入文件開頭跳過blocks個塊后再開始復制。

image-20200814170342974

image-20200814170840959

4.Winhex

除了使用dd外,還可以使用winhex實現文件手動分離,將目標文件拖入winhex中,找到要分離的部分,點擊復制即可。
使用場景: windows 下利用winhex程序對文件進行手動分離
例:新建一個文件,文件大小1byte, 在文件開頭位置點擊粘貼,彈出提示框選否、確定,將文件保存為想要的后綴即可。

image-20200814170942114

5.010Editor

將某塊區域文件保存的方式如下:

image-20200814171213727

記事本里存放的二進制文件轉成二進制文件

image-20200814171742467

image-20200814171845330

image-20200814171940447

文件合並操作

1.Linux下的文件合並

使用場景: linux 下,通常對文件名相似的文件要進行批量合並
格式: cat 合並的文件>輸出的文件

完整性檢測: linux下計算文件md5:
md5sum 文件名

2.Windows下的文件合並

使用場景:windows下,通常要對文件名相似的文件進行批量合並
格式: copy/B合並的文件輸出的文件命令

完整性檢測: windows 下計算文件md5:
certutil -hashfile 文件名 md5

文件內容隱寫

文件內容隱寫,就是直接將KEY以十六進制的形式寫在文件中,通常在文件的開頭或結尾部分,分析時通常重點觀察文件開頭和結尾部分。如果在文件中間部分,通常搜索關鍵字KEY或者flag來查找隱藏內容。
使用場景: windows下, 搜索隱寫的文件內容

1.Winhex/010Editor

通常將要識別的文件拖入winhex中,查找具有關鍵字或明顯與文件內容不和諧的部分,通常優先觀察文件首部和尾部,搜索flag或key等關鍵字,最后拖動滾輪尋找。

2.Notepad++

使用notepad++打開文件,查看文件頭尾是否有含有關鍵字的字符串,搜索flag或key等關鍵字,最后拖動滾輪尋找。
另外通過安裝插件HEX-Editor可以實現winhex的功能。

02圖片隱寫術

圖片隱寫的常見隱寫方法
1.細微的顏色差別
2.GIF圖多幀隱藏
1.顏色通道隱藏
2.不同幀圖信息隱藏
3.不同幀對比隱寫
3.Exif信息隱藏
4.圖片修復
1.圖片頭修
2.圖片尾修復
3.CRC校驗修復
4.長、寬、高度修復
5.最低有效位LSB隱寫
6.圖片加密
1.Stegdetect
2.outguess
3.Jphide
4.F5

圖片文件隱寫

1.Firework

使用winhex打開文件時會看到文件頭部中包含firework的標識,通過firework可以找到隱藏圖片。
使用場景:查看隱寫的圖片文件

image-20200814200754023

2.Exif

Exijf按照PEG的規格在PEG中插入一些圖像/數字相機的信息數據以及縮略圖像可以通過與PEG兼容的互聯網瀏覽器/圖片瀏覽器/圖像處理等一些軟件來查看Exift格式的圖像文件就跟瀏覽通常的PEG圖像文件一樣,圖片右鍵屬性,查看exif或 查看詳細信息,在相關選項卡中查找flag信息。

image-20200814201336619

3.Stegsolve

當兩張jpg圖片外觀、大小、像素都基本相同時,可以考慮進行結合分析,即將兩個文件的像素RGB值進行XOR、ADD、SUB等操作,看能否得到有用的信息,StegSolve可以方便的進行這些操作。
使用場景:兩張圖片信息基本相同

image-20200814201519752

4.LSB(最低有效位Least Significant Bit)

LSB替換隱寫基本思想是用嵌入的秘密信息取代載體圖像的最低比特位,原來的的7個高位平面與替代秘密信息的最低位平面組合成含隱藏信息的新圖形。
1.像素三原色(RGB)
2.通過修改像素中最低位的1bit來達到隱藏的效果
3.工具: stegsolve、 zsteg、 wbstego4、 python腳本

image-20200814202139107

image-20200814202251643

zsteg工具
detect stegano-hidden data in PNG & BMР
Installation
root@kali:/# gem install zsteg
檢測LSB隱寫
zsteg xxx.png

image-20200814202621885

wbstego4工具
解密通過1sb加密的圖片

python腳本來處理
將以下腳本放在kali中運行,將目標文件放在腳本同目錄下,將腳本中的文件名修改為文件名,運行python即可

image-20200814215001502

5.TweakPNG

TweakPNG是一款簡單易用的PNG圖像瀏覽工具,它允許查看和修改一些PNG圖像文件的元信息存儲。使用場景:文件頭正常卻無法打開文件,利用TweakPNG修改CRC
例:
1.當PNG文件頭正常但無法打開文件,可能是CRC校驗出錯,可以嘗試通過TweakPNG打開PNG,會彈出校驗錯誤的提示,這里顯示CRC是fe1a5ab6,正確的是b0a7a9f1。打開winhex搜索fe1a5ab6將其改為b0a7a9f1。

  1. 文件頭正常卻無法打開文件,利用TweakPNG 修改CRC....
  2. 有時CRC沒有錯誤,但是圖片的高度或者寬度發生了錯誤,需要通過CRC計算出正確的高度或者寬度。可以用下面的py腳本,需要改文件位置和TweakPNG得到的CRC實際值,用計算出高度,利用01Editor修改寬高

image-20200814220651744

6. Bftools

bftools用於解密圖片信息。
使用場景:在windows的cmd下,對加密過的圖片文件進行解密格式:
Bftools .exe decode braincopter要解密的圖片名稱-output輸出文件名
Bftools.exe run.上一步輸出的文件

image-20200814221558142

7.SilentEye

silenteye是一款可以將 文字或者文件隱藏到圖片的解密工具。
使用場景: windows' 下打開silentEye工具,對加密的圖片進行解密
例:
1.使用silentEye程序打開目標圖片,點擊image一>decode,點擊decode,可以查看隱藏文件,點擊保存即可

2.如果需要密碼,勾選encrypteddata,輸入密碼和確認密碼,點擊decode再解密

image-20200814221948064

8.JPG圖像加密

1)Stegdetect工具探測加密方式
Stegdetect.程序主要用於分析PEG文件。因此用stegdetect 可以檢測到通過Steg、JPHide. OutGuess、 Invisible Secrets、F5、appendX和Camouflage等這些隱寫工具隱藏的信息。
stegdetect xxx.jpg
stegdetect -s 敏感度xx.jpgexi

image-20200814222019292

2)Jphide
Jphide是基於最低有效位LSB的JPEG格式圖像隱寫算法.例:
Stegdetect提示jphide加密時,可以用Jphs.工具進行解密,打開jphswin.exe, 使用open jpeg打開圖片,點擊seek,輸入密碼和確認密碼,在彈出文件框中選擇要保存的解密文件位置即可,結果保存成txt文件。

image-20200814222221167

  1. Outguess
    outguess 一般用於解密文件信息。
    使用場景:Stegdetect識別出來或者題目提示是outguess加密的圖片該工具需編譯使用: ./configure && make && make install
    格式: outguess -r 要解密的文件名輸出結果文件名

image-20200814222247892

  1. F5
    F5一般用於解密文件信息。
    使用場景: Stegdetect識 別出來是F5加密的圖片或題目提示是F5加密的圖片
    進入F5-steganography_F5目錄,將圖片文件拷貝至該目錄下,從CMD進入該目錄

格式: Java Exrtact 要解密的文件名 -p 密碼

image-20200814222330464

9.二維碼處理

1.使用二維碼掃描工具CQR.exe打開圖片, 找到內容字段

image-20200814222536728

2.如果二維碼某個定位角被覆蓋了,該工具有時候也可以自動識別,如果識別失敗,需要使用PS或畫圖工具將另外幾個角的定位符移動到相應的位置,補全二維碼 。

image-20200814222556491

3.如果某個二維碼的定位點中間是白色,可能被反色了,使用畫圖工具把顏色反色回來再掃描即可。

image-20200814222734412

03壓縮文件處理

壓縮文件分析

1.偽加密

如果壓縮文件是加密的,或文件頭正常但解壓縮錯誤,首先嘗試文件是否為偽加密。zip文件是否加密是通過標識符來顯示的,在每個文件的文件目錄字段有一位專門標識了文件是否加密,將其設置為00表示該文件未加密,如果成功解壓則表示文件為偽加密,如果解壓出錯說明文件為真加密。
使用場景:偽加密文件
操作方法:使用winhex打開壓縮文件, 找到文件頭第九第十個字符,將其修改為0000。
1.使用winhex打開文件搜索16進制504B0102,可以看到每個加密文件的文件頭字段。

2.從50開始計算,第九第十個字符為加密字段,將其設置為0000即可變成無加密狀態。

image-20200815100029614

3.RAR文件由於有頭部校驗,使用偽加密時打開文件會出現報錯,使用winhex修改標志位后如報錯消失且正常解壓縮,說明是偽加密。使用winhex打開RAR文件,找到第24個字節,該字節尾數為4表示加密,0表示無加密,將尾數改為0即可破解偽加密。

image-20200815100102794

2.暴力破解

通常我們可以使用ARCHPR.exe工具來破解zip文件
使用場景: windows下加密過的zip文件
1、攻擊類型選擇暴力破解,在范圍位置根據提示選擇暴力破解范圍選項設置暴力破解包含的類型、開始於和結束於選項具體范圍,如果沒有定義則全范圍暴力破解。點擊打開選擇要破解的文件,點擊開始進行破解。建議使用1~9位的數字密碼,以及系統自帶的英文字典作為密碼字典。

image-20200815100658302

2、攻擊類型選擇掩碼可以進行復雜的暴力破解,比如知道密碼前3位是abc,后3位為數字,則在攻擊類型選擇掩碼,在掩碼處輸入acb???,暴力范圍選項選擇所有數字,打開要破解的點擊,點擊破解。此時???的部分會被我們選擇的暴力破解范圍中的字符代替。

image-20200815101216432

3.明文攻擊

明文攻擊指知道加密的ZIP中部分文件的明文內容,利用這些內容推測出密鑰並解密ZIP文件的攻擊方法,相比於暴力破解,這種方法在破解密碼較為復雜的壓縮包時效率更高。
使用場景:已知加密的zip部分文件明文內容
例:假設一個加密的壓縮包中有兩個文件readme.txt和flag.txt,其中flag txt的內容是我們希望知道的內容,而我們擁有readme.txt的明文文件,使用上述兩個文件即可進行明文攻擊。
操作:
1、將readme.txt的明文文件進行壓縮,變成readme1.zip。
2、打開archpr, 攻擊類型選擇明文,明文文件路徑選擇readme1.zip ( 即將明文文件不加密壓縮后的文件),加密的文件
選擇要破解的文件,點擊開始,破解成功后會獲得密碼。

image-20200815101420010

有時不一定能破解出文件口令,但是能夠找到加密密鑰等信息,可以直接將文件解密,點擊確定保存解密后的文件即可。

image-20200815101531195

使用該方法需要注意兩個關鍵點:
1、有一個明文文件,壓縮后CRC值與加密壓縮包中的文件一致。
2、明文文件的壓縮算法需要與加密壓縮文件的壓縮算法一致。

image-20200815101728691

image-20200815101917724

RAR文件格式
有時候給出的RAR文件的頭部各個字塊會故意給錯導致無法識別。

image-20200815102407082

04流量取證技術

流量包文件分析

CTF比賽中,流量包的取證分析是另一項重要的考察方向。
通常比賽中會提供一個包含流量數據的PCAP文件,有時候也會需要選手們先進行修復或重構傳輸文件后,再進行分析。
總體把握
·協議分級
·端點統計
過濾篩選
·過濾語法
·Host,Protocol,contains,特征值
發現異常
·特殊字符串
·協議某字段
·flag位於服務器中
數據提取
·字符串取
·文件提取
總的來說比賽中的流量分析可以概括為以下三個方向:
·流量包修復
·協議分析
·數據提取

WireShark工具的基本使用

wireshark的過濾器和過濾規則能夠幫助我們迅速定位到要分析的報文。

image-20200815111017139

常用的過濾命令:
1.過濾IP,如源IP或者目標x.x.x.x
ip.src eq x.x.x.x or ip.dst eq x.x.x.x 或者ip.addr eq x.x.x.x

2.過濾端口
tcp.port eq 80 or udp.port eq 80
tcp. dstport == 80 只顯tcp協議的目標端口為80
tcp. srcport == 80 只顯tcp協議的源端口為80
tcp.port >= 1 and tcp.port <= 80

3.過濾協議
tcp/udp/ arp/ icmp/http/ ftp/dns/ip

4.過濾MAC
eth.dst == A0:00:00:04:C5:84過濾目標mac

5.包長度過濾
udp. length = == 26這個長度是指udp本身固定長度8加上udp下面那塊數據包之和。tcp.len>= 7指的是ip數據包(tcp下面那塊數據),不包括tcp本身
ip.len == 94 除了以太網頭固定長度14,其它都算是ip.len,即從ip本身到最后
frame.len == 119整個數據包長度,從eth開始到最后

6.http模式過濾
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."
http.request.method == "GET" && http contains "User-Agent:"
http contains "flag"
http contains "key"
tcp contains "flag"

WireShark 協議分析

了解數據包傳輸的內容

image-20200815112209571
根據數據包特征進行篩選
比如查看數據包的時候,有的數據包有某種特征,比如有http(80)。就可以篩選出這種特征出來。
右鍵→作為過濾器應用→選中

image-20200815112908207

WireShark流匯聚
在關注的ttp數據包或tcp數據包中選擇流匯聚,可以將HTTP流或TCP流匯 聚或還原成數據,在彈出的框中可以看到數據內容。

image-20200815113039561

常見的HTTP流關鍵內容:
1、HTML中直接包含重要信息。
2、上傳或下載文件內容,通常包含文件名、hash值等關鍵信息,常用POST請求上傳。
3、一句話木馬,POST請求,內容包含eval,內容使用base64加密

image-20200815113342472

WireShark數據提取
1.使用wireshark可以自動提取通過htp傳輸的文件內容。

image-20200815114452375

  1. wireshark可以手動提取文件內容。
    點擊想要的數據包,如下圖選定media type的位置
    右鍵→導出分組字節流或者點擊菜單欄文件→導出分組字節流,快捷方式Ctrl+H在彈出的框中將文件保存成二二進制文件。

image-20200815115132169

無線流量包跑密碼

無線wif流量包

image-20200815160513990

aircrack-ng工具進行wifi密碼破解

1.用aircrack-ng檢查cap包:aircrack-ng xxx.cap

image-20200815161110145

2.用aircrack-ng跑字典進行握手包破解: aircrack-ng xx.cap -w pass.txt

image-20200815161440967

USB流量包文件分析

USB流量
USB,流量也是流量分析題的考查點,一 般考察的流量涉及鍵盤擊鍵,鼠標移動與點擊,存儲設備的明文傳輸通信,USB無線網卡網絡傳輸內容等。
USB協議的數據部分在Leftover Capture Data域之中。
右鍵leftover capture data->應用為列。

image-20200815162159555

image-20200815162650531

USB鼠標流量抓取分析
鼠標流量與鍵盤流量不同,鼠標移動時表現為連續性,與鍵盤的離散性不一樣。但是實際鼠標產生的數據是離散的。所以同樣可以把數據抓取出來,構成二維坐標畫出軌跡。

鼠標數據包的數據長度為4個字節,第一個字節代表按鍵, 當取oxoo時,代表沒有按鍵;為ox01時,代表按左鍵,為0x02時, 代表當前按鍵為右鍵。

image-20200815162724645

第二個字節代表左右偏移;
當值為正時,代表右移多少像素。當值為負時,代表左移多少像素。同理,第三個字節代表上下偏移 。

USB鼠標流量抓取分析
鼠標流量與鍵盤流量不同,鼠標移動時表現為連續性,與鍵盤的離散性不一樣。但是實際鼠標產生的數據是離散的。所以同樣可以把數據抓取出來,構成二維坐標畫出軌跡。

image-20200815162845733

image-20200815162934074

image-20200815162949255

HTTPS流量包文件分析

image-20200815163047411

密碼學

01密碼學概述

密碼學的發展

  • 第一個階段是從古代到19世紀末-古典密碼 (classical cryptography)
  • 第二個階段從20世紀初到1949年-近代密碼
  • 第三個階段從C.E.Shannon (香農)於1949年發表的划時代論文 "The Communication Theory ofSecret Systems "開始-現代密碼
  • 第四個階段從1976年W. Diffie和M. Hellman創造性地發表了論文"New Directions in
    Cryptography"開始-公鑰密碼

密碼編碼學

(1)密碼編碼學是密碼學的一個分支,研究與信息安全(例如:機密性、完整性、可鑒別性)有關的數學技術。
(2)密碼編碼學是包含數據變換的原理、工具和方法的一門學科,這種數據變換的目的是為了隱藏數據的信息內容,阻止對數據的篡改以及防止未經認可使用數據。
(3)密碼編碼學是論述使明文變得不可懂的密文,以及把已加密的消息變換成可懂形式的藝術和技巧。

對稱加密不對稱加密

  • 對稱密碼算法(Symmetric cipher) :加密密鑰和解密密鑰相同,或實質上等同,即從一個易於推出另一個。又稱傳統密碼算法(Conventional cipher)、秘密密鑰算法或單密鑰算法。
    DES、 3DES、 IDEA、 AES

  • 非對稱密碼算法(Asymmetric cipher). : 加密密鑰和解密密鑰不同,從一個很難推出另一個。又叫公鑰密碼算法(Public一key cipher)。其中的加密密鑰可以公開,稱為公開密鑰(public key),簡稱公鑰;解密密鑰必須保密,稱為私人密鑰(private key),簡稱私鑰。
    RSA、 ECC、 EIGamal

摘要算法

數據摘要算法是密碼學算法中非常重要的一個分支, 它通過對所有數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,由於其不可逆性,有時候會被用做敏感信息的加密。數據摘要算法也被稱為哈希(Hash) 算法、散列算法,常見的摘要算法有MD5和SHA
在互聯網上進行大文件傳輸時,都要得用MD5算法產生一個與文件匹配的、存儲MD5值的文本文件(后綴名為md5或md5sum),這樣接收者在接收到文件后,就可以利用與SFV類似的方法來檢查文件完整性,絕大多數大型軟件公司或開源組織都是以這種方式來校驗數據完整性,而且部分操作系統也使用此算法來對用戶密碼進行加密,另外,它也是目前計算機犯罪中數據取證的最常用算法。
SHA中SHA1的應用較為廣泛,主要應用於CA和數字證書中,另外在互聯網中流行的BT軟件中,也是使用.SHA1來進行文件校驗的,由於SHA系列算法的數據摘要長度較長,因此其運算速度與MD5相比,也相對較慢。

image-20200815163751484

ASCII編碼

ASCII碼使用指定的7位或8位二進制數組合來表示128或256種可能的字符。標准ASCII碼也叫基礎ASCII碼,使用7位一進制數(剩下的1位一進制為0)來表示所有的大寫和小寫字母,數字0到9、標點符號,以及在美式英語中使用的特殊控制字符。

Base64編碼

Base64顧名思義就是用64個可顯示字符表示所有的ASC字符,64也就是6Bits, 而ASC字符一共有256個,也就是8Bits。 Base64編碼要求把3個8位字節(38=24)轉化為4個6位的字節(46=24) ,之后在6位的前面補兩個0,形成8位一個字節的形式。如果剩下的字符不足3個字節,則用0填充,輸出字符使用’=' ,因此編碼后輸出的文本末尾可能會出現1或2個’='

URL編碼

ur|編碼就是一個字符ascii碼的十 六進制。不過稍微有些變動,需要在前面加上“%”。比如"\”,它的ascii碼是92, 92的十六進制是5c,所以"" 的ur|編碼就是%5c。
特點:密文中有多個%號符

Unicode編碼

Unicode碼擴展自ASCII字元集。在嚴格的ASCII中,每個字元用7位元表示,或者電腦上普遍使用的每字元有8位元寬;而Unicode使用全1 6位元字元集。這使得Unicode能夠表示世界上所有的書寫語言中可能用於電腦通訊的字元、象形文字和其他符號。
特點:密文中有多個\uxxx

JS混淆

有些時候開發者為了保護勞動成果可以通過對javascript的變量名稱和過程名稱進行編碼,從而起到混淆js代碼的作用,通常使用eval函數進行混淆處理,該函數可以計算字符串,並執行其中的JS代碼。
如,對<script>alert( 'XSS' ); </script>進行16進制轉換,然后使用eval函數進行讀取

<script>eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x .
53\x53\x27\x29\x3b");
</script>

特點:通常在JS腳本里使用eval與function函數進行混淆。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM