当前位置:首页 > 百科

完成模拟可信任目录漏洞利用

凌晨两点,完成我盯着屏幕上的模拟报错日志,差点把咖啡泼在键盘上。可信那个被我反复测试的任目模拟靶机,居然在第七次尝试时,录漏真的洞利让我摸到了可信任目录的边。别误会,完成这不是模拟什么黑客帝国式的炫技,只是可信一次关于“信任”本身的漏洞演练——系统里总有些目录被标记为“可信”,而攻击者要做的任目,就是录漏想办法让自己写进去的文件,被当成系统自己人。洞利

可信任目录的完成漏洞,说白了就是模拟权限验证的盲区。系统管理员为了运行效率,可信常常给某些路径开了白名单,比如/var/www/html或者C:\inetpub\wwwroot,认为这些地方只要写入,就一定是经过审批的代码。但问题在于,白名单本身也是由代码实现的,而代码就有逻辑缝隙。我这次模拟用的靶机,它的上传接口只校验了文件后缀和MIME类型,却没校验文件实际内容。于是我构造了一个双扩展名的PHP文件,后缀是.jpg,但内容里藏着一行<?php system($_GET['cmd']);?>。

上传成功的那一刻,系统甚至友好地回了个“文件已保存”的提示。我随即访问那个路径,在URL后面加上?cmd=whoami,屏幕上跳出来www-data。那一刻有点荒诞——我用的工具是开源的,方法是网上公开的,靶机是故意配置弱的,但那种“绕过了信任”的刺激感还是真实的。因为在实际生产环境里,这种漏洞往往不是配置失误,而是开发者的思维惯性:他们默认“可信任目录”里的东西都是安全的,就像默认自家保险箱里不会进贼。

这种漏洞最阴险的地方在于,它不攻击你的密码,不破解你的加密,它只是利用了你的“分类信任”。比如一个CMS系统,管理员上传主题或插件时,文件会被解压到/wp-content/themes/,而这个目录下所有PHP文件都会被服务器执行。如果上传接口没严格过滤压缩包内的文件类型,攻击者就能把恶意PHP藏在一个看似无关的模板文件里。你检查了压缩包的扩展名是.zip,检查了文件大小,甚至扫了一遍文件名,但你不会逐个打开每个PHP文件去读代码——因为那是“可信目录”,你信任了它。

修复的办法其实不复杂,但需要一点反直觉的思维。别把信任放在目录上,要放在内容上。要么对可信任目录内的文件做哈希白名单,任何新写入的文件必须匹配预定义的哈希值;要么干脆取消“可信任目录”这个概念,所有上传内容一律隔离到无执行权限的存储区,再通过内部代理读取。我后来在靶机上试了第二种方案——把上传目录挂载为noexec分区,再用PHP的readfile()去输出图片。那行恶意代码就彻底哑火了,因为它根本没机会被解析执行。

别觉得这只是模拟环境里的游戏。去年某开源商城系统爆出的漏洞,就是攻击者往/uploads/目录塞了个带PHP的图片马,而那个目录恰好被配置成可执行脚本。官方修复补丁就一句话:“移除uploads目录的执行权限。”就这么简单的事,却因为开发时没人想过“自己人会骗自己人”,拖了三个月才被重视。

信任是安全体系里最贵的奢侈品。你可以给防火墙砸钱,给加密算法砸钱,但一旦你告诉自己“这个目录没问题”,那你就亲手给攻击者递上了梯子。模拟环境的好处在于,你能在凌晨两点盯着日志,亲眼看见那行恶意代码是如何堂而皇之走进“信任区”的——那种感觉,比任何安全报告都来得直接。

分享到: