目录

级别 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"

进入全屏模式 退出全屏模式

Logo

更多推荐