web程序通常会有文件上传功能。只要允许上传文件,就可能存在文件上传漏洞
1.造成原因:
上传文件时,如果服务端代码没有对上传文件格式做编码和过滤,就容易造成任意文件漏洞
上传的脚本有(asp、aspx、php、jsp等)
2.危害
利用恶意脚本控制整个网站、甚至服务器
这个恶意脚本文件,也称webshell,也可将webshell脚本称为一种网页后门
webshell脚本的功能:查看服务器目录、服务器中的文件、执行命令
3.绕过
js检测绕过
常见于用户选择文件上传,若文件后缀不被允许,则弹窗警告,此时文件的数据包并没有发送到服务端,只是客户浏览器使用js对数据包检测
绕过:
1)使用浏览器插件,删除检测文件后缀的js代码,然后上传文件即可绕过
2)首先把需要上传文件的后缀改成允许上传的,如jpg.png等,绕过JS的检测,再抓包,把后缀名改成可执行文件的后缀即可上传成功
文件后缀绕过
是服务端代码中限制了某些后缀的文件不允许上传,但也有允许的文件后缀。
文件类型绕过
文件截断绕过
竞争条件绕过
1.解析漏洞
1)IIS解析漏洞
IIS 6.0在解析又件时仔在以下两个解析漏洞。 ①当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作 asp文件来解析。
②当文件为*.asp;1.jpg时,IIS 6.0同样会以ASP脚本来执行。会忽略分号后面的内容。
在开启 WebDav扩展的服务器后,如果支持PUT、Move、Copy、Delete等方法,就可能会存在一些安全隐患,比如服务器(IIS 6.0 Web容器)支持WebDav,并且存在PUT、Move、Copy、Delete等方法,那么攻击者就可能通过PUT方法向服务器上传危险脚本文件。
2)apache解析漏洞
解析原则:当碰到不认识的扩展名时,将会从后向前解析,直到碰到认识的扩展名为止,若都不认识,就会暴露其源代码。
3)PHP CGI 解析漏洞(Nginx)
攻击者可以上传合法的"图片木马",然后在URL后加上"/xxx.php",就可获得网站的webshell。
加.php会被php解析 修复在php.ini中cgx选项为0/站库分离
2.绕过上传漏洞
1)客户端检测
客户端使用js检测,在文件上传时,就对文件进行验证(低级验证)
绕过:
(1)使用FireBug
是一款开源的浏览器插件,可以让web开发调用HTML、js、AJAX、CSS等前端代码。
删除客户端js验证
(2)中间人攻击
使用burpsuit拦截抓包,将其扩展名进行修改,就可绕过客户端验证
客户端验证是为了防止用户输入错误,减少服务器开销,服务器验证才是真正防御攻击。
2)服务端检测
服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,是否嵌入恶意代码。
服务器验证:
(1)白名单和黑名单验证
扩展名过滤
A 黑名单过滤方式
规定一系列不安全的扩展名,服务端在接受文件后,与黑名单扩展名对比,若两者匹配,则文件不合法
绕过:攻击者可以找从黑名单忽略的扩展名
文件扩展名大小写转换
windows下,文件以“.”或空格作为结尾,系统会自动去除。
B 白名单过滤方式
白名单是定义允许上传的扩展名
(2) 文件类型检测(MIME验证)
mime类型是设定某种扩展名文件打开方式,若具有该扩展名时,浏览器会自动指定的应用程序来打开。像GIF图片mime为image/gif
(3)目录验证
在文件上传时,程序通常允许用户将文件放到指定的目录中。
若指定目录存在,将文件写入目录,不存在先创建后写入。此时可能存在目录解析漏洞。
(4)截断上传攻击
截断类型:PHP %00截断
截断原理:由于00代表结束符,所以会把00后面的所有字符删除
阶段条件:PHP版本<5.3.4,PHP的magic_quotes-gpc为off状态
(5)竞争条件攻击
一些网站的上传逻辑是先允许上传任意文件,然后检查上传的文件是否包含webshell脚本,若包含则删除。
该绕过利用文件上传后和删除文件的一个短的时间差(因为要执行检查文件和删除文件的操作),利用时间差完成竞争条件的上传漏洞攻击。也就是在删除文件前访问该webshell,那么就会创建一个新的webshell。从而绕过改代码限制。
3.修复上传漏洞
1)目录过滤不严,攻击者可能建立畸形目录
2)文件未重命名,攻击者可能利用web容器解析漏洞
3)通过白名单的方式判断文件后缀是否合法
标签:文件,扩展名,漏洞,绕过,解析,上传 来源: https://www.cnblogs.com/moliol/p/15516176.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。