HTB PivotAPI - 疯狂难度、复杂域渗透和逆向启蒙靶机

笔记目录:

1、环境介绍

kali攻击机IP地址

靶机IP地址

2、信息收集

nmap四扫

-sT 指定TCP协议扫描

为方便后续操作,格式化扫描结果

-sV 探测各服务的版本
-sC 用默认脚本进行扫描
-O 操作系统扫描

从上面所知,暴露出很多有价值的信息,是一台域控制器,比如:ftp服务器暴露出可以匿名登陆和相关文件,389端口服务版本信息上暴露出两个域名信息

为便于资源访问,在域渗透的时候,要把域名写进攻击机的hosts文件中

但有可能还有的域名没有暴露出来,可以进行下一步的区域传输,但一般靶机是不会开放的,因为是重大漏洞,所以这里暂时就没有必要

-sU 指定UDP协议扫描

--script=vuln 默认漏洞脚本扫描

除了各项服务的识别,并没有识别出明确的漏洞

3、初步尝试登陆

ftp匿名登陆拿文件

-m 相当于一个快捷指令
这里密码可以为空

查看下载的文件,莫名的文件最好不要直接打开,可以先遍历一下,使用exiftool

渗透时,对于文件名,作者名都要敏感

提取敏感用户名信息

gerp:
 -i 忽略大小写
 -v 反向查找,不包含某某某
 -E 启动扩展模式正则表达式
awk -F 用“:”分割,打印第二列
uniq 重复的删除掉
tail -n 显示结尾的n行内容
sort 排序
tee 保存起来

查看文档、文件

大多都是堆、堆栈、缓冲区溢出等资料
通过ftp的渗透,现在我们唯一能明确的就是得到了一组用户名,

试图从smb服务进行探测

验证445端口的状态

收集smb共享的信息

检测到一个SMB,同时也建立了session,但是有session是错误的,访问拒绝,认证失败

看能否列出
-N 指定空密码

从以上得知SMB再没有用户凭据的情况下无妨访问

试图从用户名进行暴力破解

在域渗透的情况下,拿到用户名,一定要想到可以暴力破解

看一下rpc能否匿名访问
-U 指定用户名
-N 密码

枚举域用户,显示拒接访问

查找域信息,同样拒绝访问

可以得知没有凭据的情况下,都是拒绝的

4、域渗透

kerbrute 是一个快速暴力破解或枚举有效的活动目录账号,是通过kerberos协议域验证方式

Mac M芯片编译


在后面追加arm64

编译运行,发现没有go命令,安装

再次编译,自动从github下生成适合M芯片的程序

枚举用户


--domain 指定域
--dc 目标
-t 线程
后面指定字典

补充到之前的用户列表中

尝试GetNPUsers.py

看一下能否获取到有效用户名的TGT,这个尝试我们要用到impacket框架中的GetNPUsers.py脚本工具
工具介绍:查询目标域,找到不需要域认证的用户,导出TGT以供破解

更新搜索数据库

搜索,并设置环境变量
-i 忽略大小写

-no-pass 不要请求密码
-dc-ip 目标
-usersfile 指定用户列表

获得到一个用户的Hash

破解Hash

试图用前面关键字筛选,因为前面一般是根类型相关的
-i 忽略大小写

hashcat 暴力破解,很快明文就破解出来了:Roper41555


用john也同样,让他自己指定类型
-w 字典

尝试进行登陆

使用ssh进行登陆

不对,但可以看到,kaorz是可以进行密码登陆的,可能kaorz没有ssh的权限账号,或者密码不对

使用kerbrute中的GetNPUsers.py脚本
域名/用户:密码

没有记录被找到,就是说kaorz不与SPN相关,

使用数据库进行登陆



用户kaorz登陆错误,就是说这个用户权限不够

尝试用bloodhound查看这个用户的攻击路径
安装bloodhound

初始化数据库
sudo neo4j restart

bloodhound-python 域信息采集器
-c 采集类型
-u 用户名
-p 密码
-d 域名
-dc 域库
-ns 目标
--zip 打包

unzip -l 不解压列出里面类容

启动数据库主程序,导入刚刚采集的数据压缩包文件


查看我们已经拿下的资产KAORZ,所知它不能控制任何其他目标

查看整个域的信息,也没有

再次查看smb共享

之前用匿名用户没有任何结果,这次用我们kaorz这组用户尝试登陆

建立了一个session会话,但还是不能访问本地变量‘priv_status',不能映射出共享信息

可能是我们应用问题,看提示不太像,试试其他的交叉验证
-shares 列出共享

通过上面,发现几个可以读的共享,便用smbclient查看,有文件就下载出来

5、敏感文件分析

查看得知是Outlook的邮件信息,尝试进行读取

使用转换器msgconvert工具,使用xdg-open打开


还有个exe的文件,先用file查看文件原数据

查看文件内容


ldd 查看是否有链接库的情况

6、逆向分析


打开文件,查看得知需要动态逆向

这里我们把文件复制到windows 下,使用Sysinternals套件



可以捕捉到系统所有系统行为,注册表、文件、网络、进程等

过滤出与我们相关的文件信息

执行文件

查看到总共有1355条,可以进行多次清空,执行,确定程序执行完了

查看创建的临时文件,批处理文件

临时文件进行捕捉,持久化,可以进行权限修改,就可以了


拒绝删除子文件和文件

查看临时文件


分析得知,整个文件就是创建一个oracle.txt之后,脚本会写入一个powershell命令到monta.ps1中,这个命令会读取oracle.txt内容,合并所有行,去掉空格,将结果内容Base64解码,并保存二进制文件restart-service.exe中,然后使用powershell脚本执行,并删除

这里我们还是修改一下,做持久化,让删除的文件不再删除,命令删除掉

文件最开始也有限制条件,只允许那3个用户,这里也修改一下,允许全部

执行我们修改过的批处理文件


综合前面情况,我们最想拿到restart-service.exe中的登陆凭据

我们再次拿到kali中分析

查看文件类型,可识别字符

因为太多,我们这里直接进行推断的过滤
-i 不区分大小写

再次使用ghidra静态逆向看一下

查看到MinGW,得知存在一个伪重定义问题,常见于一个动态链接库文件,没有正确配置pseudo-relocation,或者期望进行重新定位,但dll本身没这个消息

再次复制到windows 中进行动态逆向捕捉

进行捕获windows下API调用,函数调用,参数值、函数值的应用
如工具:Process Monitor、API Monitor
使用API Monitor

筛选敏感信息,查找到我们想要的明文信息,copy到kali中


这样通过API Monitor这个逆向工具,获得数据库连接凭据,但是通过之前邮件,我们知道数据库已经升级到MSSQL,但依旧有撞库的可能

打开之前bloodhound,查看

可以看到并没有,svc_oracle这个用户,基本判定这个凭据无效

但是根据根据上面凭据推测命名规则

根据邮件替换年份,这种推测是合理的,验证得知,我们推测是正确的

尝试通过新的svc_mssql用户和凭据进行登陆

尝试拿到系统立足点,但失败

尝试数据库,失败

猜想有可能svc_mssql就是系统用户,并非数据库用户,这时候我们应该想到之前逆向的时候bat文件中的用户,但你更应该想到mssql默认的用户密码

尝试通过默认用户sa登陆mssql数据看

搜索得知mssql的默认用户为sa

登陆成功

尝试看看是否可以激活cmdshell

可以看到是已经激活了系统shell
查看一些系统信息systeminfo

看当前用户有哪些权限

可以看到SeImpersonatePrivilege权限可以在windows10或2019上进行提权

完全值得尝试,但我们先进行域渗透的方式进行渗透,最后再进行这个
查看用户

查看svc_mssql用户的详细信息

查看内部服务是开放

mssqlproxy代理

mssqlproxy是一个工具包,旨在通过套接字重用在受限环境中通过受损的Microsoft SQL Server执行横向移动。客户端需要在SQL服务器上具有impacket和sysadmin权限。
得知我们现有sa的用户是满足条件的

将这个库克隆到本地

根据github上工具帮助视频教程,先要激活ole,然后上传动态文件

然后结束这个数据库的shell,继续根据视频走

现在需要一个连接库assembly.dll,但目前只有assembly的源码文件,需要进行编译,我们没有编译环境,就回到github看看有没有现成的


这里我们直接拿到编译文件

继续安装mssqlproxy的帮助视频走

-reciclador 指定刚刚传到靶机中的文件连接库文件
可以看到1337端口启动监听

看网络状态,是否成功

配置一下proxychains文件

先测试下,看mssqlproxy是否生效,同时可以看到日志有一个新的连接进来

这样我们就可以尝试evil-winrm shell

连接成功,查看相关信息

查看桌面上下载的文件


另一个文件是.kdbx,便可得知Keepass,这是个开源的密码管理工具,里面存的密码
用命令行访问工具kpcli,先安装

现在想让他读取credentials.kdbx数据库文件

发现需要密码,这里还要做一次破解

使用keepass2john生成这个数据库文件中间hash

使用hashcat进行破解,获得密码

现在再回到读取.kdbx文件


获得用户和密码

获取user flag


现在我们要访问DEVELOPERS组,可以发现3V4SiON-->dr.zaiuss-->superfume对下都有完全权限,

所以可以直接改密码

发现这个用户无法使用ssh登陆

所以我们再回到代理监听,进行proxychains连接

再使用dr.zaiuss用户修改superfume用户密码

再登陆superfume用户

查看文件并下载

查看下载的文件

再次进行逆向分析
dnSpy工具 .Net逆向分析终极工具

通过逆向分析,设置断点,获取新的凭据

因为实在jari家目录中获取到的文件,所以我们这里再次尝试

再查看jari的一级控制对象,修改gibdeon和stooormq密码

因为rpc是开放的,我们换另一种登陆方式

验证修改的密码是否生效,成功

查看gibdeon可以给我们哪些攻击路径

我们登陆进去查看哪条路线可能性最大

看哪个可以读LAPS,就可以拿到系统管理员权限

可知,lothbrok用户可以读取LAPS

综合可知,从lothbrok用户提权到administrator

从gibdeon用户修改lothbrok用户密码

读取LAPS工具


读取到administrator凭据

验证administrator凭据
通过之前的信息,查看到语种不一样,所以这里administrator的拼写是administrador

证明已经拿到了管理员权限

获取系统flag

查看通过哪种方法获得shell
SSH不行

WinRM也不行

使用psexec.py,是先通过SMB共享,再目标攻击机上创建一个会话,然后上传可执行文件,再启动这个会话

查找flag

渗透测试成功!!!!

补充

最开始我们看到数据库mssql的默认用户为sa有SeImpersonatePrivilege权限

尝试激活cmdshell,就是这个权限

准备工具




运行mssql_shell.py脚本

成功,现在就可以尝试上传利用文件

利用,报错,应该是系统限制了