本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程
1. 简介
-
危害
如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用于上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷。
-
漏洞成因
- 导致文件上传的漏洞的原因较多,主要包括以下几类
- 服务器配置不当
- 开源编辑器上传漏洞
- 本地文件上传限制被绕过
- 过滤不严或被绕过
- 文件解析漏洞导致文件执行
- 文件路径截断
2. 漏洞成因
-
服务器配置不当
当服务器配置不当时,在不需要上传页面的情况下便可导致任意文件上传,参见HTTP请求方法(PUT)。
-
开源编辑器上传漏洞
很多开源的编辑器历史上都有不同的上传漏洞,包括但不只限于CKEditor,CKEditor的文件上传漏洞参见CKEditor。
-
本地文件上传限制被绕过
只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改数据包就可以轻松绕过限制。
-
过滤不严或被绕过
- 有些网站上使用了黑名单过滤掉了一些关键的可执行文件脚本后缀等,但黑名单不全或者被绕过,导致可执行脚本文件被上传到服务器上,执行。
- 如在服务器后端过滤掉了后缀为.php的文件,但并没有过滤掉.php3等其他可执行文件脚本后缀,攻击者就可以上传带有其他的可执行文件脚本本后缀的恶意文件到服务器上。
- 在某些情况下由于管理员错误的服务器配置(将.html后缀的文件使用php进行解析等)会导致.html、.xml等静态页面后缀的文件也可被执行。
- 在上传文件保存磁盘为NTFS格式时可通过::$DATA绕过黑名单限制,参见NTFS中的ADS的一些问题[欢迎一起讨论,求思路求方法]。
- 有时服务器只对第一个被上传的文件进行了检查,这时通过同时上传多个文件并将恶意文件掺杂进其中也可绕过服务器的过滤。
-
常用脚本后缀
php php2 php3 php5 phtml asp aspx ascx ashx cer jsp jspx