文件上传
文件上传的概念:
●.文件上传指用户提交文档到Web服务器平台,是Web系统中最常见的功能之一。
●.文件上传功能本身没有问题,问题是文件被上传到哪里;上传之后,服务器如何处理、解释文件。
文件上传产生的原因:
- 应用程序对上传的文件没有经过严格的合法性检验或者检验函数存在缺陷。
- Web服务器对文件上传路径或位置控制不严格。服务器对所上传文件的读、写、执行、继承权限设计不严格。
入侵服务器的流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-diEyY302-1672497500651)(…/…/…/大三寒假/typora图片/image-20220330101748963.png)]
攻击者的利用方式:
-
前端JS过滤绕过:打扮成符合审核标准(伪装类型)
-
利用BurpSuite改包绕过:
-
修改JS代码绕过
绕过方法:
-
利用BurpSuite改包绕过:
1)将木马的扩展名改为jpg
2).上传jpg文件时利用BurpSuite抓包后,将其扩展名改回.php,然后.上传到服务器。
3)查看是否.上传
4)访问木马文件。 -
修改JS代码绕过
1)利用JS编辑工具(如firebug) 打开JS验证代码
2)在类型中添加.php
-
-
-
文件名过滤绕过
原理:没有完整的文件过滤功能,验证代码通过黑名单的方式
判断文件_上传的类型。攻击者通过黑名单之外的文件类型绕过文件上传验证。
方法:
- If ($type==“php" )
- 可以用PhP、Php等扩展名绕过。
-
Content- Type过滤绕过
-
Content-Type用于定义网页的文件类型和网页的编码。
-
描述文件类型的标准叫MIME。
比如jpg文件为: image/jpeg.
PHP文件为application/octet-stream. -
Content-Type在数据库的请求包头中,可以通过抓包
篡改来绕过。
-
-
文件头过滤绕过
-
getimagesize()函数将测定任何GIF, JPG, PNG,SWF,SWC, PSD,TIFF,BMP,IFF, JP2, JPX,JB2, JPC, XBM或WBMP图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。绕过此函数需要制作图片马。
图片木马制作过程:
- 新建文本文件,内容为"cmd"命名时扩展名为bat。
- 准备图片文件和一句话木马。
- 打开第一步中建的bat文件,用copy命令制作图片木马。
copy ajpg/b+ 1.php/a a1.jpg(b为二进制文件,a为ASCII码文件)
-
-
文件截断上传
使用条件:当PHP版本低于5.3.4时,会把%00作为字符串的结 束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断。
例子:1. shell.php%00.jpg
- 在路径后面加path/test.php%00201909909jpg
构建恶意代码文件-实例
- 一句话木马:<?php phpinfo();?>
- <?php @passthru($_ GET[cmd])?> //passthru一执行外部程序并且显示原始输出。get为接收数据[cmd:参数]
- <?php readfile("/etc/passwd"); echo ''''; ?>//读取文件
-
- <?php passthru("ls -FR / | grep '/$*"); echo '
'; ?>//显示指定目录下的内容,|:连接符 ,grep:正则表达式 ,后面的为指定结束的要求 - <?php @eval($_ GET[cmd]);?>//把字符串变成php代码来执行
- <?php passthru("ls -FR / | grep '/$*"); echo '
上传漏洞防御:
- 服务器端对上传文件的内容和后缀名(扩展名)严格检查或重建。
- 服务器端对上传的文件做MIMETYPE检查。
- 服务器限制上传文件或限制上传的文件或目录权限。
- 服务器端设置文件_上传和读取等操作只能在限定目录或路径中。
- 对上传后的文件内容和文件名进行格式化/加密,不回显文件
名和路径。 - 严格限定从Web客户上可以访问的文件权限。
解析漏洞:
原理:
Web容器存在解析漏洞,导致在解析攻击者恶意构造的文件时, 无论此文件是什么类型,都会执行其中的代码。
危害:
造成服务器被远程控制、网页被篡改、网站被挂马、被安装后门。
* 配合文件上传功能使用
漏洞原理:
Apache解析文件的规则是从右到左开始判断解析,如果遇到Apache配置文件中没有定义的扩展名,就继续往左判断。比如test.php.owf。“.owf” 这种后缀是apache不可识 别解析,apache就会把wooyun.php.owf解析成php.
修复方案:
apache配置文件httpd.conf , 禁止.php.这样的文件执行,配置文件里面加入
-
IIS解析漏洞
- IIS6.0文件名解析漏洞原理:服务器默认不解析’;’ 号后面的内容,因此xx.asp:jpg便被解析成asp文件了。
形式: www.xxx.com/xx.asp;jpg
IIS6.0默认的可执行文件除了asp还包含这3种:
/test.asa、/test.cer. /test.cdx - IIS6.0目录解析原理:服务器默认会把.asp, .asa月录下的文件都解析成asp文件.
形式: www.xxx.com/xx.asp/xx.jpg
- IIS6.0文件名解析漏洞原理:服务器默认不解析’;’ 号后面的内容,因此xx.asp:jpg便被解析成asp文件了。
-
Nginx解析漏洞
原理:
Nginx在解析PHP文件时,PHP的配置文件php.ini默认开启cgi.fix_ pathinfo参数,如果参数值为1 ,则在访问www.XXX.com/x.jpg/x.php时,如果x.php不存在,就会把x.jpg当作PHP文件解析,由此产生了解析漏洞。
方法:
通过文件.上传功能上传-个名字为test.jpg的图片马。然后访问www.xxx.com/test.jpg/.php,就可以利用Nginx解析漏洞进行木马的解析。
修复方案:
1.修改php.ini文件,将cgi.fix_ pathinfo的值设置为0;
2.在Nginx配置文件中添加以下代码:
if (KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (fastcgi script name~…*V.*php) {
return 403;
}//当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。