文件上传过程

客户端: 选择发送文件–>前端检测–>服务器接收–>程序检测–>临时文件–>移动到指定目录

文件上传错误代码

值:0; 没有错误发生,文件上传成功。
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
值:3; 文件只有部分被上传。
值:4; 没有文件被上传

网站文件常见的后缀名

asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
过滤的时候可以传入这种格式
aspasp
phpphp
大小写转换

造成漏洞的原因

程序代码和系统缺陷

  • 文件可以直接上传 可执行脚本 test.php

  • js脚本限制 禁止 js文件运行

    • 修改 html
    • 抓包改包
    • 直接在 jpg上面修改代码
    • 在包里面修改后缀名
  • 黑名单过滤不全 穷举后缀名 test.phtml
    黑名单 指定的后缀名是禁止上传的

白名单 就是允许上传文件后缀
jpg png gif 等其他图片格式

asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
ASP
ASA
CDX
CER
PHP
ASPX
ASHX
JSP
PHP3
PHP.A
SHTML
PHTML
Asp
Asa
Cdx
Cer
Php
Aspx
Ashx
Jsp
Php3
Php.a
Shtml
Phtml

  • 文件名可控 后缀名不可控 iis6.0解析漏洞 test.asp;.jpg test.asp;jpg
  • 目录解析漏洞 iis6.0 文件夹为 x.asp 只要上传文件到这个文件夹里 访问就会执行脚本
  • %00截断的应用场景
     直接截断文件名
     创建目录可控 %00截断创建目录 利用iis6.0解析漏洞 上传文件到这个目录里面
     截断参数 生成文件
  • 文件类型的检测 修改 http文件类型
  • 文件头检测 修改文件头 或 图片一句话
     JPEG (jpg),文件头:FFD8FF
     PNG (png),文件头:89504E47
     GIF (gif),文件头:47494638
     TIFF (tif),文件头:49492A00
     Windows Bitmap (bmp),文件头:424D
    制作图片一句话
    copy 1.gif/b+test.php shell.php

程序逻辑出错

双文件上传
空格文件上传

部署环境

apache开启重写模块
LoadModule rewrite_module modules/mod_rewrite.so
重写解析 .htaccess
<FilesMatch “jpg”>
SetHandler application/x-httpd-php

配置错误 1.jpg/.php

iis7.0|iis7.5|nginx 开启 fast-cgi

漏洞

nginx 0.83

/1.jpg%00php

系统特性

上传文件名 a.php:.jpg的时候 会在目录下生成 a.php的空白文件
php+window+iis
利用 PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:
双引号" = 点号.
大于符号> = 问号?
小于符号< = 星号*
文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名
写入 filename.<<<

NTFS交换数据流

:DATA创建文件::DATA 创建文件 ::DATA 创建和写入文件

补充

window系统里面会把文件名的最后一个点 会自动去掉
如上传 test.php.最后还是会变成 test.php