大家好,又见面了,我是你们的朋友全栈君。
文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。
上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传的文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。如果上传的文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为。如果上传的文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。如果上传的文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。甚至攻击者可以直接上传一个webshell到服务器上 完全控制系统或致使系统瘫痪。
大部分的网站和应用系统都有上传功能,而程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。
一般来说文件上传过程中检测部分由客户端javascript检测、服务端Content-Type类型检测、服务端path参数检测、服务端文件扩展名检测、服务端内容检测组成。但这些检测并不完善,且都有绕过方法。
客户端检测绕过(js检测): 利用firebug禁用js或使用burp代理工具可轻易突破。
服务端MIME检测绕过(Content-Type检测): 使用burp代理,修改Content-Type的参数
服务端扩展名检测绕过: 文件名大小写绕过,例如Php,AsP等类似的文件名 后缀名字双写嵌套,例如pphphp,asaspp等 可以利用系统会对一些特殊文件名做默认修改的系统特性绕过 可以利用asp程序中的漏洞,使用截断字符绕过 可以利用不再黑名单列表中却能够成功执行的同义后缀名绕过黑名单的限制 可以利用解析/包含漏洞配合上传一个代码注入过的白名单文件绕过
服务端内容检测绕过: 通过在文件中添加正常文件的标识或其他关键字符绕过
文件加载检测绕过,针对渲染加载测试 代码注入绕过,针对二次渲染测试
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。 若一个文件名abc.x1.x2.x3,Apache会从x3开始解析,如果x3不是一个能解析的扩展名,就往前解析x2以此往复,直到能遇到一个能解析的文件名为止。
在test.asp/ jkl , IIS 的某些版本中会直接当成asp来解析; test.asp;jkl ,IIS某些版本也会按照asp 来解析;任意文件名/任意文件名.php,IIS 某些版本会直接当php来解析。 IIS6.0 在解析 asp 时有两个解析漏洞,一个是如果任意目录名包含 .asp 字符串,那么这个目录下的所有文件 都会按照 asp 去解析,另一个是文件名中含有 asp; 就会优先当作 asp 来解析。 IIS7.0/7.5 对php解析有所类似于 Nginx 的解析漏洞。只要对任意文件名在url后面追加上 字符串 / 任意文件名.php 就会按照php去解析。 例如,上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php
将shell语句,如<?PHP fputs(fopen(‘shell.php’,’w’),'<?php eval($_POST[cmd])?>’);?> 写在文本xx.txt中(或者shell语句直接写一句话木马,用菜刀、cknife等直连,只是容易被查杀),然后用命令将shell语句附加在正常图片xx.jpg后copy xx.jpg/b + xx.txt/a test.jpg 上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php 。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125126.html原文链接:https://javaforall.cn