shell学习

shell

tip1

strings命令来过滤掉二进制字符并将文件转换为文本文件

你可以使用以下命令来利用grep滤除文本中仅出现一次的文本行:

1
cat 文件名 | sort | uniq -u

个命令会首先使用cat命令读取指定的文件,然后使用sort命令将所有行按字典序排序,最后使用uniq -u命令查找只出现一次的行并输出。

tip2

在Shell命令行中,可以使用Ctrl + w快捷键来删除光标附近的一个单词。具体操作如下:

  1. 将光标移动到要删除的单词的首字符位置。

  2. 按下Ctrl + w组合键。

    这将会删除光标所在位置向前的一个单词,包括该单词前面的空格、制表符等空白字符。

    如果要删除光标所在位置向后的一个单词,可以使用Ctrl + u组合键。

Ctrl + a 移动到 shell 命令行开头

Ctrl + e 移动到 shell 命令行结尾

tip3

在Shell命令行中,可以使用Ctrl + d快捷键来向右删除一个字符。具体操作如下:

  1. 确保光标位于要删除的字符的左侧。

  2. 按下Ctrl + d组合键。

    这将会删除光标所在位置向右的一个字符。

需要注意的是,Ctrl + d 组合键同时也有其他功能。当输入行为空时,它表示输入结束,即退出当前Shell会话。因此,如果当前输入行不为空,你需要确保光标处于要删除的字符的左侧,以避免意外退出会话。

tip4

在Shell上,你可以使用以下快捷键以单词为单位移动光标:

Ctrl + ←:向左移动光标到前一个单词的开头。

Ctrl + →:向右移动光标到后一个单词的结尾。

Bandit Level 11 → Level 12

The password for the next level is stored in the file data.txt, where all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 positions
下一级的密码存储在文件 data.txt 中,其中所有小写 (a-z) 和大写 (A-Z) 字母都旋转了 13 个位置

1
2
3
4
bandit11@bandit:~$ tr 'A-Za-z' 'N-ZA-Mn-za-m' < data.txt
The password is JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv
bandit11@bandit:~$ cat data.txt
Gur cnffjbeq vf WIAOOSFzMjXXBC0KoSKBbJ8puQm5lIEi

解压文件

要解压以 .bz2 结尾的文件,可以使用 bzip2 命令。以下是解压 .bz2 文件的命令示例:

1
bzip2 -dk filename.bz2

在这个命令中,-d 选项表示解压,-k 选项表示保留原始文件。

对于gzip格式:gzip -d binary_data.gz
对于bzip2格式:bzip2 -d binary_data.bz2
对于xz格式:xz -d binary_data.xz

Bandit Level 16 → Level 17

通过将当前级别的密码提交到localhost上31000到32000范围内的端口,可以检索下一级别的凭据。首先找出这些端口中的哪些端口上有服务器侦听。然后找出哪些人说SSL,哪些人不。只有一台服务器会给予下一个凭证,其他服务器会简单地将您发送的任何内容发送回给您。

  • Solution 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
bandit16@bandit:~$ nmap -sV localhost -p 31000-32000
Starting Nmap 7.80 ( https://nmap.org ) at 2024-01-13 11:11 UTC
Stats: 0:01:33 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 80.00% done; ETC: 11:13 (0:00:23 remaining)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
31046/tcp open echo
31518/tcp open ssl/echo
31691/tcp open echo
31790/tcp open ssl/unknown
31960/tcp open echo
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port31790-TCP:V=7.80%T=SSL%I=7%D=1/13%Time=65A26FDD%P=x86_64-pc-linux-g
SF:nu%r(GenericLines,31,"Wrong!\x20Please\x20enter\x20the\x20correct\x20cu
SF:rrent\x20password\n")%r(GetRequest,31,"Wrong!\x20Please\x20enter\x20the
SF:\x20correct\x20current\x20password\n")%r(HTTPOptions,31,"Wrong!\x20Plea
SF:se\x20enter\x20the\x20correct\x20current\x20password\n")%r(RTSPRequest,
SF:31,"Wrong!\x20Please\x20enter\x20the\x20correct\x20current\x20password\
SF:n")%r(Help,31,"Wrong!\x20Please\x20enter\x20the\x20correct\x20current\x
SF:20password\n")%r(SSLSessionReq,31,"Wrong!\x20Please\x20enter\x20the\x20
SF:correct\x20current\x20password\n")%r(TerminalServerCookie,31,"Wrong!\x2
SF:0Please\x20enter\x20the\x20correct\x20current\x20password\n")%r(TLSSess
SF:ionReq,31,"Wrong!\x20Please\x20enter\x20the\x20correct\x20current\x20pa
SF:ssword\n")%r(Kerberos,31,"Wrong!\x20Please\x20enter\x20the\x20correct\x
SF:20current\x20password\n")%r(FourOhFourRequest,31,"Wrong!\x20Please\x20e
SF:nter\x20the\x20correct\x20current\x20password\n")%r(LPDString,31,"Wrong
SF:!\x20Please\x20enter\x20the\x20correct\x20current\x20password\n")%r(LDA
SF:PSearchReq,31,"Wrong!\x20Please\x20enter\x20the\x20correct\x20current\x
SF:20password\n")%r(SIPOptions,31,"Wrong!\x20Please\x20enter\x20the\x20cor
SF:rect\x20current\x20password\n");

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 98.38 seconds

发现 31790 和 31518支持openssl

  • Solution 2

根据题目描述,我们需要扫描 localhost 上 31000 到 32000 范围内的端口,并找出哪些端口有服务器监听,哪些端口支持 SSL。

使用以下命令可以扫描这些端口:

1
for port in {31000..32000}; do echo -ne "\rScanning port $port "; timeout 1 bash -c "</dev/tcp/localhost/$port" &>/dev/null && echo "PORT $port is open"; done

在这个命令中,我们使用了一个 for 循环来迭代端口号。</dev/tcp/localhost/$port 表示用 Bash 的 I/O 重定向机制将 /dev/tcp/localhost/$port 文件作为输入文件,timeout 1 命令表示在 1 秒钟内执行完该命令,如果连接成功则说明该端口是开放的。

执行完该命令后,输出结果会告诉你哪些端口是开放的。接下来,我们需要找出哪些端口支持 SSL。

使用以下命令可以检查某个端口是否支持 SSL:

1
echo QUIT | openssl s_client -connect localhost:PORT

在这个命令中,QUIT 表示发送一个 QUIT 消息给服务器以结束 SSL 会话,openssl s_client 命令表示建立一个 SSL 连接。

将其中的 PORT 替换成具体的端口号,执行该命令后,输出结果会告诉你该端口是否支持 SSL。

如果只有一个服务器提供下一个凭据,那么我们需要找出这个服务器监听的端口,并且该端口支持 SSL。然后,将当前级别的密码提交给该服务器即可获取下一级的凭据。

tip5

find -size 33c -user bandit7 2>/dev/null

这个命令的作用是在当前目录下查找文件大小为 33 字节且属主为 bandit7 的文件,并将错误信息重定向到 /dev/null。

更具体地说,find 命令用于在指定目录下查找文件或目录。-size 33c 选项表示查找大小为 33 字节的文件,-user bandit7 选项表示查找属主为 bandit7 的文件。最后的 2>/dev/null 选项表示将错误信息输出到 /dev/null 文件中,即不显示错误信息。

执行该命令后,如果有符合条件的文件,则会输出该文件的路径,否则不会有任何输出。


shell学习
http://example.com/2024/01/13/shell学习/
作者
WHC
发布于
2024年1月13日
许可协议