DVWA靶场之文件上传通关详解
原理
文件上传漏洞是应用程序在处理用户上传的文件时没有对文件进行合理的检查和过滤,而恶意文件由攻击者伪造成合法文件,从而骗过应用程序进行上传和执行恶意代码。
存在原因
开发人员没有对用户上传的文件进行充分的验证和过滤。攻击者可以通过构造恶意文件,利用上传漏洞将其上传到服务器,从而获取敏感信息或者在服务器上执行恶意代码。
防御措施
- 文件名过滤:对于上传的文件名进行过滤,只允许合法的字符出现在文件名中。例如,只允许使用字母、数字、下划线等字符,禁止使用"."等特殊字符。
- 文件扩展名过滤:在上传文件时,对文件的扩展名进行验证与过滤。例如,只允许上传特定类型的文件,比如图片、文本、压缩包等,禁止上传危险的脚本文件。
- 文件类型验证:检查上传文件的MIME类型是否合法,只允许上传符合预期的文件类型。
- 文件大小限制:限制文件的上传大小,避免上传过大的文件,从而防止服务器资源被枯竭。
- 权限设置:通过控制上传目录的权限来限制用户上传文件的位置和可访问性,从而确保文件上传后只能被授权用户访问。
- 检查上传文件:对用户上传的文件进行检查,检测是否包含恶意的内容、病毒或者木马程序。
- Web应用防火墙:通过安装Web应用防火墙(WAF)来检测上传的文件,过滤掉异常请求和非法文件上传。
突破方式
- 修改文件后缀名:攻击者可能会将恶意文件重命名为合法文件的后缀名,例如将.php文件改为.jpg文件,以此骗过文件类型检测。
- 绕过客户端验证:前端验证是指在用户上传文件之前对文件类型、大小等进行验证。攻击者可以通过修改前端代码或使用开发者工具绕过前端验证,上传恶意文件。
- 绕过服务端验证:后端验证是指在文件上传完成后,对文件进行类型、大小等检测。攻击者可以通过构造特殊的文件格式或使用一些已知漏洞进行绕过,从而上传恶意文件。
- 空字节注入:攻击者通过在文件名中插入空字节(\0)来欺骗文件处理过程,使处理程序不识别文件扩展名,从而导致恶意文件被成功上传。
【Low】级别
通过查看该等级的源码,可以看到该等级对上传的文件没有任何限制和过滤,存在明显的上传漏洞,成功上传后就会显示出路径+successfully uploaded 上传失败则会提示your image was not uploaded。
上传一个包含一句话木马的php(<?php @eval($_POST['123456']); ?>),我们可以发现上传成功。注:@表示后面即使执行错误也不报错;eval()函数表示括号内的语句字符串什么的全都当做代码执行;$_POST['123456']表示从页面中获得123456这个参数数值,即该木马密码为123456。
然后访问dvwa文件中的uploads对应的文件位置D:\phpstudy_pro\phpstudy_pro\WWW\DVWA\hackable\uploads,就可以看到刚刚上传的muma.php已经上传成功。
使用蚁剑连接木马,显示页面如下,说明木马连接成功。
【Medium】级别
将刚刚写的一句话木马文件后缀改为png格式,然后上传,发现上传成功,接着利用工具bp抓包分析。
然后将Content-Disposition的filename文件后缀改回php,然后forward。(由于这里重新做了一次,后面就写的是muma2)
然后可以看到浏览器页面显示muma2.php。
然后打开根目录查看,可以看到刚刚上传的muma2.png文件和修改后的muma2.php文件。
最后使用蚁剑连接,出现如图所示界面,到这里,medium就完成了。
【High】级别
在dvwa中使用前面的方式上传文件,会发现传不上去,这里就需要自己去合成一个新的图片。首先需要准备后缀为png的图片和一句话木马。
在终端使用命令把一句话木马写进图片中。
然后在010中,打开合成后的新图片,拉到最后面,可以看到一句话木马已经在图片中了。
这时再去dvwa中上传合成后的图片,会看到在dvwa中已经把图片成功上传上去了。
最后同之前一样的使用蚁剑连接即可。