前言
本文围绕 Qingmei 靶场的实操过程展开,详细记录从初始的端口扫描定位攻击面,到突破匿名登录限制、获取 Bash 交互环境,再到完成 Shell 环境逃逸与多维度用户提权的全流程。
正文
1、端口扫描
bash
nmap -sV -v -T4 -A 192.168.31.159
发现开放22和80端口:

80端口访问后,没啥有用信息:

2、匿名用户登录
目光转到22端口上,随机一个用户SSH远程登录上去试试:
bash
ssh a@192.168.31.159

有提示正确的用户名和密码,通过用户名guest和密码guest进入web交互界面:

3、Bash 交互环境获取
!bash发现没有回显,且终端像卡了一样,说明有些比赛题对用户的bash行为是限制的。
- 💡 为什么是 ! 开头?
程序会过滤普通输入,但对!开头的内容放行,把后面的内容当成系统命令执行。当你输入!sh,它就会执行os.system("sh"),直接启动一个shell进程,所以你能看到命令回显、可以执行系统命令了。
方法(1):修改bashrc
通过命令!sh进入shell交互界面:

tail 命令默认查看文件的最后 10 行,查看当前用户主目录下的 .bashrc 文件:

方法(2):强制TTY登录
强制 SSH 给你分配一个伪终端:
bash
ssh guest@192.168.31.159 -t ssh
4、Shell 环境逃逸
原来的流程:SSH 登录 → 自动执行 .bashrc → less banner → exit → 会话直接关闭,拿不到 Shell。
修改后的流程:SSH 登录 → 自动执行 .bashrc(只剩系统默认配置,没有自动退出代码) → 正常进入 Bash 交互环境,拿到用户权限的 Shell。
所以我们要删掉less banner,两种删除法:
bash
# 从倒数第2行到最后一行全部删除
sed -i '$d;$d' .bashrc
# 或者直接匹配删除这两行
sed -i '/less banner/d;/exit/d' .bashrc

重新ssh登录,拿到guest用户权限:

5、用户提权
进去之后发现有个morri用户:

方法(1)用户密码爆破
hydra工具尝试爆破一下:
bash
hydra -l moir -P pass.txt ssh://192.168.31.159 -v -t 1 -e nsr
| 参数 / 部分 | 作用说明 |
|---|---|
hydra |
Kali Linux 中常用的暴力破解工具,支持 SSH、FTP、HTTP 等多种协议 |
-l moir |
指定要破解的用户名:moir(小写 L) |
-P pass.txt |
指定密码字典文件:pass.txt(大写 P),Hydra 会按文件里的每一行密码尝试登录 |
ssh://192.168.31.159 |
目标服务和地址:SSH 协议,IP 为 192.168.31.159,默认端口 22 |
-v |
显示详细输出(Verbose),能看到每一次尝试的结果 |
-t 1 |
线程数设为 1,每次只进行 1 次登录尝试,避免触发目标的防暴力策略(如 IP 锁定) |
-e nsr |
附加测试模式,包含 3 种特殊规则: - n:尝试空密码 - s:尝试用户名本身作为密码 - r:尝试用户名倒序作为密码(如 moir → riom) |
爆破完发现密码就是用户名本身:

方法(2)命令执行
进到/opt目录下,发现有个morri_password:

执行程序/morri_password,查看帮助-h,拿到用户名权限:

当然也可以按照程序要求生成随机的字母A:
bash
perl -le 'print "A"x41'
| 部分 | 作用说明 |
|---|---|
perl |
Perl 编程语言的解释器,很多 Linux 系统默认自带,常用来快速执行一行脚本 |
-le |
两个常用参数的组合: - -l:自动在输出末尾加上换行符 - -e:直接执行后面引号里的 Perl 代码 |
'print "A"x41' |
Perl 代码本体: - print:输出内容 - "A"x41:Perl 里的字符串重复语法,意思是把 "A" 这个字符重复 41 次 |

进去后,查看并执行可执行的权限:

进入后发现Nano编辑器,里面有root.txt,成功获取flag:

nano 常用操作:
| 快捷键 | 作用 |
|---|---|
Ctrl + O |
保存文件(Write Out) |
Ctrl + X |
退出编辑器(Exit) |
Ctrl + K |
剪切当前行 |
Ctrl + U |
粘贴剪切的内容 |
Ctrl + W |
搜索文本 |
Ctrl + C |
显示当前光标位置 |
方法(3)nano漏洞利用
进入Nano编辑器后,先依次输入Ctrl+R 、CTRL+X,然后输入命令:
bash
reset; sh 1>&0 2>&0
拿到root用户权限:

成功拿到flag。
方法(4)nano文件管理器内置快捷键登录
通过终端文件管理器nano的内置快捷键S功能,进入shell:
