Bandit是一个学习Linux的网站,它采用游戏通关的方式来帮助我们学习linux基本使用的命令,十分适合没有基础或基础较弱的同学学习。【虽然是英文但是很容易,用翻译也可】
官网地址是:https://overthewire.org/wargames/bandit/
本篇是学习笔记,记录了所有关卡的通关密码,并根据其关卡所涉及的知识进行了分类。
另外因为是笔记,所以记录过程更为随性,更重于对相关知识的记录和收集,而且对于关卡解密也更多是点拨作用,一般不会提到详细的解题过程,对于这点还请见谅。
连接方式:
命令:
ssh [email protected] -p2220
密码(0-5关密码,注意改用户名):
bandit0
boJ9jbbUNNfktd78OOpsqOltutMc3MY1
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK
pIwrPrtPN36QITSp3EQaw936yaFoFgAB
koReBOKuIDDepwhWk7jZC0RTdopnAYKh
DXjZPULLxYr17uwoI01bNLQbtFemEgo7
学习命令:
ls, cd, cat, file, du, find【reset】
命令说明:
du:显示文件占用大小
reset:如果输出不可见字符导致命令行乱码可以使用这条命令来重置。
find:查找命令。
常用参数:
-type:指定要找文件类型,f为文件,d为文件夹,除此之外还有fcbsp
-name:指定文件名
-size:指定文件大小,最后加c代表字节,并且可以用k代表千字节,加减号+/-代表大于此大小或小于此大小
-user,-group:指定文件所属用户名和组名
2>/dev/null:当然这不是参数,但是常用来过滤掉报错信息
知识点说明:
文件名为减号-
时,需要指定路径才能读取,因为减号在linux中有特殊意义,如cat ./-
连接方式:
命令:
ssh [email protected] -p2220
密码(7-12关密码,注意改用户名):
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs
cvX2JJa4CFALtqS87jk27qwqGhBM9plV
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR
5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
学习命令:
grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd
命令说明:
grep:过滤指定字符串
常用参数:
-n:显示行号
-v:翻转查找
-i:忽略大小写
-A和-B:除指定的那一行外,再向后或向前显示多少行。
sort:将输入的数据升序排序后输出
常用参数:
-u:将相同行合并为一行
-r:逆序排序
-n:以数字方式排序,默认是按照字符方式排序的
-t,-k:多栏排序
这个主要用在数据成表格格式的数据的排序中,通过-t指定分隔符可以将每一列分为不同的属性;
然后-k来指定每一行通过第几个属性的几个字符来进行排序,比如-k 1.2,1.5
,指利用第1条属性的第2个字符到第5个字符排序,如果忽略第二个参数就是利用第1条属性的第2个字符到最后一个字符排序。
uniq:将输入的数据相邻的重复行合并为一个
常用参数,使用参数后功能不同:
-c:在每行开头增加重复次数显示。
-f:跳过对前N个列的比较。
-i:忽略大小写
-u:不打印相邻重复行
-w:只对每行前N个字符进行比较
它和sort经常一起使用,比如找到文件中未重复的行:sort file | uniq -u
strings:过滤不可打印字符,将所有可打印字符回显
知识点说明:
连接方式:
命令:
ssh [email protected] -p2220
密码(13-16关密码,注意改用户名):
8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
BfMYroe26WYalil77FoDi9qh59eK5xNr
cluFn7wTiGryunymYOu4RcffSxQluehd
学习命令:
ssh, telnet, nc, openssl, s_client, nmap
命令说明:
ssh:安全的终端连接工具,可以通过密码、密钥等方式进行认证。
普通的使用方式就是:ssh {hostname}@{address}
,就会尝试连接远程主机的指定用户。
常用参数:
-p:指定连接端口,不指定则为默认的22端口。
-i:使用指定的密钥进行认证连接。【ssh使用密钥需要其他人不能访问,而vim创建的文件一般其他人可见,所以需要用chmod改为700】
openssl:用于测试TLS协议连接的工具,日常常见的是https协议,简单来说就是自动加密的网络连接。
详细讲解:
基本使用方法:
openssl s_client -crlf -connect www.baidu.com:443 -servername www.baidu.com
v1.1.1版本开始的openssl会自动获取servername参数,所以不需要指定这个参数。
nmap:扫描器。
基本使用:
#扫描本地指定端口范围:
nmap -v localhost -p 31000-32000
知识点说明:
连接方式:
命令:
ssh [email protected] -p2220
密码(17关密码,注意改用户名):
xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn
学习命令:
cat, grep, ls, diff
命令说明:
diff:比较多个文件异同。
基本使用:
diff passwords.new passwords.old
diff以逐行的方式,比较文本文件的异同处 如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
普通模式下比较会在第一行显示出不同的行的相关信息,比如42c42表示两个文件第42行不同,下面显示的是它们的比较结果
常用参数:
-y:以两行的格式显示出两个文件的内容,并且用符号标记不同的行。
连接方式:
命令:
ssh [email protected] -p2220
密码:
kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd
学习命令:
ssh, ls, cat
命令说明:
知识点说明:
18关要点:
ssh [email protected] -p2220 cat readme
ssh后面可以直接加命令执行,这我还是第一次知道,命令会在.bashrc被加载之前运行
连接方式:
命令:
ssh [email protected] -p2220
密码(19-20关密码,注意改用户名):
IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x
GbKksEFF4yrVs6il55v6gwY5aVje5f0j
学习命令:
chmod, ssh, nc, cat, bash, screen, tmux, Unix ‘job control’ (bg, fg, jobs, &, CTRL-Z, …)
命令说明:
知识点说明:
19关要点:
这里简要介绍一下euid和setuid: euid:有效用户ID 用于系统决定用户对系统资源的权限
setuid:只有可以执行的二进制程序才能设定SetUID权限,并且命令执行者要对该程序拥有x(执行)权限。对于设定了 SetUID 权限的命令来说,其功能是命令执行者在执行该程序文件时获得该程序文件所有者的身份。SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
设置setuid的方法是使用Linux的chmod指令,我们都习惯给予一个文件类似“0750” “0644” 之类的权限,它们的最高位0就是setuid的位置, 我们可以通过将其设为4来设置setuid位。(tips:设置为2为setgid,同setuid类似,即赋予文件所在组的权限)
设置: chmod 4750 文件名 or chmod u+s 文件名
取消: chmod 750或者0777 文件名 or chmod u-s 文件名
连接方式:
命令:
ssh [email protected] -p2220
密码(21-23关密码,注意改用户名):
gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr
Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI
jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n
学习命令:
cron, crontab, crontab(5) (use “man 5 crontab” to access this)
命令说明:
知识点说明:
每个人都有自己的定时任务列表,定时任务执行时会使用用户的权限。
可以使用如下命令来列出当前所有的定时任务:
ls -la /etc/cron.d/
连接方式:
命令:
ssh [email protected] -p2220
密码:
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ
学习命令:
命令说明:
知识点说明:
第24关要求写个爆破0000~9999的简单爆破脚本。
python-socket:
import socket
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host,port='localhost',30002
s.connect((host,port))
tmp=s.recv(1024)
for i in range(10000):
_=s.send(b'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d\n'%i)
tmp=s.recv(1024)
if not tmp.startswith(b"Wrong"):
print(i,tmp)
elif i%100==0:
print(i)
python-pwntools:
from pwn import *
r = remote('localhost', 30002)
for i in range(10000):
try:
s = "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d"%i
r.sendline(s)
response=r.recvline()
if b'Wrong!' not in response:
print(response)
elif i%1000==0:
print(i)
except:
pass
linux-shell脚本(速度最快):
printf 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d\n' {0..10000} | nc localhost 30002 | grep -v 'Wrong'
连接方式:
命令:
ssh [email protected] -p2220
密码(25-26关密码,注意改用户名):
uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG
5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z
学习命令:
命令说明:
知识点说明:
第25关要点:
more和less都是可以执行命令的,在出发more的状况下输入!command这种。 但是我们直接ssh登陆的时候并没有出发more的效果,原因是因为终端太大了。。把终端缩小点即可。
然后输入!/bin/sh,尝试进入命令行模式,不过失败了。。 这里还有其他的用法,输入v,进入vim模式,其实vim模式也能执行命令,方法也是!command,但是这里也不行,因此再就是用vim特有的:e file
,vim模式下的e命令可以导入文件到编辑器内,我们知道密码的所在,因此就可以用e命令来导入密码文件:
:e /etc/bandit_pass/bandit26
第26关要点:
vim需要先设置shell才能使用shell,如下:
vim模式下
:set shell=/bin/bash
:sh
连接方式:
命令:
ssh [email protected] -p2220
密码(27-31关密码,注意改用户名):
3ba3118a22e93127a4ed485be72ef5ea
0ef186ac70e04ea33b4c1853d2526fa2
bbc96594b4e001778eee9975372716b2
5b90576bedb2cc04c86a9e924ce42faf
47e603bb428404d265f59c42920d81e5
学习命令:
git
命令说明:
知识点说明:
第27关要点:
设了一个远程仓库,git克隆过来之后就可以看到下一关的密码了,直接用命令:
git clone ssh://[email protected]/home/bandit27-git/repo
第28关要点:
还是远程仓库,但是信息不在此版本,有命令:
#显示版本变化log:
git log
#显示版本具体变化:
git show
第29关要点:
还是远程仓库,信息在其他分支,用命令:
#显示所有的分支:
git branch -a
#切换到某个分支:
git checkout remotes/origin/dev
第30关要点:
还是远程仓库,信息在引用中,用命令:
#显示所有引用头:
git show-ref
#显示引用头信息:
git show refs/tags/secret
第31关要点:
还是远程仓库,需要你更新提交一次仓库请求【更新对了之后会返回下一关密码】,用命令:
#查看版本变化:
git log
#编辑好文件之后需要添加【可以用点.代替当前所有文件】:
git add key.txt
#提交前需要加上注释
git commit -m 'push key.txt'
#提交:
git push
连接方式:
命令:
ssh [email protected] -p2220
密码(32-31关密码,注意改用户名):
56a9bf19c63d650ce78e6ec0354ee45e
学习命令:
命令说明:
知识点说明:
level32要点:
题目的shell是自定义的一个名为uppershell的shell,会将用户的输入转换为大写后送入sh执行,可以使用$0
来绕过,因为$0
代表当前执行脚本的名字,如果是命令行执行,则代表shell的名字。
还未更新第34关,这是最后一关。
连接方式:
命令:
ssh [email protected] -p2220
登录密码:
c9c3199ddf4121b10cf581a98d51caee