前言
前一天學習了 Linux 的文字搜尋工具 grep
透過關鍵字搜尋,我們可以從大量資料中快速找到需要的內容。
今天則要認識另一個非常實用的工具 diff
當兩個檔案內容非常相似時,逐行比對往往相當耗時。
這時候就可以利用 diff 幫助我們快速找出兩個檔案之間的差異。
在系統管理、程式開發以及資安分析中,這都是相當常見的技巧。
diff?diff 是 Linux 中用來比較兩個檔案差異的工具。
hacker@dojo:~$ cat file1
hello
world
hacker@dojo:~$ cat file2
hello
universe
hacker@dojo:~$ diff file1 file2
2c2
< world
---
> universe
表示第 2 行發生變更
原本world變成universe
題目:comparing files
這次 Challenge 提供兩個檔案 /challenge/decoys_only.txt /challenge/decoys_and_real.txt
其中 decoys_only.txt 包含 100 個假 Flag
而 decoys_and_real.txt 則包含 100 個假 Flag + 1 個真正的 Flag
因此兩個檔案的差異只有真正的 Flag。
如果直接使用 cat /challenge/decoys_and_real.txt 會看到大量內容。
而且裡面有 100 個假 Flag 很難靠肉眼分辨。
因此最有效率的方法是直接比較兩個檔案diff /challenge/decoys_only.txt /challenge/decoys_and_real.txt
執行 diff 加上題目提供的兩個檔案/challenge/decoys_only.txt&/challenge/decoys_and_real.txt
系統會列出兩個檔案不同的地方。
由於 decoys_and_real.txt = 100 個假 Flag + 1 個真 Flag
因此輸出中的新增內容就是我們要找的答案。
成功取得真正的 Flag。
diff 很重要?在真實環境中,diff 不只是用來解 CTF。
例如
diff config_old.conf config_new.conf
diff v1.py v2.py
diff log_before.txt log_after.txt
diff backup.txt current.txt
都非常常見。
今天第一次使用 Linux 的 diff 指令。和前一天的 grep 不同,grep 是從大量資料中搜尋關鍵字,而 diff 則是直接比較兩份資料之間的差異。這讓我想到資安分析中的許多情境,例如比較系統更新前後的設定檔、分析惡意程式修改了哪些內容,甚至檢查程式碼是否遭到竄改。透過這次 Challenge,也發現 Linux 提供的工具雖然看起來簡單,但組合起來卻能有效解決許多實際問題。