OverTheWire 强盗级别 0-18 提示和注释
目录 级别 0 -SSH 1 级 - 猫 2 级 - 猫 3 级 - ls 4 级 - 文件 5 级 - 查找 6 级 - 查找 7 级 - Grep 8 级 - 管道 9 级 - 字符串 10 级 - Base64 11 级 - ROT13 12 级 - 十六进制转储 级别 13 - SSH 本地主机 14 级 - NC 15 级 - Openssl 16 级 - nmap,chmod 17 级
目录
级别 0 -SSH
1 级 - 猫
2 级 - 猫
3 级 - ls
4 级 - 文件
5 级 - 查找
6 级 - 查找
7 级 - Grep
8 级 - 管道
9 级 - 字符串
10 级 - Base64
11 级 - ROT13
12 级 - 十六进制转储
级别 13 - SSH 本地主机
14 级 - NC
15 级 - Openssl
16 级 - nmap,chmod
17 级 - 差异
18 级 - pty
0级
ssh 登录的语法是ssh your_username@host_ip_address
,我们可以使用-p
指定端口:
ssh bandit0@bandit.labs.overthewire.org -p 2220
进入全屏模式 退出全屏模式
1级
打开名为的文件 - 位于主目录中
cat ./-
进入全屏模式 退出全屏模式
只有cat -
命令将被解释为使用标准输入和输出来读取和写入。./-
定义了文件的相对路径。
或者将文件重定向到 cat:
cat < -
进入全屏模式 退出全屏模式
2级
在位于主目录的文件名中打开名为空格的文件
cat "spaces in this filename"
进入全屏模式 退出全屏模式
或者
cat spaces\in\this\filename
进入全屏模式 退出全屏模式
3级
_ 在此处目录中查找隐藏文件 _
要进入 inhere 目录:
cd inhere
进入全屏模式 退出全屏模式
隐藏文件是名称以点开头的文件。要显示当前目录中的隐藏文件,我们可以使用ls
的-al
选项:
ls -al
进入全屏模式 退出全屏模式
接着
cat .hidden
进入全屏模式 退出全屏模式
4级
在此处目录中找到唯一人类可读的文件
cat
命令用于文本文件,即人类可读的。要查找当前目录中所有文件的文件类型:
file ./*
进入全屏模式 退出全屏模式
找出文件上唯一的 ASCII 文本文件和cat
。
5级
在此处目录下的某处找到该文件,并具有以下所有属性:
人类可读
1033 字节大小
不可执行_
find ./inhere -readable -size 1033c \! -executable
进入全屏模式 退出全屏模式
请注意,此命令不适用于 BSD,即 Mac 终端版本find
。
或者,循环遍历所有内容和每个file
:
for i in $(ls); do file -i "./$i"; done;
进入全屏模式 退出全屏模式
6级
在服务器中搜索具有以下所有属性的文件:
_由用户bandit7拥有
由集团bandit6拥有
大小为 33 个字节_
find / -size 33c -user bandit7 -group bandit6
进入全屏模式 退出全屏模式
33c
中的后缀c
表示字节,其他选项有:
-
b
– 512 字节块(如果不使用后缀,这是默认值) -
c
– 字节 -
w
– 两字节字 -
k
– 千字节 -
M
– 兆字节 -
G
– 千兆字节
如何使用 find 命令根据文件大小搜索文件
7级
找到包含第百万个单词的行
grep --include=\*.{txt} -rnw . -e 'millionth'
进入全屏模式 退出全屏模式
grep
代表全局正则表达式打印,它有选项
-
-r
或-R
是递归的 -
-n
是行号 -
-w
代表匹配整个单词。 -
-l
(小写L)可以加只给匹配文件的文件名 -
-e
是搜索期间使用的模式
除了这些,还可以使用--exclude
、--include
、--exclude-dir
标志。
[
如何在 Linux 上找到包含特定文本的所有文件?](https://stackoverflow.com/questions/16956810/how-do-i-find-all-files- contains-specific-text-on-linux/34236947#34236947)
8级
在data.txt中找到唯一出现一次的文本行
sort data.txt | uniq -u
进入全屏模式 退出全屏模式
sort
命令按字典顺序显示 data.txt 的内容,并且该输出通过pipe
重定向到uniq
。
uniq
无法检测到重复行,除非它们彼此相邻。因此,在使用uniq
之前必须对文件中的内容进行排序。
每当我们使用重定向或管道时,数据都是匿名发送的,因此输出不包含文件名。
-
>
,将输出保存到文件。 -
>>
,将输出附加到文件中。 -
<
,从文件中读取输入。 -
2>
,重定向错误消息。 -
|
,将一个程序的输出作为输入发送到另一个程序。
学习管道和重定向
9级
在 data.txt 中查找为数不多的人类可读字符串之一,前面有几个“u003d”字符
strings data.txt | grep "="
进入全屏模式 退出全屏模式
在这种情况下,简单地在文件上使用grep
是行不通的,因为文件内容是一组没有换行的单词。strings
命令与cat
不同,它忽略空白行,只打印 4 个或更多字符的序列。在终端上尝试echo abc | strings
。
10级
解码data.txt,其中包含base64编码数据
base64 --decode data.txt
进入全屏模式 退出全屏模式
11级
ROT13(“旋转 13 位”,有时连字符为 ROT-13)是一种简单的字母替换密码,用字母表中的第 13 个字母替换一个字母。 ROT13 是在古罗马发展起来的凯撒密码的一个特例。
因为基本拉丁字母有26个字母(2×13),ROT13是它自己的逆;也就是说,为了撤销ROT13,应用相同的算法,因此可以使用相同的动作进行编码和解码。
Restore data.txt,其中所有小写 (a-z) 和大写 (A-Z) 字母都旋转了 13 个位置
cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
进入全屏模式 退出全屏模式
或者
alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
cat data.txt | rot13
进入全屏模式 退出全屏模式
tr
代表翻译、翻译或删除字符。tr
替换集合 1 中的每个字母A-Za-z
用于大写和小写,使用集合 2,即 A 将替换为 N,Z 将替换为 M 等等。
12级
Hexdump 是一个实用程序,它以十六进制 (Base16)、十进制 (Base10)、八进制 (Base8) 或 ASCII 格式显示二进制文件的内容。
您可以使用 hexdump 查看文件的内容,尤其是当它包含不可打印的字符时,例如图像。在终端上尝试
hexdump --canonical foo.png
看看会发生什么。
恢复文件data.txt,这是一个被反复压缩的文件的hexdump
cat data.txt | xxd -r > data
进入全屏模式 退出全屏模式
xxd
是一个 Linux 命令,它为给定的文件或标准输入创建一个 hexdump。它还可以使用-r
选项将 hexdump 转换回其原始二进制形式。在这里,我们将cat
的输出通过管道传输到反向 hexdump,并将输出重定向到一个名为 data.xml 的新文件。
file data
进入全屏模式 退出全屏模式
file
命令显示新文件的格式,在本练习中使用了三种类型的压缩格式:
-
gzip 压缩数据,文件扩展名为
.gz
-
POSIX tar 存档 (GNU),具有文件扩展名
.tar
-
bzip2 压缩数据,有文件扩展名
.bz
根据file
命令告诉我们当前文件是什么格式,我们需要使用相应的解压命令。在我们可以应用解压缩之前,必须使用正确的文件扩展名重命名文件。系统无法猜测文件的原始名称。
以gzip为例,使用mv
重命名文件:
mv data data.gz
进入全屏模式 退出全屏模式
解压data.gz文件:
gzip -d data.gz
进入全屏模式 退出全屏模式
gzip 将输入文件替换为解压缩文件,您应该会看到没有.gz
扩展名的新文件。
对解压输出重复file
的过程,直到结果格式为 ASCII 文本(此时您将看到它是 RSA.key
文件,您可以使用 ssh 私钥登录)。
下面是解压命令:
gzip -d file.gz
bzip2 -d file.bz
tar -xf file.tar
进入全屏模式 退出全屏模式
Hexdump 的工作原理
14级
将当前级别的密码提交到localhost上的30000端口
echo password | nc localhost 30000
进入全屏模式 退出全屏模式
Netcat(或 nc )是一个命令行实用程序,它使用 TCP 或 UDP 协议跨网络连接读取和写入数据。
你可以打开两个终端,一个监听 3000 端口:
nc -l 3000
进入全屏模式 退出全屏模式
另一个打开与端口的连接:
nc localhost 3000
进入全屏模式 退出全屏模式
两个终端现在可以自由通信了。
15级
使用SSL加密将当前级别的密码提交到localhost上的30001端口
echo password | openssl s_client -ign_eof -connect localhost:30001
进入全屏模式 退出全屏模式
OpenSSL 是一个通用加密库,提供安全套接字层 (SSL) 和传输层安全 (TLS) 协议的开源实现。传输层安全 (TLS) 协议在 TCP/IP 传输协议之上添加了一层安全性。
传输层安全 (TLS) 是 SSL 的后续协议。 TLS 是 SSL 的改进版本。它的工作方式与 SSL 大致相同,使用加密来保护数据和信息的传输。
s_client
命令实现了一个通用的 SSL/TLS 客户端,它使用 SSL/TLS 连接到远程主机。
在这个级别,我们通过 SSL 进行加密通信。s_client
的-ign_eof
选项禁止在输入中到达文件结尾时关闭连接,即在我们按下回车键之后。
16级
将当前级别的密码提交到 localhost 上 31000 到 32000 范围内的端口_
1.查找打开的端口(有服务器监听)
nmap -p 31000-32000 localhost
进入全屏模式 退出全屏模式
nmap (Network Mapper) 是一种网络扫描器,用于通过发送数据包和分析响应来发现计算机网络上的主机和服务。
这里我们使用nmap在localhost的指定范围内进行了端口扫描(连接到端口)。
2.查找启用了ssl的开放端口
在每个打开的端口上运行命令,直到其中一个返回 RSA 密钥:
openssl s_client -connect localhost:port
进入全屏模式 退出全屏模式
您可以将密钥复制并保存在本地的.key
文件中,然后登录到下一个级别:
ssh -i bandit17.key bandit17@bandit.labs.overthewire.org -p 2220
进入全屏模式 退出全屏模式
3.解决ssh“权限太开放”错误
密钥只能由用户访问。密钥文件上的快速ls -l
将显示用户 (u)、组 (g) 和其他 (o) 都具有读取权限。您可以删除组和其他人的读取权限:
chmod g-r bandit17.key && chmod o-r bandit17.key
进入全屏模式 退出全屏模式
或删除除用户读取之外的所有权限:
chmod 400 bandit17.key
进入全屏模式 退出全屏模式
17级
找到 passwords.old 和 passwords.new 之间唯一更改的行
diff passwords.old passwords.new
进入全屏模式 退出全屏模式
diff
命令可让您逐行比较文件或目录。解释此命令的输出
-
<
表示来自 passwords.old 的行 -
>
表示来自 passwords.new 的行 -
42c42
表示 passwords.old 中的行号(左侧的数字)已更改为 passwords.new 中的行(右侧的数字)。数字之间的字母是行上可能执行的操作的缩写(d
代表删除,a
代表添加,c
代表更改)。
要在输出中仅查看 passwords.new 中更改的行:
diff --changed-group-format='%>' --unchanged-group-format='' passwords.old passwords.new
进入全屏模式 退出全屏模式
18级
当您使用 SSH 登录时,有人修改了 .bashrc 以将您注销
ssh -t bandit18@bandit.labs.overthewire.org -p 2220 /bin/sh
进入全屏模式 退出全屏模式
ssh
在远程机器上创建一个伪终端 (pty),而不是文本终端 (tty)。ssh -t
命令强制pty用shell/bin/sh
打开,现在我们可以正常和机器和cat readme
交互了。
或者,要在一行中获取密码:
ssh -t bandit18@bandit.labs.overthewire.org -p 2220 "cat ~/readme"
进入全屏模式 退出全屏模式
更多推荐
所有评论(0)