前言
如果這篇文真的是被電機社的學弟們看到,歡迎留個言,我會很高興我們當初在如此混亂的情況下所建的 CTF 和社團架構至今還為人所用。
Part.1 Linux基礎知識
1. Linux的浪漫故事四件套
現在的人看來可能莫名其妙,搞這一堆閱讀理解是在幹嘛。但這部分的立意是當初進來佰拾肆進來的時候英文實在太爛了,所以把一些帶有基礎技術又有一些資訊類單字的文章拿來強迫他們看。這部份對於各位108英語課綱教出來的孩子們應該很簡單,直接看過去即可。
2. 遠端,啟動!
第一題是要確認大家有使用ssh
的能力。
這題非常非常非常基礎,希望大家在直接看詳解之前還是看一下這個網站。
照一般人的邏輯這邊卡住是因為ssh
的指令埠號要加上-p XXXX
,所以完整的指令應該要是:
ssh [學號]@192.168.16.38 -p 1234
3. 我是誰我在哪?
這題是希望你知道有個指令叫pwd
,可以知道自己目前的位置。在 Linux 裡面文件的位置有兩種表達方式:
- 絕對路徑:從根目錄開始寫,例如
/home/user/Downloads
。就像寫總統府的完整地址中華民國臺北市中正區重慶南路一段122號
- 相對路徑:從你現在的位置開始寫,例如你在現在在
/home/user
,那你想要去Downloads
裡就可以寫做./Downloads
。就像你現在在北一女中大門,那你要表達總統府就可以寫成在北一女大門斜對面
。
其實這題就只要簡單的pwd
就好:
49ddc34fde24:~$ pwd
/home/110332
這題的問題是他的學號的flag是窮舉出來的,不知道到了那時候你們還有沒有更新,沒有的話就去提醒一下幹部,不然就先直接抄我的去解吧。
4. 在那呆著幹嘛?走路啊
要像 Windows 的檔案總管那樣在各個路徑中移動需要會一些指令,有興趣可以看一下下表。
這題水有點深,大家不一定是不會只是有點太繞大家看不懂。首先肯定是要先用cd
回到上一頁。
49ddc34fde24:~$ cd ..
49ddc34fde24:/home$ ls
110310 110332 110349 110359 210043 210112 210161 210457 210506 210559 210568 daddy flag
輸入之後用ls
看看有什麼,會看到有個叫flag
的資料夾,再cd
進去。
49ddc34fde24:/home$ cd flag/
49ddc34fde24:/home/flag$ ls
GCTF{vv|- Lets_go_to_etc
那個 GCTF 開頭的資料夾很明顯就是第一段 flag ,後面Lets_go_to_etc
就是叫你去/etc
找第二段。下面原理都一樣,就一次跑完流程不一一停下來說明了。
49ddc34fde24:/home/flag$ cd /etc
49ddc34fde24:/etc$ ls
alpine-release flag hosts modprobe.d network passwd- resolv.conf shadow- sysctl.conf
apk fstab init.d modules nsswitch.conf periodic secfixes.d shells sysctl.d
busybox-paths.d group inittab modules-load.d opt profile securetty ssh terminfo
conf.d group- issue motd os-release profile.d services ssl udhcpc
crontabs hostname logrotate.d mtab passwd protocols shadow ssl1.1 udhcpd.conf
49ddc34fde24:/etc$ cd flag/
49ddc34fde24:/etc/flag$ ls
Lets_go_to_usr_next |AtTh3
49ddc34fde24:/etc/flag$ cd /usr/
49ddc34fde24:/usr$ ls
bin flag lib local sbin share
49ddc34fde24:/usr$ cd flag/
49ddc34fde24:/usr/flag$ ls
FiStHis Lets_go_to_lib
49ddc34fde24:/usr/flag$ cd /lib/
49ddc34fde24:/lib$ ls
apk ld-musl-x86_64.so.1 libcrypto.so.3 libz.so.1.3.1 sysctl.d
firmware libapk.so.2.14.0 libssl.so.3 mdev
flag libc.musl-x86_64.so.1 libz.so.1 modules-load.d
49ddc34fde24:/lib$ cd flag/
49ddc34fde24:/lib/flag$ ls
congrats r0Ut3}
層層解到第四層之後就到底了,最後組出來會是GCTF{vv|-|AtTh3FiStHisr0Ut3}
。
5. 什麼東西?
這題想告訴你們圖片副檔名其實是可以手動更改的,要找到真正的檔案格式必須另尋他法。
要找到檔案的格式可以直接使用file
指令,Arch Wiki 同樣有說明。
jpg
, png
之類的,不用聽到新名詞就害怕。但這邊不需要多帶什麼東西,直接用即可。
49ddc34fde24:~$ cd challenge_8
49ddc34fde24:~/challenge_8$ file willie.png
willie.png: RIFF (little-endian) data, Web/P image
如題旨,答案其實就是GCTF{RIFF}
(我們窮舉了很多可能,上面跟格式相關的文字只要斷句有對基本上都會對)
6. 我!叫你!執行!
在 Linux 中執行檔案就類似於 Windows 裡你點開 .exe
那個動作,不同的是你要告訴電腦你要執行的檔案在哪,故以本題為例,要執行 executable
可以使用絕對路徑和相對路徑來寫,這裡以相對路徑為例:
1e1f1041d948:~/challenge_9$ ./executable
-bash: ./executable: Permission denied
然後發現跑了個 Permission Denied ,這是因為權限被鎖住的關係。接下來下面就來細講 Linux 中的權限是什麼概念。
首先修改權限通常會用 chown
和 chmod
兩種方式,可以用一張圖來解釋兩者的差別。
chown
是授予權限給用戶本身chmod
是告訴門看到用戶時可以開門
這裡先只用 chmod 。
上面有提到過 ls
這個指令,如果我們用 ls -l
可以看到:
1e1f1041d948:~/challenge_9$ ls -l
total 1852
-rwxr-xr-x 1 110332 110332 1893921 Nov 19 05:10 executable
前面的 -rwxr-xr-x
便是權限的表示法。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
d | r | w | x | r | w | x | r | w | x |
目錄文件 | 主讀取權限 | 主寫入權限 | 主執行權限 | 組讀取權限 | 組寫入權限 | 組執行權限 | 其他讀取權限 | 其他寫入權限 | 其他執行權限 |
第 0 位代表著文件的類型,跟我們要的權限沒啥關係。第 1~3 位代表文件的所有者的權限、第 4~6 位代表所有人群組的權限、第 7~9 位代表其他所有用戶的權限。
第 1、4、7 位代表讀取權限,如果寫著 r
則有權限,如果寫 -
則沒有權限。剩下的位數以此類推。
好了講完基礎概念可以開始講 chmod
了(
一般我們使用數字模式來使用,
好甲喔
操你媽
114514
操你媽(╯‵□′)╯︵┴─┴