- bandit0
只需要ssh登陆即可,登陆后有文件readme - bandit1
用刚才得到的密码登陆,要读一个文件名为-
的文件。搜了下,开始有的说用--
,这表示选项的结束,但我试了cat -- -
不行,因为cat
把-
当作是stdin了 后来搜,发现直接./-
就可以 -
bandit2
这次要读一个文件名包含空格的文件,直接用\
就可以,实际上tab补全就这么做了……或者用引号把文件名括起来也可以 - bandit3
这次是一个隐藏文件,以dot开头的文件名 - bandit4
这次说文件是唯一一个人类可读的,于是用
find inhere/ -type f -exec file {} \;
发现唯一一个格式是ASCII的文件 -
bandit5
这次给了几个限制,比如文件大小,执行权限等等。还是用find
文件大小用选项-size 1033c
,权限的话,-perm /111
代表u或g或o有执行权限,! -perm /111
代表均没有执行权限 最后用的命令是
find inhere/ -type f -size 1033c ! -perm /111 -exec file {} \;
-
bandit6
这次给了文件的用户名和组名,还是用find
:
find / -type f -user bandit7 -group bandit6 -size 33c 2>/dev/null
-
bandit7
我是直接用grep
搜的:
grep millionth data.txt
-
bandit8
先排序,再找唯一的一行:
sort data.txt | uniq -u
-
bandit9
先用strings
找到所有可读的行,然后用sed
去掉不是以=开头的行:
strings data.txt | sed '/^[^=]/d'
-
bandit10
linux下面直接就有base64解码
base64 -d data.txt
-
bandit11
python2有rot13编码 - bandit12
第一步是要把hex dump恢复:
xdd -r data.txt data
之后就不断解压缩,通过file
来判断文件类型,用gzip -d
,bzip2 -d
,tar xf
来解压缩 -
bandit13
这道题直接给了私钥,可以登陆bandit14:
ssh -i sshkey.private bandit14@localhost
-
bandit14
要连接到本机的30000端口:
echo 'BfMYroe26WYalil77FoDi9qh59eK5xNr' | nc 127.0.0.1 30000
- bandit15
这道题要用ssl连接。首先用
openssl s_client -connect 127.0.0.1:30001
输入密码后是什么heartbeating。正好有提示,因为我们的密码是以B开头的。再次加上quiet
选项:
openssl s_client -quiet -connect 127.0.0.1:30001
然后输入密码即可 - bandit16
首先找到开着的端口:
nmap -p31000-32000 -sV 127.0.0.1
发现了几个,有些是echo,直接就不用管了,剩下的是要用ssl连的。一个个试发现31790是正确的。返回了一个私钥 -
bandit17
直接比较两个文件
diff -u password.*
-
bandit18
登陆后会立刻登出,所以我们给ssh加上命令:
ssh bandit18@bandit.labs.overthewire.org 'cat readme'
-
bandit19
给了一个setuid的程序,会运行其他程序,于是我们写一个脚本来读密码文件,再用setuid的程序执行这个脚本即可。注意要用sh而不是bash,因为bash会忽略setuid - bandit20
这道题要连两个终端上去,一个开nc监听
echo "GbKksEFF4yrVs6il55v6gwY5aVje5f0j" | nc -l 34567
另一个运行setuid的程序。然后nc那边就收到答案 - bandit21
在cron.d
下面找到文件cronjob_bandit22,阅读后发现密码会存到/tmp下的一个文件里,直接查看那个文件得到答案 -
bandit22
同上一道题,阅读后发现也是将密码存到某文件里,文件名按照其构造方式得到:
echo I am user bandit23 | md5sum | cut -d ' ' -f 1
- bandit23
同上,不过这次会定期执行某文件夹下的脚本。于是我们写一个读取密码的脚本放在其下。