免责声明
本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动,包括但不限于未经授权访问计算机系统、网络或数据。
作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何责任。包括但不限于因使用本文所述技术而可能导致的法律诉讼、财产损失、隐私泄露或其他任何形式的责任。
在进行任何渗透测试或安全研究之前,请确保您已获得所有必要的授权,并遵守适用的法律和道德准则。未经授权的安全测试可能违反法律,并可能导致严重的法律后果。
本文中的内容仅供参考,不应被视为专业建议。在进行任何安全相关活动之前,建议咨询具有相应资质的专业人士。
作者保留对本博客文章的所有权利,并有权在未经通知的情况下进行修改或删除。
正文部分
0x00 环境简介与环境搭建
0x00-1 环境简介
序号 | 服务器 | 角色 | 网络位置 | 系统处理器架构 | IPv4 地址 |
1 | Kali GNU/Linux Rolling | 渗透机器 | 边缘 | x86_64 | 8.27.11.7 |
2 | Ubuntu | 目标服务器 | 边缘 | ? | ? |
3 | Windows Server 2008 | 目标服务器 | 内网 | ? | ? |
4 | Windows 7 | 目标服务器 | 内网 | ? | ? |
0x00-2 环境搭建
0x01 探索发现阶段
0x01-1 主机发现
0x01-2 端口扫描
0x01-3 服务探测
0x01-4 识别 2001 端口的 Web 应用框架及版本
0x01-5 识别 2002 端口的 Web 应用框架及版本
0x01-6 识别 2003 端口的 Web 应用框架及版本
0x01-7 探索发现阶段总结
在探索发现阶段中,通过 nmap 工具识别到 Web 服务器开启了 4 个端口,其中 22 端口为 SSH 服务的默认端口,而 2001端口、2002端口和 2003 端口分别对应了三个不同的 HTTP 服务,通过识别 2001、2002、2003 端口的 Web 应用框架,得出三个 Web 服务的框架分别为 Struts2 框架、Tomcat 框架、phpMyAdmin 框架,2003端口对应的 Web 服务使用的 MySQL 版本为 5.5.62,由于 2001端口、2002 端口和 2003 端口比较特殊,猜测这三个 Web 服务部署在 Docker 容器中
0x02 入侵和感染阶段
0x02-1 使用 Struts2 漏洞检测工具对 Web 应用进行漏洞测试
0x02-1.1 检测漏洞
0x02-1.2 利用漏洞上传 webshell
0x02-1.3 使用冰蝎连接 webshell
0x02-2 使用 Tomcat 框架漏洞对 Web 应用进行漏洞测试
0x02-2.1 修改数据包
Tomcat 存在任意上传漏洞,使用 BurpSuite 任意拦截一个数据包进行测试。将请求方式修改为 PUT,内容类型修改为表单默认的提交数据格式,内容为冰蝎 jsp 类型的 webshell,当返回包状态码为 201 时,代表上传成功,接下来访问 shell.jsp,确保 webshell 成功上传
0x02-2.2 访问 webshell 文件
成功访问到 shell.jsp,页面显示空白代表文件存在,下面使用冰蝎连接 webshell
0x02-2.3 使用冰蝎连接 webshell
0x02-3 使用 phpMyAdmin 应用漏洞对 Web 应用进行漏洞测试
0x02-3.1 利用框架历史漏洞
版本为 4.8.1 的 phpMyAdmin 应用框架存在任意文件包含漏洞,利用这个漏洞查看系统中的敏感文件
0x02-3.2 查询当前目录路径
在 phpMyAdmin 中进行查询时,会将查询语句保存至一个临时文件,临时文件名为 sess_ 加上 Cookie 值,Cookie 值获取的方式有很多,这里使用最简单的方式进行获取
0x02-3.3 利用文件包含漏洞包含临时文件
发现当前目录为 /var/www/html,可以考虑将 webshell 写入这个目录
0x02-3.4 构造创建 webshell 文件的 PHP 代码
select <?php echo `echo "<?php eval(base64_decode(冰蝎马base64加密内容));?>" > /var/www/html/shell.php`;?>
再次包含临时文件使 PHP 代码执行,从而生成 webshell 到 /var/www/html 目录下
0x02-3.5 使用冰蝎连接 webshell
0x02-4 识别 Web 应用服务器环境
为了验证之前的猜想,接下来在三个 Web 服务器中查询 docker 容器的特征文件 —— .dockerenv 文件,经过查询后发现三台 Web 服务器都处于 docker 容器中,因此需要从容器中逃逸到物理主机,为后续的内网渗透做准备,接下来需要使用 cdk_linux_amd64 工具检测 docker 容器是否存在可逃逸的条件,所以先将工具上传至目标服务器。
正常情况下需要先对 docker 的处理器架构信息进行收集,根据处理器架构类型上传对应的工具。由于 docker 容器和宿主机公用同一个内核,即 docker 容器的处理器架构和宿主机的大多完全相同,当然也存在借助其他工具实现不同处理器架构运行在宿主机上的情况
工具下载地址:https://github.com/cdk-team/CDK/releases/tag/v1.5.4
0x03 攻击和利用阶段
0x03-1 逃逸 Struts2 应用容器
经检测,并未发现 Struts2 应用容器存在可逃逸条件
0x03-2 逃逸 Tomcat 应用容器
0x03-2.1 检测容器漏洞
发现 Tomcat 应用容器存在可逃逸条件,由于获取到此容器的权限为 root 权限,所以尝试将物理机的根目录挂载至容器的临时目录
0x03-2.2 尝试将宿主机根目录挂载至容器临时目录
可以发现成功将宿主机根目录挂载到了容器的临时目录,并且路径为 /tmp/5ijds,接下来就需要和宿主机之间建立连接
0x03-2.3 生成 SSH 密钥用于 SSH 连接
生成 SSH 密钥,公钥和私钥都保存至 /root/.ssh/ 目录下
将公钥写入宿主机,私钥拷贝至一台 Windows 服务器
使用 MobaXterm 远程连接工具进行 SSH 连接
成功连接至目标服务器宿主机
0x03-3 逃逸 phpMyAdmin 应用容器
经检测,并未发现 phpMyAdmin 应用容器存在可逃逸条件
0x03-4 配置内网代理
0x03-4.1 查看 Web 服务器是否存在内网环境
0x03-4.2 生成木马上线 Web 服务器
查看宿主机处理器架构
生成对应的木马程序
将木马上传给目标服务器
配置监听器
0x03-4.3 添加路由
0x03-4.4 开启 SOCKS 代理服务
msf6 exploit(multi/handler) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > options
msf6 auxiliary(server/socks_proxy) > run
0x04 探索感知阶段
0x04-1 查看宿主机 arp 表
0x04-2 扫描内网主机端口及服务
将扫描结果导出为 Excel 表格,发现主机 192.168.183.130 开放了 389 端口,一般只有域控服务器才会开启这个端口,并且发现内网两台机器都开启了 445 端口的 SMB 服务,可以尝试利用 MS17-010 漏洞对其进行检测
0x05 传播阶段
0x05-1 对域控服务器 445 端口的 SMB 服务进行漏洞检测
检测到漏洞存在,但利用失败,猜测可能是由于 MSF 代理不稳定导致,尝试切换代理工具
0x05-1.1 在 Web 服务器上开启 SOCKS 代理服务
0x05-1.2 再次尝试利用域控服务器 SMB 服务的 MS17-010 漏洞
依旧利用失败,尝试利用内网中另一台主机的 MS17-010 漏洞
0x05-1.3 尝试利用域成员主机 SMB 服务的 MS17-010 漏洞
域成员主机成功上线至 MSF,并且接收到的会话用户权限为系统权限
0x05-2 收集域内信息
0x05-2.1 查询域名
0x05-2.2 查询域内主机名
0x05-2.3 查询域控主机名
0x05-2.4 查询完整域名
0x05-2.5 确定域控 IPv4 地址
0x05-2.6 查询域内用户
由于当前权限为系统权限,因此无法获取到域内用户的信息,此时需要将权限降低至域用户权限
0x05-2.6-i 查询域用户进程
0x05-2.6-ii 降低权限至域用户
0x05-2.6-ii 查询域内用户
0x05-3 获取域用户 SID
域用户 demo/douser 用户的 SID 为 S-1-5-21-979886063-1111900045-1414766810-1107,那么就可以得到域 SID 为 S-1-5-21-979886063-1111900045-1414766810
0x05-4 收集域成员机器系统信息以及补丁信息
发现域成员主机没有打 MS14-068 漏洞的补丁,漏洞编号为 KB3011780,因此尝试利用 MS14-068 漏洞将权限提升至域管理员权限
0x05-5 获取域成员主机凭据信息
回到 meterpreter 执行 rev2self 恢复至系统权限
获取当前主机域用户密码,为后面利用 MS14-068 漏洞做铺垫
由于靶机中在桌面放置了 mimikatz.exe 和 MS14-068 漏洞利用工具,所以可以直接使用,若是在实战中,就需要自己上传工具进行渗透,当然也可以将靶机中的工具保存下来
由于当前权限为系统权限,因此不需要进行提权,直接使用命令 mimikatz.exe "sekurlsa::longonpasswords" exit 获取系统中用户密码
0x05-6 利用 MS14-068 漏洞伪造票据
0x05-6.1 ms14-068.exe 使用方法
0x05-6.2 构造 Payload 生成票据
0x05-6.3 使用 mimikatz 清理主机所有凭证
0x05-6.4 查看当前机器凭证信息
0x05-6.5 注入票据至内存中
0x05-6.6 查看当前机器凭证信息
0x05-7 尝试与域控服务器建立连接
0x05-7.1 与域控服务器建立网络共享资源连接
0x05-7.2 列出该计算机 C 盘根目录下的文件和文件夹信息
0x05-8 夺取域控服务器控制权
0x05-8.1 关闭域控服务器防火墙
0x05-8.1-i 创建关闭防火墙服务
0x05-8.1-ii 执行关闭防火墙任务
这里应该是 sc \\win-ens2vr5tr3n start unablefirewall
0x05-8.2 上线域控服务器至 MSF
0x05-8.2-i 生成正向木马
0x05-8.2-ii 将木马上传至域成员机器
0x05-8.2-iii 将木马拷贝至域控服务器
0x05-8.2-iv 创建执行木马任务
0x05-8.2-v 执行木马程序
0x05-8.2-vi 配置监听器上线域控服务器
0x06 持久化和恢复阶段
0x06-1 降低权限至域管理员权限
0x06-2 生成黄金票据
0x06-2.1 抓取 NTLM Hash
0x06-2.2 获取黄金票据
0x06-2.2-i 返回域成员机器清空票据
0x06-2.2-ii 生成黄金票据
0x06-2.2-iii 导入黄金票据
0x06-2.2-iv 查看域成员票据
0x06-3 创建定时任务维持权限
0x06-3.1 编写 Shell 脚本
0x06-3.2 创建定时任务
0x06-3.3 测试脚本是否定时执行
0x06-4 恢复阶段
恢复主要涉及对 webshell 以及上传的各类文件的删除等操作。通过删除 webshell、删除各类上传病毒以及清除系统日志,达成清理攻击痕迹的目的
0x06-4.1 清理 Windows 系统的攻击痕迹
0x06-4.2 清理 Linux 系统的攻击痕迹
这里没有全部删除,还有 docker 逃逸时用到的工具,php 文件类型的 webshell 等痕迹