OverTheWire:Bandit
0x00 Level0
用MobaXterm设置ssh连接
输入bandit0
密码登录
0x01 level0->level1
0x02 level1-> level2
修改用户名为后,重新连接ssh,密码为boJ9jbbUNNfktd78OOpsqOltutMc3MY1
。
0x03 level2-> level3
0x04 level3-> level4
0x05 level4-> level5
file命令可以用于辨识文件类型
0x06 level5->level6
Linux find 命令用来在指定目录下查找文件。
Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path…] [expression]
一些参数说明
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
0x07 level6->level7
后查阅资料发现,报错可用2>/dev/null
隐藏。Linux系统预留可三个文件描述符:0——标准输入(stdin)、1——标准输出(stdout)和2标准错误(stderr)。>
是重定向。/dev/null
是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。这个设备通常也被称为位桶(bit bucket)或黑洞。
0x08 level7->level8
0x09 level8->level9
uniq参数
-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。
0x0A level9->level10
0x0B level10->level11
0x0C level11->level12
ROT13加密
0x0D level12->level13
xxd [options] [infile [outfile]]
xxd -r[evert] [options] [infile [outfile]]
xxd 命令用于用二进制或十六进制显示文件的内容,如果没有指定outfile参数,则把结果显示在屏幕上,如果指定了outfile则把结果输出到 outfile中;如果infile参数为 – 或则没有指定infile参数,则默认从标准输入读入。
-r
逆向操作: 把xxd的十六进制输出内容转换回原文件的二进制内容。
发现文件是gzip格式,mv为.gz文件后,gzip -d
解压缩。
发现文件是bzip2格式,mv为.bz2文件后,bzip2 -d
解压缩。
接着是嵌套的解压缩
0x0E level13->level14
发现存在ssh的私钥文件。
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
0x0F level14->level15
Usage: telnet [-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user]
[-n tracefile] [ -b addr ] [-r] [host-name [port]]
0x10 level15->level16
s_client为一个SSL/TLS客户端程序,与s_server对应,它不仅能与s_server进行通信,也能与任何使用ssl协议的其他服务程序进行通信。使用命令openssl s_client
远程连接。
-connect host:port - who to connect to (default is localhost:4433)
0x11 level16->level17
使用nmap -sV localhost -p 31000-32000
,-sV 显示详情,-p指定端口。
发现两个可疑目标,开始测试ssl连接。得到一段ssh私钥文件。
提示权限问题
修改权限后再次连接,chmod 600 ssh.priv
,
0x12 level17->level18
0x13 level18->level19
无法直接使用密码登录。可以用命令直接读取文件。也可以使用ssh bandit18@localhost -T
禁用伪终端方式登录。
0x14 level19->level20
id命令用于显示用户的ID,以及所属群组的ID。
0x15 level20->level21
nc是netcat的简写,可以用来取代telnet进行某些服务端口的检测工作。
服务端:nc -l 端口号 > 文件名
客户端:nc 主机的ip或域名 端口号 < 文件名
常用参数:
-l:用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server
-s:指定发送数据的源IP地址,适用于多网卡机
-u:指定nc使用UDP协议,默认为TCP
-v:输出交互或出错信息,新手调试时尤为有用
-w:超时秒数,后面跟数字
-z:表示zero,表示扫描时不发送任何数据
使用 &
号将下面这个命令放到后台运行
0x16 level21->level22
在LINUX中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。
在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了数字还有几个个特殊的符号就是"*"、"/“和”-"、",",*代表所有的取值范围内的数字,"/“代表每的意思,"/5"表示每5个单位,”-“代表从某个数字到某个数字,”,“分开几个离散的数字。
0x17 level22->level23
0x18 level23->level24
stat命令主要用于显示文件或文件系统的详细信息。
语法:stat [option] file
option参数说明:
-L, --dereference 显示符号链接
-f, --file-system 显示文件系统状态而不是文件状态
-c --format=FORMAT 自定义输出格式,结尾有换行
--printf=FORMAT
如同 --format, 但是解释反斜杠转义,而不是
输出强制性的换行符; 如果你想换行,
在FORMAT中包含\n
-t, --terse 以简洁的形式打印信息
--显示此帮助并退出
--version 输出版本信息并退出
其中format可以自定义个数数组的有:
%a 八进制表示的访问权限
%A 可读格式表示的访问权限
%b 分配的块数(参见 %B)
%B %b 参数显示的每个块的字节数
%d 十进制表示的设备号
%D 十六进制表示的设备号
%f 十六进制表示的 Raw 模式
%F 文件类型
%g 属主的组 ID
%G 属主的组名
%h 硬连接数
%i Inode 号
%n 文件名
%N 如果是符号链接,显示器所链接的文件名
%o I/O 块大小
%s 全部占用的字节大小
%t 十六进制的主设备号
%T 十六进制的副设备号
%u 属主的用户 ID
%U 属主的用户名
%x 最后访问时间
%X 最后访问时间,自 Epoch 开始的秒数
%y 最后修改时间
%Y 最后修改时间,自 Epoch 开始的秒数
%z 最后改变时间
%Z 最后改变时间,自 Epoch 开始的秒数
针对文件系统还有如下格式选项:
%a 普通用户可用的块数
%b 文件系统的全部数据块数
%c 文件系统的全部文件节点数
%d 文件系统的可用文件节点数
%f 文件系统的可用节点数
%C SELinux 的安全上下文
%i 十六进制表示的文件系统 ID
%l 文件名的最大长度
%n 文件系统的文件名
%s 块大小(用于更快的传输)
%S 基本块大小(用于块计数)
%t 十六进制表示的文件系统类型
%T 可读格式表示的文件系统类型
这里参考了大佬的博客,/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,一般一个用户最多只有一个crontab文件。在/var/spool/bandit24目录下就可以运行bandit24的定时任务。
创建脚本,写入cat /etc/bandit_pass/bandit24 > /tmp/bandit24pass
0x19 level24->level25
做出字典,然后执行nc localhost 30002 < 1.txt
for i in {1000..9999}
do
echo "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i " >> 1.txt
done
0x1A level25->level26
发现存在密钥,执行ssh -i bandit26.sshkey bandit26@localhost
,返回失败。
|
|
将终端对话框缩放小,这样可以自动执行more
在exit 0前,按v进入vim编辑模式,通过:e file,可以导入文件到编辑器内,执行
:e /etc/bandit_pass/bandit26
0x1B level26->level27
将终端对话框缩放小,以bandit26登录
vim模式下
:set shell=/bin/sh
:sh
0x1C level27->level28
0x1D level28->level29
git clone后查看文件
0x1E level29->level30
git branch -a
查看分支,一般dev是development开发者的分支,git checkout
切换分支
0x1F level30->level31
git show-ref
显示本地存储库中可用的引用以及关联的提交ID。
0x20 level31->level32
0x21 level32->level33
linux shell下的特殊用法及参数的说明:
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。