一、文件上传漏洞简述
文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。
文件上传漏洞的利用,一般与web容器的解析漏洞配合在一起,常见的web容器有:IIS,Ngnix,Apache,Tomcat。
防护方法
- 客户端检测:客户端使用JavaScript检测,在文件未上传的时候,就对文件进行验证
注:任何客户端检测都是不安全的,客户端验证是防止用户输入错误,减少服务器开销,而服务端验证才是可以真正防御攻击者
- 服务端验证:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,还可以检测文件是否嵌入恶意代码。
- 白名单与黑名单验证,
- MIME验证
注:MIME类型用来设定某种扩展名文件的打开方式,当具有该扩展名的文件被访问时,浏览器会自动使用指定的应用程序来打开,栗子:GIF图片MIME为image/gif,CSS文件类型为text/css。
- 目录验证 ,就是将接受文件改名和将接收文件的路径随机分配
二、文件上传漏洞实验
上传漏洞的网址:
https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=4822&page=1
1.打开网站,查看源代码
根据源代码所示,上传的文件格式只能为jpg,png的图片格式
1.制作一句话密码<? Php @eval($_POST[‘attack’]) ?>, 存入一个txt文件中,编写完成再将文件格式改为png格式。最后文件名为png
2.将1.png文件上传的网址中,使用burp suit捉包软件拦截,将文件名改为,1.php
将红线下的1.png文件名改为1.php再发送出去。
使用菜刀连接,得到flag