前端
禁用浏览器js脚本
火狐(23):
1、在Firefox地址栏里输入“about:config”。
2、在搜索栏输入“javascript.enabled”查找到首选项。
3、点击鼠标右键选择“切换”,把“javascript.enabled”键值改为“false”。
发送正常后缀文件,使用burpsuite代理改包发送
后端
黑名单
- 特殊解析后缀
类似 php5,phtml,.htm,.phtml,.pht,.jspa,.jspx
这是因为Apache的配置文件httpd.conf文件中有这样的配置文件,同时可以禁用特殊后缀防护AddType application/x-httpd-php .php .html .phtml
- .heaccess解析
phpstudy软件界面——>其他选项菜单——PHP扩展及设置——Apache扩展——rewrite_module模块
htppd.conf搜索查找AllowOverride None,然后把AllowOverride None修改为 AllowOverride All,完成后保存
仅存在于Apache中
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。
htaccess文件是Apache服务器中的一个配置文件负责相关目录下的网页配置。可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
<FilesMatch "shana">
Sethandler application/x-httpd-php
</FilesMatch > //表示以shana为名的文件在此文件夹会以php文件运行
通过黑名单禁止上传.heaccess文件或者白名单验证
- .user.ini配置文件解析控制
uto_prepend_file=pass5.jpg//把pass5.jpg当作php文件执行
.user.ini 文件作用:所有的 php 文件都自动包含 pass5.jpg 文件。.user.ini 相当于一个用
户自定义的 php.ini。 - 大小写
后端没有对文件后缀的大小写验证strtolower($file_ext); //转换为小写
- 点绕过,空格绕过
在文件后缀名中加入点或者空格,后端代码验证可以绕过,上传到服务器时会解析回原来的文件后缀,遇到防护可以两者组合。
防护措施
trim($file_ext); //收尾去空
strrchr($file_name, '.'); 截取点之后的字符串
- **::
D
A
T
A
绕
过
∗
∗
在
w
i
n
d
o
w
s
中
会
将
文
件
名
:
:
DATA绕过** 在windows中会将文件名 ::
DATA绕过∗∗在windows中会将文件名::DATA之后的数据当成文件流处理,保持之前的文件名,
上传的文件为test.php::$DATA.jpg,变成test.php保存。
但是php代码中还通过strrchr函数获取文件后缀.jpg,并以该后缀作为上传之后的文件后缀。 - 配合解析漏洞
上传正常文件,通过解析漏洞把其当做脚本文件执行 - 双写后缀名绕过
当后端只对后缀名做了一次验证时,可以双写绕过,例如pphphp
白名单
- MIME绕过
通过更改数据包文件MIME类型信息 Content-Type更改成脚本文件后缀 - 0x00截断,%00截断
%00截断原理
www.xxx.com/qq.jpg
www.xxx.com/qq.php%00.jpg => www.xxx.com/qq.php
%00是被服务器解码为0x00发挥了截断作用**
0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。%00和0x00是有区别的:%00是URL中的,0x00是文件命名
%00需要PHP版本小于5.3.4,且打开php的配置文件php-ini,将magic_quotes_gpc设置为Off - 0x0a截断
其他
-
文件头检测
每个文件类型二进制码首部都会有常见文件头 _文件幻数_来标识文件类型
fread($file,2)可以读二进制文件,有时用字符方式去读文件不能读完整个文件,但是二进制方式就可以 。在上传的脚本文件头部加上允许上传的文件类型的幻数,就可以实现绕过。 -
二次渲染
二次渲染:分两步,先把文件上传服务器,服务器将这个文件进行保存或删除(上传的时候下面有保存和上传的按钮)二次渲染的绕过用gif文件比较好绕,因为格式要求不是很严格,png和jpg文件要求格式很严格。
我们只需要将我们需要写入的东西塞在图片中间(虽然会使图片损坏,但是我们又不需要图片。。),用winhex或010editor等在文件内进行修改即可 -
条件竞争
条件竞争:在资源在被占用时候,无法删除进行其他操作,
在读取时,无法进行命名操作,无法rename等后续操作,所以PHP文件就上传成功了 -
目录命名-x.php/.
以文件夹名的突破方式绕过后缀的限制同时在最终代码执行结果会保存为php文件 upload/upload-19.php/. 在服务器会被当成文件保存 -
数组接受+目录命名
后端代码采用数组接收文件名,获取最后后缀名和文件名拼接
$file_name = reset($file) . '.' . $file[count($file) - 1];
我们可以采用目录命名修改数组实现绕过 -
文件包含漏洞
图片马制作
copy 1.png /b + shell.php /a webshell.jpg
也可以直接编辑图片在最后写上脚本代码
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数
时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。