文件上传笔记

文件上传

上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格 的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至 是服务器。

哪里存在文件上传漏洞
导致文件上传漏洞的原因较多,主要包括以下几类:
• 服务器配置不当(iis6.0 put 直接写文件)
• 本地文件上传限制被绕过(javascript验证)
• 服务端过滤不严格被绕过 ()
• 文件路径截断 (0x00) //c语言php字符串都是以/0结尾,例如1.php.jpg,手动在改成1.php%00.jpg,程序认为在/0处已经结束,会忽略%00后面的内容
• 文件解析漏洞导致文件执行(iis,apache,nginx)
• 开源编辑器上传漏洞(fckeditor 自定义文件名,文件夹结合 iis6.0解析漏洞,杀伤力*****
ewebeditor :可以登录后台,配置允许上传的文件类型.asp)

IIS
当iis开启了服务扩展里的webDAV,并且网站属性中支持写入,脚本资源访问
访问网页,用burp抓包修改协议中的GET为PUT并在下面写入要写的代码
在这里插入图片描述
发送请求后,文档创建成功,内容是xxxxxxx,此时就可以在创建时的内容写入一句话木马
因为PUT写入的时候不能写入脚本文件,所以后缀名只能是txt,等写入完成后,用MOVE把文件后缀名改为.php或者.asp结尾。
用MOVE修改文件后缀名时,brup抓取的协议中必须添加一条参数Destination
参数的内容是网站网址与要修改成的文件名,MOVE旁边的文件名不变
在这里插入图片描述
写入完成后用中国菜刀连接

过滤不严格或被绕过
有一些网站使用了黑名单过滤掉了一些关键的可执行脚本文件后 缀。但黑名单不全或者被绕过,比如服务端过滤掉了后缀为 .php的 文件,但是没有过滤掉.php3等其他可执行的脚本文件后缀,攻击者 就可以上传其他的可执行的脚本文件后缀到服务器上。 禁止了php,asp,jsp,但是没有禁止php3,asa,cer,cdx等等

常用的一些可执行的文件脚本后缀:
.php .php2 .php3 .php5 .phtml
.asp .aspx .ascx .ashx
.cer .asa .cdx
.jsp .jspx
.py

• 某些情况下管理员错误的服务器配置会导致.html、.xml等静态页面 后缀的文件也可被执行。
• 多文件上传时,有时服务器只对第一个上传的文件进行了检查,这 时通过上传多个文件并将恶意文件掺杂进其中也可绕过服务器的过滤。

文件路径截断
在上传的文件中使用一些特殊的符号,使得文件被上传到服务器中时 路径被截断从而控制文件路径。
常用的进行文件路径截断的字符如下:
• \0
• ?
• %00
在可以控制文件路径的情况下,使用超长的文件路径也有可能会导致文 件路径截断。asdfasdfasdfasdfasdasdfasdf.jpg

利用
• 找到上传点,上传正常文件
•再次尝试上传脚本文件
•上传成功,访问上传的脚本文件
• 上传失败,采取过滤绕过方法

漏洞挖掘
• 查找上传点,图片,附件,头像等等
• 目录、文件扫描发现 类似upload.php等文件
• 目录、文件扫描 编辑器目录如ewebEditor、fckeditor、 kingeditor。

文件上传漏洞防御
• 上传文件的存储目录不给执行权限
• 文件后缀白名单,注意0x00截断攻击(php5.2x版本更新到最新版本)
• 不能有本地文件包含漏洞(include dama.jpg)
• 及时更新web应用软件避免解析漏洞攻击

文件上传绕过
1.用审查元素删去验证文件后缀名的函数
2.上传一个正常的图片,用burp抓包,把后缀名改成php //内容头部加上GIF89a

后端检测如果检测的是文件类型,不是后缀名
上传图片的时候文件类型是:image/jpeg
上传脚本文件的时候文件类型为:application/octet-stream二进制文件,把文件类型改成:image/jpeg
在这里插入图片描述00截断
将文件名改为:xxx.php.jpg
上传时用burp抓取数据包,在hex十六进制页面中找到文件名对应的那一行,找到最后一个.对应的16进制2e,把它改为00,此时文件名将变为xxx.php

如果后端不是根据文件后缀名去验证,而是根据文件是否是图片格式去验证
新建一个txt文档写入内容,内容开头要有一个空格,按住shft右键打开PowerShell回车cmd,copy /b xxx.jpg + xxx.txt = new.php 合成新文件,此时的new.php就是图片的格式

绕过办法
1、文件名大小写绕过(AsP, pHp等等)
2、黑白名单绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、 ashx、cer、asa、jsp、jspx)cdx,
3、特殊文件名绕过
修改数据包里的文件名改为 test.php. 或者 test.asp_ (下划线是空格)由于 这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统 会自动去掉 点和空格。Unix/Linux系统没有这个特性。
4、0x00截断绕过
5、.htaccess文件攻击(结合黑名单攻击)
6、 解析绕过

.htaccess文件攻击
.htaccess文件用处: 通过.htaccess文件调用php解释器去解析一个文件名中只要包含 “haha”这个字符串的任意文件,无论你文件名是什么样子,只要包 含”haha”这个字符串,都可以被以php的方式来解析。

.htaccess文件内容:
<FilesMatch “haha”>
SetHandler application/x-httpd-php
< /FilesMatch>

传上去.htaccess文件后,它会在当前目录下找文件名含有"haha"的文件,并把里面的内容当成php执行

先传.htaccess文件,再传haha.txt文件,此时txt的内容会被当成php执行

服务端文件内容拓展检测
如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难。也可 以说它是在代码层检测的最后一道关卡。如果它被突破了,就算代码层的漏 洞,也可以结合解析漏洞进行攻击。
1.文件幻数检测 jpg(JFIF) gif(GIF89a) png(%PNG)
2.文件相关信息检测(文件头加一些图片信息中间夹杂攻击代码)
例如:copy /b 1.jpg+2.txt =3.jpg copy /b 3.jpg+1.jpg =4.jpg
3.文件加载检测(调用API或者函数进行文件加载测试 php的 gd库)

Apache解析漏洞 黑名单
一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往 php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么 Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的 拓展名为止。

IIS 解析漏洞
• test.asp/任意文件名 | test.asp;任意文件名 | 任意文件名/任意文件名.php

eg:“text.asp/1.jpg”
eg:“1.asp;xxx.jpg”
eg:“http://www.xxx.com/upload/1.jpg/aaa.php”

Nginx解析漏洞
目前 Nginx 主要有这两种漏洞:
• 一个是对任意文件名,在后面添加/任意文件名.php的解析漏 洞,比如原本文件名是 test.jpg,可以添加为 test.jpg/x.php 进行 解析攻击。
• eg: “http://www.target.com/upload/1.jpg/1.php”

• 一种是对低版本的 Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。
Nginx 0.5.
Nginx 0.6.
Nginx 0.7 <= 0.7.65
Nginx 0.8 <= 0.8.37
以上Nginx容器的版本下,上传⼀一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%00.php进行请求。
Nginx 0.8.41 – 1.5.6:
以上Nginx容器的版本下,上传⼀一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%20%00.php进行请求

总结
路径/拓展名检绕过
黑名单绕过
• 文件名大小写绕过
• 名单列表绕过
• 特殊文件名绕过
• 0x00截断绕过
• .htaccess文件攻击
• Apache解析漏洞
• IIS解析漏洞
• Nginx解析漏洞

白名单绕过
• 文件名后缀0x00截断绕过
• PHP文件包含漏洞
• IIS解析漏洞
• Nginx解析漏洞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值