当前位置: 首页 > news >正文

Day47:WEB攻防-PHP应用文件上传函数缺陷条件竞争二次渲染黑白名单JS绕过

目录

文件上传与测试环境安装

1、前端 JS

2、.htaccess(apache独有的配置文件)

3、MIME类型

4、文件头判断

5、黑名单-过滤不严

6、黑名单-过滤不严

7、低版本GET-%00截断

8、低版本POST-%00截断

9、黑名单-过滤不严

10、逻辑不严-条件竞争

11、二次渲染

12、函数缺陷


知识点:

1、PHP-原生态-文件上传-检测后缀&黑白名单

2、PHP-原生态-文件上传-检测信息&类型内容

3、PHP-原生态-文件上传-函数缺陷&逻辑缺陷

4、PHP-原生态-文件上传-版本缺陷&配置缺陷

文件上传与测试环境安装

无文件解析安全问题上,格式解析是一对一的(不能jpg解析php)

换句话来说有解析错误配置或后缀解析漏洞时才能实现格式差异解析

文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题,对于如何确保这类安全问题,一般会从原生态功能中的文件内容,文件后缀,文件类型等方面判断,但是漏洞可能不仅在本身的代码验证逻辑中出现安全问题,也会在语言版本,语言函数,中间件,引用的第三方编辑器等存在缺陷地方配合利用。另外文件上传也有多个存储逻辑,不同的文件存储方案也会给攻击者带来不一样的挑战!

测试环境安装:

https://github.com/ffffffff0x/f8x
https://github.com/fuzzdb-project/fuzzdb
https://github.com/sqlsec/upload-labs-docker
下载上述资源

  1. docker安装     f8x -d 或 f8x -docker
  2. 进入项目文件夹    cd upload-labs-docker
  3. 一键部署运行   docker-compose up -d
     

1、前端 JS

如何判断是否是前端验证呢?

首先抓包监听,如果上传文件的时候还没有抓取到数据包,但是浏览器就提示文件类型不正确的话,那么这个多半就是前端校验了

如何绕过?先上传一个图片后缀抓包改成脚本后缀

2、.htaccess(apache独有的配置文件)

一般上传用的不多,主要用来留后门;apache中,.htaccess文件可以上传并执行,这个文件定义了哪个文件可以以脚本方式运行。

方式一:在.htaccess中写入:

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

然后再上传s.jpg的木马, 这样s.jpg就可解析为php文件
最好拿到shell之后修改自带的这个文件,添加上面的那段代码,就可以留个后门了

方式二:

AddType application/x-httpd-php .png  

当htaccess文件成功上传后,这时候再上传一个png图片的后门,就可以解析成脚本

3、MIME类型

Content-Type:image/png || image/jpeg

4、文件头判断

GIF89a

5、黑名单-过滤不严

str_ireplace()函数替换字符串中的一些字符(不区分大小写)

无递归(只检测一次,没循环)

phphp(因为代码中是把匹配到的黑名单替换为空)

6、黑名单-过滤不严

windows中大小写没问题,但是在linux上是不能大小写的,要么全小写,要么全大写

系统大小写敏感属性

str_ireplace()函数替换字符串中的一些字符(不区分大小写)

7、低版本GET-%00截断

这种方式适用于:

  • magic_quotes_gpc = 0ff
  • PHP 版本小于 5.3.4

自动解码一次,/var/www/html/upload/x.php%00

url 上面  %00 

post 下面 %00 二次解码

8、低版本POST-%00截断

这种方式适用于:

  • magic_quotes_gpc = 0ff
  • PHP 版本小于 5.3.4

手工解码一次,…/upload/x.php%00 二次解码

url 上面  %00 

post 下面 %00 二次解码

9、黑名单-过滤不严

php3

利用fuzz思路去跑后缀

字典下载地址:https://github.com/fuzzdb-project/fuzzdb

10、逻辑不严-条件竞争

上传不断发包

请求不断发包

访问创建脚本代码

<?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>

11、二次渲染

后端语言会对图片进行二次渲染,让图片更好的呈现出来,但是这样就会造成一个图片里插入的脚本代码丢失的情况

先搞个正常图片,上传图片后导出渲染后的图片

对比保留部分,在保留部分添加后门代码

最后利用提示的文件包含执行图片后门代码

12、函数缺陷

使用move_uploaded_file 函

保存的文件名可控

shell.php/.

http://www.lryc.cn/news/325478.html

相关文章:

  • 【Android】美团组件化路由框架WMRouter源码解析
  • python知识点总结(九)
  • 浅谈Linux中的软锁定(soft lockup)和硬件监视器(watchdog)
  • 数据库的四个特性?MySQL是如何实现的?
  • Jupyter R绘图 汉字显示乱码的解决办法
  • 推荐几个值得一读的Qt开源项目
  • 【XR806开发板试用】使用PWM模块模拟手机呼吸灯提示功能
  • Mysql——索引下推
  • Springboot项目之mybatis-plus多容器分布式部署id重复问题之源码解析
  • 微信答题小程序云开发--实现云函数上传题目图片 base64功能
  • 学会Sass的高级用法,减少样式冗余
  • 【Java初阶(五)】类和对象
  • AWTK-MODBUS 服务器
  • JavaScript快速入门笔记之一(基本概念)
  • 前端学习之css基本网格布局
  • [网鼎杯2018]Unfinish 两种方法 -----不会编程的崽
  • 安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法
  • 了解云原生
  • 【go从入门到精通】for和for range的区别
  • 【C语言】【Leetcode】88. 合并两个有序数组
  • DMA控制器
  • SQLiteC/C++接口详细介绍sqlite3_stmt类(十)
  • Android 生成Excel文件保存到本地
  • Hive-技术补充-ANTLR语法编写
  • 6.使用个人用户登录域控的成员服务器,如何防止个人用户账号的用户策略生效?
  • 模拟算法
  • 【数据结构刷题专题】—— 二叉树
  • 基于AWS云服务构建智能家居系统的最佳实践
  • Java零基础-集合:Set接口
  • 数据结构与算法-排序算法