文件上传

无文件解析 安全问题上,格式解析是一对一的(不能jpg解析php)换句话来说有解析错误配置或后缀解析漏洞时才能实现格式差异解析

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

upload-labs-docker知识点:

1、前端JS

如何判断是否是前端验证呢?
1)首先抓包监听,如果上传文件的时候还没有抓取到数据包,但是浏览器就提示文件类型不正确的话,那么这个多半就是前端校验了
2)代码判断:打开页面查看源码,发现在前端有对应过滤代码

解决方式:
首先将木马文件的后缀修改为jpg,可以通过过滤的文件后缀
通过burp抓取到数据包,修改回对应的木马文件解析后缀
木马程序成功上传,即可通过哥斯拉,获取权限
(也可以禁用浏览器的前端JavaScript;也可以直接在浏览器检查代码把checkFile()函数(即如下图红色框选中的函数)删了或者也可以把红色框改成true,并按回车,即可成功上传php文件)

2、.htaccess(配置 Apache Web 服务器行为的配置文件)

htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义 404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

.htaccess是修改解析配置的一个文件
AddType application/x-httpd-php .png
这行代码的含义是借助这个配置将文件扩展名为.png 的文件类型当作application/x-httpd-php(php的类型)执行

将木马后缀修改上传对应设置的文件后缀 .png,后上传
通过burp进行抓包,并将文件后缀修改为.htaccess,并将代码内容修改为AddType application/x-httpd-php .png
注意:直接访问对应上传1.png的路径http://192.168.200.130:30002/upload/1.png),访问http://192.168.200.130:30002/upload/.htaccess 这个是解析木马文件的规则,直接访问会报错403

3、.user.ini

readme.php,php.ini是php的一个全局配置文件,对整个web服务起作用;
而.user.ini和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的php.ini,可以利用这个文件来构造后门和隐藏后门。
.user.ini使用范围很广,不仅限于 Apache 服务器,同样适用于 Nginx服务器,只要服务器启用了 fastcgi 模式 (通常非线程安全模式使用的就是 fastcgi 模式)。

php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
但是想要引发 .user.ini 解析漏洞需要三个前提条件
服务器脚本语言为PHP
服务器使用CGI/FastCGI模式
上传目录下要有可执行的php文件

利用 .user.ini 绕过限制
由于 .user.ini 文件可以覆盖某些 PHP配置,它也可能被恶意利用来绕过服务器管理员设置的限制,以下是一些可能的方式:
文件上传限制:
如果服务器全局设置了较低的文件上传大小限制,恶意用户可以通过 .user.ini 文件增加 upload_max_filesize 和 post_max_size,来上传更大的文件。
脚本执行时间:
恶意用户可能会增加 max_execution_time 以避免脚本执行超时,从而进行更长时间的恶意活动,如暴力破解等。
内存限制:
增加 memory_limit 可以帮助恶意脚本在执行时获取更多的服务器资源,可能导致拒绝服务攻击(DoS)。
PHP 文件包含漏洞
auto_prepend_file在 PHP 中,当用户访问.user.ini所在目录主页文件时,auto_prepend_file所指向的文件内容,会自动进行包含,将文件内容当作php代码执行

测试:
编写一个”.user.ini”文件
auto_prepend_file=shell.png
这串内容的意思就是,在访问主页文件时,会自动包含shell.png文件,将其文件内容当在php代码执行
之后我们再将包含我们一句话木马的shell.png上传至目标靶机

注意注意!!!!!!连接的地址是https://ae1b1446-fbe2-4179-90ac-3315ca849c79.challenge.ctf.show/upload/
不要跟上shell.png这个文件名!!!!!!!!!!

4、MIME类型-(修改文件类型,抓包修改回文件类型)

Content-Type 是 HTTP 协议中的一个头字段,用于指示发送给接收方的数据的媒体类型(也称为MIME类型)

常见的 Content-Type 值
文本类型:
text/html: HTML 文档。
text/plain: 纯文本。
text/css: CSS 样式表。
text/javascript: JavaScript 文件。
应用类型:
application/json: JSON 数据格式。
application/xml: XML 数据格式。
application/x-www-form-urlencoded: 表单数据,以键值对方式编码,通常用于 POST 请求。
multipart/form-data: 表单数据,通常用于文件上传时。
图片类型:
image/jpeg: JPEG 图像。
image/png: PNG 图像。
image/gif: GIF 图像。
音频/视频类型:
audio/mpeg: MP3 音频。
video/mp4: MP4 视频。

5、文件头判断
通过文件头判断文件后缀
通过文件类型判断文件后缀

首先将木马文件代码前加入文件头(GIF89a)gif所有文件默认的文件头
将任意的gif文件上传,获取文件格式Content-Type: image/gif
将木马文件进行上传,并将文件格式修改为获取的gif文件格式,然后上传
成功上传,并获取到文件上传路径URL:192.168.200.130:30004/upload/shell.php
通过哥斯拉,通过后门,获取权限

6、黑名单-双写绕过

通过文件后缀判断文件后缀
1、黑名单
检测上传文件后缀是不是在黑名单,在就gg不在就通过
无递归安全问题:只检测一次 没循环 pphphp = php
2、白名单检测上传文件后缀是不是在白名单,在就通过 不在就gg

无递归,pphphp
即黑名单中的词 “php” 被替换为空字符串,但留下了 “pphphp”。
这是因为 str_ireplace() 函数会对字符串进行不区分大小写的替换。

7、黑名单-系统大小写敏感绕过

window:大小写过滤不敏感
linux:大小写过滤敏感

直接使用木马文件shell.php上传,后缀会被替换为空
将后缀名修改为.phP,则可以绕过过滤

7、黑名单验证,空格绕过

没有使用trim()去除空格,可以使用空格绕过黑名单
抓包,修改上传一句话木马文件名zoe.php(注意这里有个空格)

Windows系统下,对文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单.

8、黑名单验证-点号绕过
没有使用deldot()过滤文件名末尾的点,可以使用文件名后加.进行绕过
抓包,修改上传一句话木马文件名zoe.php.(注意这里有个点)

9、黑名单验证-特殊字符::$DATA绕过

补充知识:php在window的时候如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持”::$DATA”之前的文件名 他的目的就是不检查后缀名。

上传PHP一句话文件,抓包改后缀zoe.php::$DATA
然后使用蚁剑连接zoe.php (注意蚁剑连接路径不要加上::$DATA)

10、黑名单-deldot()函数
filename=deldot(file_name)操作去除文件名末尾的点,构造后缀绕过黑名单

补充知识:deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来

上传zoe.php 然后用bp改后缀加点空格点(即文件名为zoe.php. .)
使用蚁剑连接zoe.php.

11、黑名单-过滤不严

源码通过黑名单中的关键词后缀进行过滤,但是由于,无法考虑全面而造成可以通过其他后缀名称进行绕过,使用字典替换抓包的文件后缀,通过判断长度变化,是否成功上传对应的木马文件
(用字典爆破)E:\字典\fuzzdb-master\attack\file-upload

传木马文件shell.php,通过抓包发送至Intruder
选择Clear$清除所有选中,选择 木马文件后缀 php,并按下Add清除所有选中,选择木马文件后缀php,并按下Add清除所有选中,选择木马文件后缀php,并按下Add替换该后缀

选择Payloads,Payload Options→Load导入对应php后缀替换字典G:\develop\safety\字典\fuzzdb-master\attack\file-upload\alt-extensions-php.txt

选择右上角Start attack,发现Length的长度不同,1573的是没有替换成功的,1625是替换成功的(不是绝对的,还需要通过哥斯拉验证后妈是否可以连接才能确定)
访问对应的URL文件上传地址:http://192.168.200.130:30009/upload/shell.php5
通过哥斯拉,连接后门,获取权限

12、低版本GET-%00截断
php版本<5.3.4,并且magic_quotes_gpc关闭。

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
magic_quotes_gpc 着重偏向数据库方面,是为了防止sql注入,但magic_quotes_gpc开启还会对$_REQUEST, $_GET,$_POST,$_COOKIE 输入的内容进行过滤

原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。

随便上传文件,抓包并发送至Repeater,并发送查看回显数据,PHP版本为5.2.17
将木马文件修改为.jpg,并上传抓包,将POST中URL路径路径加上/var/www/html/upload/a.php%00(下面post中的后缀不用改)
访问对应的URL文件上传地址:http://192.168.200.130:30007/upload/a.php
通过哥斯拉,连接后门,获取权限

12、低版本POST-%00截断

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

URL路径出现在POST下面的数据包中,需要手动解码
(或者在Hex中修改)

上传木马文件修改为.jpg格式,抓包,发现URL路径出现在POST下面的数据包中
将./upload/后面加上x.php%00,并选中该行,右键选择Convert selection → URL →URL-decode将所选内容转换为 URL →→URL 解码(进行手动转码)
访问对应的URL文件上传地址:http://192.168.200.130:30008/upload/x.php
通过哥斯拉,连接后门,获取权限

13、逻辑不严-条件竞争

逻辑缺陷
错误:先上传 后面判断 处理逻辑
正确:先判断 后上传

访问即创建代码搞出来(访问了自动触发代码 新建一个文件写入后内)
‘);?>

fopen(‘xiao.php’,’w’): 打开或创建一个名为 ‘xiao.php’ 的文件,以写入模式 (‘w’)。
fputs: 将后面的内容写入打开的文件。在这里,它将一段 PHP 代码写入 ‘xiao.php’ 文件中。
写入的 PHP 代码
这段代码包含一个 函数,它会执行作为参数传递的 PHP 代码。参数通过 获取,这意味着它会从 HTTP 请求的参数中获取第一个参数,然后执行其中的 PHP 代码。

上传不断发包
请求不断发包

测试:
创建新的木马文件,其中代码为’);?>

首先刷新想要获取的木马文件路径(请求页面)http://192.168.200.130:30010/upload/x.php。通过抓包抓取到请求页面,并将此数据包发送至Intruder

选中Payloads→Payloads Sets→Payload type:Null payloads(负载类型:空负载)

Payload Options →Continue indefinitely(无限继续)

将设置好的木马文件上传,抓包并发送至Intruder,记得删除clear $(上传发包)同样设置无限发包

访问对应的URL文件上传地址:http://192.168.200.130:30010/upload/xiao.php

通过哥斯拉,连接后门,获取权限

14、二次渲染绕过

补充知识:
二次渲染:后端重写文件内容
basename(path[,suffix]) ,没指定suffix则返回后缀名,有则不返回指定的后缀名
strrchr(string,char)函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像
imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像
imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

对于做文件上传之二次渲染建议用GIF图片,相对于简单一点

上传正常的GIF图片下载回显的图片,用010Editor编辑器进行对比两个GIF图片内容,找到相同的地方(指的是上传前和上传后,两张图片的部分Hex仍然保持不变的位置)并插入PHP一句话,上传带有PHP一句话木马的GIF图片

测试:
先搞个正常图片1.gif,上传导出渲染后的图片
将两张图片拉进010编辑器,打开工具→比较文件对比保留(匹配)部分,在保留部分添加后门代码
最后利用提示的文件包含执行图片后门代码
http://192.168.200.130:30011/?file=upload/1919801737.gif
pass=phpinfo();

15、函数缺陷

move_uploaded_file是一个用于将上传文件移动到指定位置的 PHP 函数。它的语法如下:
move_uploaded_file(string $filename, string $destination): bool
其中,$filename是上传文件的临时路径,$destination是目标位置的路径和文件名。

这个函数的作用是将上传的文件从临时目录移动到指定的位置。它通常用于处理文件上传功能,确保上传的文件能够被正确保存到服务器上的指定位置。

move_uploaded_file()还有这么一个特性,会忽略掉文件末尾的 /.

测试:
将自定义的保存文件名称写为1.php/.
将木马文件后缀修改为,jpg并上传
上传成功,获取对应的URL:192.168.200.130:30012/upload/1.php/
通过哥斯拉,连接后门,获取权限

16、短标签绕过

php部分标签写法
//正常写法
//短标签,适合过滤php
<% @eval($_POST[‘cmd’]); %> //asp风格

        //<script>风格,适合过滤

17、php关键字和[]绕过
php中,[]可以使用{}进行替换

18、php关键字、[]、{}绕过

Linux中通配符作用

  1. 星号(*)
    星号用于匹配任意数量的字符(包括零个字符)。
    示例:
    ls *.txt:列出当前目录下所有扩展名为.txt的文件。
    cp /home/user/.jpg /home/user/photos/:将/home/user/目录下所有扩展名为.jpg的文件复制到/home/user/photos/目录。 rm report:删除当前目录下所有以report开头的文件。
  2. 问号(?)
    问号用于匹配单个字符。
    示例:
    ls file?.txt:列出当前目录下所有文件名格式为fileX.txt的文件,其中X可以是任意单个字符。
    mv data??.csv backup/:将当前目录下所有文件名格式为dataXX.csv的文件移动到backup/目录,其中XX可以是任意两个字符。
  3. 方括号([])
    方括号用于匹配方括号内的任意一个字符。
    示例:
    ls [abc].txt:列出当前目录下所有文件名为a.txt、b.txt或c.txt的文件。
    rm file[1-9].txt:删除当前目录下所有文件名格式为fileX.txt的文件,其中X可以是1到9之间的任意一个数字。
  4. 大括号({})
    大括号用于匹配大括号内的任意一个模式。
    示例:
    cp {file1,file2,file3}.txt backup/:将当前目录下文件名为file1.txt、file2.txt和file3.txt的文件复制到backup/目录。
    mv {.jpg,.png} images/:将当前目录下所有扩展名为.jpg和.png的文件移动到images/目录。
  5. 感叹号(!)
    感叹号用于在方括号内表示排除某个字符。
    示例:
    ls [!abc].txt:列出当前目录下所有文件名不是a.txt、b.txt或c.txt的文件。
    rm file[!1-9].txt:删除当前目录下所有文件名格式为fileX.txt的文件,其中X不是1到9之间的任意一个数字。

19、php关键字、[]、{}、;、()绕过

PHP命令执行函数

  1. exec()
    exec()执行一个外部程序,并返回最后一行输出的结果。
  2. system()
    system()执行一个外部程序,并输出结果。返回命令的最后一行输出。
  3. shell_exec()
    shell_exec()执行一个命令,并返回完整的输出。
  4. passthru()
    passthru()执行一个命令,并直接输出结果到标准输出(通常是浏览器)。它与system()类似,但不会返回命令的输出。
  5. popen()
    popen()打开一个管道到一个进程,允许读取或写入进程的标准输入/输出。
  6. proc_open()
    proc_open()可以启动一个进程,并更多地控制其输入和输出。
  7. PHP 也支持用反引号()包围命令的方式来执行命令,这是与shell中类似的语法。

20、日志绕过

shell.png的内容如下

这段代码包含并输出 /var/log/nginx/access.log 文件的内容。由于包含的是一个日志文件,它的内容会直接作为PHP代码执行。

其中/var/log/nginx/access.log到底为nginx的日志文件。
因为log被过滤,所以使用 . 进行拼接字符串,从而实现绕过

总结
文件上传
漏洞成因: 具备上传文件功能的Web等应用,未对用户选择上传的文件进行校验,使得非法用户可通过上传可执行脚本而获取应用的控制权限。
防护与绕过: 通过upload-labs靶场实战,了解更多的防护与绕过手段。

防御
不要暴露上传文件的位置
禁用上传文件的执行权限
黑白名单
对上传的文件重命名,不易被猜测
对文件内容进行二次渲染

PHP-中间件-上传相关-Apache&Nginx

1.Apache HTTPD 换行解析漏洞(CVE-2017-15715)

漏洞条件:
Apache2.4.0~2.4.29版本
需要有文件上传
需要有重命名文件的代码实现
漏洞环境

编译及运行漏洞环境:
docker compose build
docker compose up -d

启动后Apache运行在http://your-ip:8080。

漏洞复现
1)创建一个名为1.php的文件内容,上传该文件,并将filename(重命名修改为:evil.php)
2)通过burp抓包,将evil.php后面多加一个空格(方便后期十六进制进制定位),并将数据包发送至repeater处
3)将数据包的内容转换为Hex格式,定位到evil.php ,后方的20(预留空格处),将其修改为0a
4)点击发送数据包,然后访问http://192.168.200.130:8080/evil.php(在evil.php后面加%0a)即可发现,phpinfo被执行了,该文件被解析为php脚本。但这个文件不是php后缀,说明目标存在解析漏洞

2.Apache HTTPD 多后缀解析漏洞(条件苛刻,忽略不计)

Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:
AddType text/html .html
AddLanguage zh-CN .cn

其给.html后缀增加了media-type,值为text/html;
给.cn后缀增加了语言,值为zh-CN。
此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。

以上就是Apache多后缀的特性。

漏洞条件
如果运维人员给.php后缀增加了处理器:
AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

漏洞环境
运行如下命令启动一个稳定版Apache,并附带PHP 7.3环境:
docker compose up -d

漏洞复现

总结:http://192.168.200.130/index.php中是一个白名单检查文件后缀的上传组件,上传完成后并未重命名。我们可以通过上传文件名为xxx.php.jpg或xxx.php.jpeg的文件,利用Apache解析漏洞进行getshell。

1)创建木马文件,1.txt修改内容为:,重命名为apache.php.jpeg
2)上传修改好的文件apache.php.jpeg ,并访问上传路径http://192.168.200.130/uploadfiles/apache.php.jpeg即可发现,phpinfo被执行了,该文件被解析为php脚本。

3.Nginx 文件名逻辑漏洞(CVE-2013-4547)

漏洞条件
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
需要有文件上传

漏洞环境
运行如下命启动漏洞环境:
cd /opt/vulhub-master/
cd nginx/CVE-2013-4547
docker compose up -d

环境启动后,访问http://your-ip:8080/即可看到一个上传页面。

漏洞复现
1)创建一个名为1.php的文件内容,修改此文件后缀 1.gif,上传该文件,抓包发送数据包至repeater,在filename=”1.gif “其后加空格点击发送,查看发送成功

2)复制发送成功数据包中上传文件的存储路径,并加上ip进行路由访问http://192.168.200.130:8080/uploadfiles/1.gif,将访问的数据包再次进行抓包,将抓取的数据包发送至repeater

3)修改GET后的路径,将1.gif后面加上两个空格和.php,然后转Hex格式,将第二个空格20修改为00即可发现,phpinfo被执行了,该文件被解析为php脚本

GET /uploadfiles/1.gif .php HTTP/1.1

4)细节:在修改Hex中的数值时候,如果发现一直修改不了,应当在修改完毕时候,点旁边任意一个数值,即可修改成功

4.Nginx 解析漏洞复现
漏洞条件
Nginx解析漏洞复现。

版本信息:
Nginx 1.x 最新版
PHP 7.x最新版
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。

直接执行docker compose up -d启动容器,无需编译。

漏洞环境
运行如下命启动漏洞环境:
cd /opt/vulhub-master/
cd nginx/nginx_parsing_vulnerability
docker compose up -d

环境启动后,访问http://192.168.200.130/uploadfiles/nginx.png和http://your-ip/uploadfiles/nginx.png/.php即可查看效果

漏洞复现
1)随便上传一个图片,通过抓取数据包,在该数据包的最后写上php后门代码,可以多写几个
2)将数据包发送至repeate,并点击发送,获取上传文件保存路径/uploadfiles/8266e4bfeda1bd42d8f9794eb4ea0a13.png
3)将路径加ip地址,并在路径后面加上/.php即可发现,phpinfo被执行了,该文件被解析为php脚本
http://192.168.200.130/uploadfiles/87aa2ffbf3c5370b130361392aedf2ac.png/dsadsdas.php

PHP-编辑器-上传相关-第三方处理引用

复现漏洞环境:ueditor
由于编辑器漏洞较少,实战碰到机会不大,主要理解漏洞产生的思路

https://blog.csdn.net/m0_51468027/article/details/126077427

影响范围
该漏洞影响UEditor的.Net版本,其它语言版本暂时未受影响。

漏洞复现
1)开启网址服务,通过目录扫描发现有ueditor,访问该路径跳出ueditor的内容
2)将以下代码中的网址修改为:对应的网址服务地址,然后将代码以浏览器打开,输入远程图片地址(带有后门图片马),在网址后加上?.aspx
3)会自动上传图片文件,并将其修改为aspx格式,并会返回对应的上传文件路径,将其进行访问,并使用哥斯拉连接后门即可

参考:https://cloud.tencent.com/developer/article/2200036
参考:https://blog.csdn.net/qq_45813980/article/details/126866682
引用到外部的第三方编辑器实现文件上传,编辑器的安全即是上传安全

PHP-CMS源码-上传相关-已知识别到利用
复现漏洞环境:通达OA-V11.2
从未知的源码体系测试原生态上传安全,现在是已知CMS(创建和管理数字内容的软件应用程序)源码架构,利用已知的漏洞测试

1)打开通达系统服务IP地址
2)将对应的ip地址使用ONE-FOX工具箱中的Liqun工具箱进行分析
3)成功获取Cookie信息后,切换功能为后台上传GetShell,成功上传

文件-解析方案-执行权限&解码还原

1、执行权限
文件上传后存储目录不给执行权限
原理:开启禁止目录执行,将服务器的文件上传后存储目录,取消读取和执行的权限

1)由于文件上传功能并未做过滤,直接上传包含后门的木马文件shell.php上传成功即可发现,phpinfo被执行了,该文件被解析为php脚本
2)当在小皮网址配置的==选择安全配置→开启禁止目录执行→将禁止执行的目录设置为上传目录(/1/upload)==
3)开启后,再次访问上传的木马文件,发现报错403,至此文件上传漏洞不能被利用

2、解码还原
数据做存储,解析固定(文件后缀名无关)
文件上传后利用编码传输解码还原

当服务器把上传的文件,利用base64编码编码为数据存储,也就是说从根本上解决了文件上传漏洞的问题,以数据存储就没有其他类型的文件解析即使上传后门文件,最后也是被当成图片去解析,由固定的协议去解析数据(data:image/png;base64,base数据)

文件-存储方案-分站存储&OSS对象

1、分站存储
upload.xiaodi8.com 上传
images.xiaodi8.com 存储(另一台服务器,目录权限锁死,只提供存储服务,不提供解析服务,即使上传木马文件,连接后门也无用)

存储图片在另一台服务,有关于上传文件还使用base64编译为数据,进一步防止了文件上传的隐患

2、OSS对象
Access控制-OSS对象存储-Bucket对象

上传的文件只能当作一个网盘来看,不提供解析服务,只提供下载

如何判断
1)如果目录下已经上传进去木马文件,访问其上传路径发现报错403禁止访问,可能是文件上传后存储目录不给执行权限
2)在上传文件的时候,抓取数据包,如果发现是由固定的协议(data:image/png;base64,base数据)则就是解码还原
3)上传图片后,查看图片URL地址中的域名是否和目标上传地址一致,如果不一致则是分站存储
4)如果访问上传的文件路径,发现访问及下载,多半是OSS对象

安全绕过
以上方案除目录设置权限如能换目录解析绕过外
其他均无解

控制上传文件的的存储目录,绕开开启限制执行的目录即可(鸡肋)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注