OverTheWire的bandit遊戲1
文章目錄
介紹
資訊保安作為作為一個早睡晚起的學科(早上睡覺晚上起床),需要掌握海量的基礎知識來支撐後期的學習.而興趣是我們能堅持下去的動力.遇到了一個很有意思的網站http://overthewire.org/wargames/ 以闖關的形式來學習知識,在遊戲中體驗學習的快樂
題目
bandit0
這一關主要是學習使用ssh進行連線.我這裡使用MobaXterm進行連線。
每一個關卡的使用者名稱都是本關卡的名稱,比如本關ssh的使用者名稱就是bandit0,然後每一關的任務就是找到下一關ssh連線的密碼。
進入以後使用命令ls檢視當前目錄下面都有什麼檔案或資料夾。發現有一個readme檔案。用cat檢視檔案內容.得到下一關的密碼
ls
cat readme
bandit1
任務:下一關密碼儲存在home目錄下的-檔案中
先用ls
命令檢視當前目錄下的內容.發現有一個檔名以 -
開頭.如果現在使用cat -
ls -l
那麼怎麼檢視-檔案裡面內容呢.這就要介紹./
在linux中
./
表示當前目錄../
表示上一層目錄.所以這裡使用
cat ./-
bandit2
任務:下一關密碼儲存在名叫home目錄下spaces in this filename
中。這一個關考察我們對空格的掌握。linux的檔名中的特殊字元需要轉移。所以檔名打出來的應該是spaces\ in\ this\ filename
linux自帶補全功能,所以我們也可以使用tab
鍵自動補全
cat spaces\ in\ this\ filename
bandit3
任務:下一關密碼在inhere目錄下面的一個隱藏檔案中。
cd inhere
進入目錄後,當我們使用ls
並不能發現隱藏的檔案。linux的隱藏檔案以.開頭。使用ls並不能顯示,這個時候需要使用命令
ls -a
這樣會顯示本目錄下面所有的檔案。發現**.hidden**檔案。
cat inhere\.hidden
bandit4
任務:下一關密碼儲存在inhere目錄下的一個人類可讀的檔案中(這裡大致說的是ASCII碼)
先cd inhere
進入目錄,ls -al
發現有10個檔案。隨意檢視一個發現檔案內容亂碼。這就是目標中可能提到的人類可讀。使用file ./*
可以看出
./-file00: data
./-file01: data
./-file02: data
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: data
可以看到file07是ASCII text。儲存著下一關的密碼。所以最後使用命令
./* | grep ASCII | cut -b -9 | xargs cat
bandit5
任務:下一關的密碼儲存在inhere目錄下的某個地方。而且這個檔案滿足下面的三個條件1.人類可讀的。2.檔案大小為1033位元組。3.不可執行。
我們先檢視當前目錄ls
發現有很多個資料夾,每個資料夾中又有很多檔案。肯定不能手動找。那就根據三個規則來找檔案。
find . -type f -size 1033c | xargs cat
bandit6
任務:下一關的密碼儲存在伺服器的某個地方,並且這個檔案滿足下面三個條件:1.屬於使用者bandit7 2.屬於組bandit6 3.檔案大小為33位元組
這一題還是考察我們find
命令的使用。主要涉及-user 符合指定的擁有者的檔案或者目錄
-group 查詢符合指定的組的檔案或目錄
-size 查詢符合指定的檔案大小的檔案
find / -type f -user bandit7 -group bandit6 -size 33c | xargs cat
對整個伺服器進行查詢,找到密碼
bandit7
任務:下一關的密碼在檔案data.txt檔案中單詞millionth
旁邊。
還是先用ls
命令檢視,發現目錄下面就有一個data.txt檔案。先用wc data.txt
檔案檢視一下檔案大小。
[email protected]:~$ wc data.txt
98567 197133 4184396 data.txt
行數 單詞數 位元組數 檔名
這裡就要使用管道符|
用grep抓取需要的內容。grep 會把匹配正確的行打印出來
所以最終命令為
cat data.txt | grep millionth
bandit8
任務:密碼儲存在data.txt檔案中,而且密碼這一行只出現了一次。也就是說有很多重複行。使用uniq 報告或忽略檔案中的重複行
來達到目的。
sort data.txt | uniq -u
只顯示在檔案中出現了一次的行
bandit 9
任務:密碼在data.txt檔案中以幾個‘=’開頭的人類可讀的字串中。
先檢視檔案型別,發現檔案型別是二進位制。要在二進位制中找字串最好使用的命令是string 在物件檔案或二進位制檔案中查詢可列印的字串
file data.txt
strings data.txt | grep ==
bandit 10
密碼在data.txt檔案中,並且包含了base64編碼。base64編碼的典型特徵就是最後兩個=號嘗試一下。發現了確實有一行base64編碼。那進一步使用base64 -d
進行解碼
grep == data.txt
grep == data.txt | base64 -d
bandit 11
任務:密碼在data.txt檔案中,並且所有的小寫和大寫字母都經過rot13加密。ROT13原理相當下面的替換
ABCDEFGHIJKLMNOPQRSTUVWXYZ
NOPQRSTUVWXYZABCDEFGHIJKLM
在linux中有tr 將字元進行替換壓縮和刪除
我們可以使用這個命令進行響應的替換。
cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
bandit 12
這一關密碼在data.txt檔案中,這個檔案是一個被多次壓縮的十六進位制檔案。這一關主要考察的就是我們對各種壓縮命令的掌握。
[email protected]:/home$ ls -ld bandit12
drwxr-xr-x 2 root root 4096 Oct 7 18:43 bandit12
可以看到我們對於bandit12
目錄(當前目錄)只有可讀的許可權。不能在次目錄下面建立檔案和修改檔案。在提示中提到了/tmp
目錄下可以修改。linux會將快取或臨時檔案放在/tmp目錄下面,並定時清理。而這裡擁有執行許可權。
在這裡建立一個目錄,將data.txt拷貝過來。
[email protected]:~$ mkdir /tmp/myfiletest1
[email protected]:~$ cp data.txt /tmp/myfiletest1
因為檔案是16進位制檔案,用xxd -r data.txt > data
將十六進位制轉為二進位制檔案。如果不知道是什麼壓縮方式可以使用file命令
。後面就是重複使用下面幾個解壓縮命令:
gunzip 解壓被gzip壓縮過的檔案,通常以.gz結尾。
gunzip 等價於 gzip -d 命令
bzip2 將檔案壓縮成bz2格式,壓縮包通常以.bz2格式結尾。
解壓縮命令為 bzip2 -d
tar linux下的歸檔使用工具,用來打包和備份。
tar -zxvf 解包並解壓
一直迴圈解壓解包最後就得到密碼了
bandit13
任務提示說密碼在**/etc/bandit_pass/bandit14中,但是檔案只能被bandit14讀取。而我們現在才bandit13。後面又提示我們本目錄下面有bandit14的ssh的私鑰privatekey**利用ssh可以連線到bandit14。
ssh -i [email protected] ./sshkey.private
連線成功,檢視下一關的密碼
[email protected]:~$ cat /etc/bandit_pass/bandit14
bandit14
當我們在本關的localhost的30000埠提交本關的密碼,就會返回下一關的密碼。本關就是要學會使用各種網路連線工具。可以使用telnet,nc,ssh等工具
[email protected]:~$ nc localhost 30000
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Correct!
BfMYroe26WYalil77FoDi9qh59eK5xNr
bandit15
題目中說在localhost的30001埠使用SSL提交本關的密碼就會得到下一關的密碼。網上說要使用openssl
進行連線。Google發現了可以使用OpenSSL的一個命令測試HTTPS的服務。
openssl s_client -connect <hostname>:<port>
openssl s_client -ign_eof -connect localhost:30001
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!
cluFn7wTiGryunymYOu4RcffSxQluehd