1. 程式人生 > >OverTheWire的bandit遊戲1

OverTheWire的bandit遊戲1

文章目錄

介紹

資訊保安作為作為一個早睡晚起的學科(早上睡覺晚上起床),需要掌握海量的基礎知識來支撐後期的學習.而興趣是我們能堅持下去的動力.遇到了一個很有意思的網站http://overthewire.org/wargames/ 以闖關的形式來學習知識,在遊戲中體驗學習的快樂

話不多說,開始基礎遊戲bandit


題目

bandit0

這一關主要是學習使用ssh進行連線.我這裡使用MobaXterm進行連線。
每一個關卡的使用者名稱都是本關卡的名稱,比如本關ssh的使用者名稱就是bandit0,然後每一關的任務就是找到下一關ssh連線的密碼。
進入以後使用命令ls檢視當前目錄下面都有什麼檔案或資料夾。發現有一個readme檔案。用cat檢視檔案內容.得到下一關的密碼

ls
cat readme

bandit1

任務:下一關密碼儲存在home目錄下的-檔案中
先用ls命令檢視當前目錄下的內容.發現有一個檔名以 -開頭.如果現在使用cat -

是行不通的.因為linux總是用-後面接收命令執行的引數如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