|
原文链接:文件上传和文件包含的各种姿势
文件上传前端
JS 防护,通过抓包修改,或插件js禁用来绕过。
后端- <code>黑名单</code><code>
- 上传陌生后缀 .php3 php5</code><code>
- 上传配置文件 .htaccess</code><code>
- 通过 双写 ,大小写,</code><code>
- 基于windows 特性 ::$DATE .php空格 .php. .php:.jpg</code>
复制代码
白名单- <code>%00截断 版本小于5.3.4 char(0) 空字符, c语言将空字符作为结束的标志,在字符串 中添加%00 解析时会将空字符之后的字符做丢弃处理</code><code>配合文件包含 上传图片码</code><code>
- 条件竞争(通过上传后 后端处理是 先存放在删除)</code><code>
- 修改 conten-type image/jpeg</code><code>
- 修改MIME 类型</code>
复制代码
IIs 服务器 解析漏洞
6.0 文件解析漏洞 .asp: . jpg 分号后面的不会被解析
目录解析漏洞 .asp/1.jpg .asp目录下的文件都会被解析成asp文件
7.0 CGI 解析漏洞 .jpg/.php
Apache
2.4.0-2.4.29 换行解析漏洞 \n换行
1.x 2.x 多后缀解析漏洞 .php.qwe
nginx
1.5.0-1.5.7 0.8.4-1.4.3 文件名逻辑解析漏洞 webshell.jpg空格 .访问 webshell/jpg%00.php 原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
0.5 0.6 0.7 %00截断
0.5.6 - 1.13.2 nginx整数溢出漏洞 在nginx作为反向代理服务器,且开启了缓存时,攻击者可以构造恶意的range域,来获取相应的服务器中的缓存文件头部信息,导致敏感的服务器信息泄露。
 编辑
文件包含- <code>包含函数 include_once include require require_once</code><code>
- include 只会抛出错误,不会终止</code><code>
- require 到包含文件不存在时 直接终止程序</code>
复制代码
本地文件包含
远程文件包含 前提是 allow_url_fopen allow_url_include
php 伪协议
flie:// 访问 本地文件系统 不受 allow_url_fopen allow_url_include 影响
allow_url_include = on
php://input 读取post 请求中的数据
php://filter 读取源码
zip:// 协议
可以访问 压缩文件中分子文件, 不需要指定后缀名
?fi=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
data:// 协议
allow_url_fopen allow_url_include 0n
用法:include.php?filename=data:text/plain,<?php php代码?>
直接插入php代码的话,有些特殊符号容易出问题 抓包修改
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
防御绕过- <code>00截断</code><code>
- 超长字符串</code><code>
- 目录穿越 (后端代码 包含对象中 追加 目录名)</code><code> </code><code>
- 问号截断</code><code>
- 井号</code><code>
- 后缀猜测</code>
复制代码
文件包含 码传不上去中间件日志文件
一句话木马插入 url 中, 中间件解析报错 报存在 日志文件中
ssh 登录日志文件保存路径 /var/log/auth
去包含这个文件
最好是在24.00 8.00 日志重制时
木马写在seesion中
session保存路径/var/lib/php/sess_phpsessid
防御绕过- <code>将需要 包含的地方 写死</code><code>
- 过滤接收到的参数</code><code>
- 禁止远程文件包含</code><code>
- 限制访问范围</code><code>
- 使用白名单</code>
复制代码
 
 
|
|