一、最低等级(无任何防御)
攻击方流程:
1. 攻击者找到目标网站具有文件上传功能的页面,例如用户头像上传、文档上传等。
2. 准备恶意文件,常见的有 WebShell(如 PHP、ASP、JSP 等脚本文件)。
3. 直接上传恶意文件,若服务器没有任何检查,文件将被成功上传到服务器指定目录。
4. 攻击者通过各种方式找到上传文件的路径,尝试访问该文件,从而获得对服务器的控制权限。
二、添加简单防御
防御方措施:
1. 检查文件扩展名:只允许特定的文件扩展名上传,如图片格式(.jpg、.png、.gif 等)。
攻击方绕过流程:
1. 文件名伪装:将恶意文件的扩展名改为允许上传的扩展名,例如将“evil.php”改为“evil.jpg”。
2. 利用文件头欺骗:修改恶意文件的文件头,使其看起来像合法的图片文件。但文件内容仍然是恶意脚本。
三、加强防御
防御方措施:
1. 结合文件内容检测:不仅仅检查文件扩展名和文件头,还对文件内容进行分析。例如,检查文件中是否包含特定的恶意脚本关键字或特征码。
2. 随机化存储路径:上传的文件存储在随机生成的目录中,增加攻击者找到文件路径的难度。
攻击方绕过流程:
1. 代码混淆:对恶意脚本进行混淆处理,使得关键字和特征码难以被检测到。
2. 利用文件包含漏洞:如果服务器存在文件包含漏洞,攻击者可以上传一个合法的文件,但通过构造特定的请求,利用文件包含漏洞来执行恶意代码。
四、进一步加强防御
防御方措施:
1. 白名单机制:只允许从预先确定的可信来源上传文件,或者只允许特定类型的文件上传,严格限制可上传的文件范围。
2. 实时监测:对上传文件的行为进行实时监测,一旦发现异常行为(如大量文件上传、可疑文件类型上传等),立即采取措施,如暂停上传功能、报警等。
攻击方绕过难度增加:
随着防御措施的不断加强,攻击方绕过的难度越来越大,需要不断寻找新的漏洞和攻击方法。但总体来说,良好的防御措施可以大大降低文件上传攻击的风险。