13 文件上传

本以为一天就能够结束掉文件上传这一章

但还是得拖到明天了,明天我得多学些

这一章遇到了点小问题

.htaccess文件和.phtml文件死活解析不了

我现在也不知道哪出的问题

没查出来

但是当我把环境换到虚拟机上的时候问题便解决了

虽然治标不治本

但确实舒服了

 

.htaccess用途范围仅仅针对于当前目录,这点需要记一下,之前不知道

.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。

 

文件上传是指由于未对上传文件进行严格的验证和过滤,导致用户可以越过其本身权限向服务器上传可以执行的动态脚本文件。上传的文件可以控制整个网站,甚至控制整个服务器

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

 

文件上传的漏洞分为三种

直接文件上传

有条件的上传漏洞 一般是由于开发经验不足

权限认证未处理,没有对那文件上传进行权限认证

 

有条件的文件上传绕过方式

绕过前端js检测上传

F12审计元素,将校验函数删除

先将文件该为js允许上传的文件,再通过抓包修改

 

绕过content-type检测上传

抓包将content-type修改为image/jpeg image/png等允许的格式即可

 

绕过黑名单上传

一般apache 开启了application/x-httpd-php这个设置

 

 那么这里面的后缀文件都会默认解析为php文件进行执行

 

.htaccess重写解析绕过上传

这里首先要开启.htaccess才能使用

 

 然后就是一个apache的rewrite重写模块,大多apache多数都开启这个模块,所以一般都生效

 

 配置.htaccess文件

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

然后将.htaccess文件和攻击文件(s.jpg)一块传上去

s.jpg可以被作为PHP文件执行的

 

 

大小写绕过上传

有的上传模块没有对大小写进行转换

于是可能导致更改后缀大小写就可以绕过

 

空格绕过

如果没有对空格进行去除就有可能被绕过

抓包 然后在文件后缀中添加空格即可

 

 

Windows系统特征绕过

windows中文件后缀名系统会自动忽略.

所以shell.php. 上传后会变成shell.php

 

NTFS交换数据流::$DATA绕过上传

如果后缀名没有对::$DATA进行转空

那抓包后修改后缀名为 evil.php::$DATA

即可绕过

 

windows环境叠加特征绕过

在 windwos 中如果上传文件名 moonsec.php:.jpg 的时候,会在目录下生产空白的
文件名 moonsec.php
再利用 php 和 windows 环境的叠加属性
以下符号在正则匹配时相等
双引号" 等于 点号.
大于符号> 等于 问号?
小于符号< 等于 星号*
文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名

 

a.php:.php上传会在目录生成a.php空白文件

再然后提交a.>>>文件

不知道是覆盖还是修改值

服务器里a.php的空白文件已经有值了

成功绕过

 

文档双写绕过

和sql绕过一样

服务器会将php后缀置为空

因此将后缀改为pphphp即可绕过上传

 

目录可控%00截断绕过上传

 %00截断绕过条件

1.gpc关闭

2.php版本小于 5.3.4

GET绕过

首先截断攻击,抓包上传将%00 自动截断后门内容。
例如 1.php%00.1.jpg 变成 1.php

POST绕过

抓包后,需要将%00解码变成空白符,阶段才有效

并且这种目录可控的上传攻击一定要找到文件的上传目录(save_path)

而不是文件名(filename)

 

文件名可控的攻击方法

依旧可以采取%00截断

条件和目录可控一样

/.也可以截断(windows内)

 

 

文件头检测绕过上传

使用图片马绕过

制作图片一句话,使用 copy 1.gif/b+moon.php shell.php 将 php 文件附加再 jpg
图片上,直接上传即可。
 
绕过图片二次渲染上传
图片在二次渲染后体积会更小图片会更加模糊,但是符合网站的需求
但是图片在二次渲染后会失去或者修改一些内容
若是常规的图片马里面的php语句大概率会被修改
我们可以将渲染后的文件和为渲染的图片进行一个对比
选渲染前后都未被修改的地方
改为php代码
再上传上去
即可
 
数组绕过上传

有的服务器会将文件名拆解为数组然后再拼接

虽然我不是很能理解这样做的好处

但这里有一个逻辑漏洞

 

 我们可以通过控制上传的数组

增加一个上传的参数

但是要注意第二个数组的值要大于1

此时$file[count($file)-1)被置为空

然后/.再move_uploaded_file()函数中会被忽略

所以移动到指定目录时后缀会变为php

这个漏洞极难发现

一般是在代码审计的过程中才能找到

黑盒测试我觉得很难遇到也很难往这个方向想

 

文件上传后缀可以考虑爆破一下看看

 

 

 

这些文件上传很多都和系统的一些特性是有关的

但是开发人员可能对这些系统的特性并不了解

所以就造成了这些漏洞

像玄学一样

 

posted @ 2022-03-01 23:43  r0nGer  阅读(62)  评论(0)    收藏  举报