文件上传〈2〉

embedded/2024/11/14 15:34:56/

                   文件上传进阶

           1.文件扩展名白名单绕过

白名单扩展名校验相比于黑名单更安全、可靠、普遍。绕过白名单检测通常需要依靠Web服务器的解析缺陷,或lmageMagick等组件缺陷。

1.IIS(一个服务器)解析缺陷

在IIS 6.0中,".asp"和".asa"目录中的任何扩展名的文件,都会被IIS当作asp文件来解析执行。比如在目录"a.asp"中存在文件"a.asp/1jpg",那么"1.jpg"就会当作asp文件解析执行。
对于文件名为"a.asp;a.jpg"的文件,IIS会忽略分号后的部分,当作"a.asp"解析执行。

 2.Nginx解析缺陷

Nginx解析缺陷是配置不当造成的,在Nginx未设置try_files指令对要访问的文件进行存在性检查,并且PHP-FPM未设置"security.limit_extensions"限制可解析的扩展名时,可能出现解析缺陷。

当Nginx使用下面的配置文件时
location ~ \.phps{

fastcgi_pass 127.0.0.1:9000;

fastcgt_param SCRIPT_FILENAME $document_root$fastcgt_script_name;

include fastcgt_params;
}
先上传木马"1.jpg",再访问"1.jpg/1.php"由于文件名为"·php"结尾,Nginx会发给FPM处理,当PHP启用了(默认)"cgi.fix_pathinfo”时,会发现"jpg/1.php"不存在,开始fallback到"1.jpg”,此时若“security.limit_extensions"没有设置,那么PHP就会解析并执行"1.jpg”,造成解析缺陷。

自PHP 5.3.9开始“security.limit _extensions"被加入到PHP中,并且默认值为".php",".phar”

3.Apache解析缺陷

多扩展名解析
在Apache中,单个文件支持多个扩展名,如果每个扩展名都存在对应的handler或media-type,那么对应的解析器会处理当前文件。
如果存在配置"AddHandler application/x-htpd-php .php",那么"a.php.xxx“文件会使用php进行处理

          2.上传文件禁止访问绕过

 

在测试的过程中,经常会遇到,虽然上传功能允许上传任意扩展名的文件,但是上传后无法访问,或不能被解析。这通常是由于配置了上传目录禁止解析。在这种场景下,可以尝试目录穿越,使用"../"上传到上级目录,不过对于PHP中$FILES获取的文件名,已经被basename处理过,无法直接利用。

1.".htaccess"禁止脚本文件解析

利用".htaccess"文件设置了上传目录中的文件Handler,".php"无法使用默认handler进行解析。但是在Apache 2.3.9之后,"AlowOverride"默认为None,".htaccess"无法继续发挥作用,造成绕过。

2.上传文件到"OSS"

如果上传文件被保存到云对象存储(OSS)中,自然无法进行解析执行。但是可以通过上传“HTML等文件实现XSS,不过需要注意OSS的域名,需要与网站的域名一致。

 3.配合文件包含

如果目标站点存在文件包含缺陷,比如PHP中的"include $_GET['page”;”,那么无论上传文件的扩展名是什么,都可以被文件包含执行。同样也可以适用于SSTI,如果网站允许选择染模板的路径,那么也可以完成SSTI。

               

                 3.图片验证绕过

 

部分开发者认为,上传文件的内容如果是正常图片,那么就不可能再包含代码,因此只检查是否是图片,不检查文件扩展名。

但是在PHP中,检查文件是否为正常图片的方法,往往可以被绕过

1.getimagesize绕过

 

getimagesize函数用于获取图像的信息,包括尺寸和文件类型。绕过文件不是有效的图像,那么返回FALSE。

对getimagesize的绕过,只需把PHP代码添加到图片后,getimagesize函数会正常工作,文件也可以被正常解析。
比如使用"GIF98a作为文件开头",就会被识别为GIF文件。

还可以使用XBM格式,如果在文件的某一行符合“#define%s %d”,就会格式化取出字符串和数字如果最后height和width不为空,那么getimagesize就会成功返回。因为是逐行读取,所以这个"#define“可以放在任意一行。

 2.imagecreatefromjpeg绕过

 

imagecreatefromjpeg会重新渲染并生成新图片,在图片中插入其他字符经过渲染后会消失。

可以使用“https://github.com/BlackFan/jpg_payload",将脚本嵌入到jpg图片中,即使经过转换仍然可以保留在图片中。

 

先保存一个jpg文件,然后用jpg_payload.php进行处理,然后再经过上传服务的转换,最后仍然能执行其中的system命令。


http://www.ppmy.cn/embedded/137530.html

相关文章

计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习 流量控制(Flow Control)是计算机网络中确保数据流平稳传输的技术,旨在防止数据发送方发送过多数据,导致接收方的缓冲区溢出,进而造成数据丢失或传输失败。流量控制通常…

Spring Boot 读取 yml 并映射至实体

application-base.yml app:# 附件存储路径upload-attachments: /data/attachments/# 报告导出详情 url - 前端score-detail-url: ${app.host.web}/#/process/start?processNo{}# api 文件下载 urlfile-download-url: ${app.host.web}/prod-api/sys_file_info/download/{}?fu…

力扣(LeetCode)LCR 179. 查找总价格为目标值的两个商品(Java)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🐹今日诗词:西山白雪三城戍,南浦清江万里桥🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

scala创建图书信息类,包含三个属性:书名,作者,价格

class Book(var title: String, var author: String, var price: Double) {// 可以在这里定义其他的方法,比如展示图书信息的方法等,以下是一个简单示例def showBookInfo(): Unit {println(s"书名: $title")println(s"作者: $author&quo…

ISP——你可以从这里起步(二)

接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…

Android 开发指南:初学者入门

Android 是全球最受欢迎的移动操作系统之一,为开发者提供了丰富的工具和资源来创建各种类型的应用程序。本文将为你提供一个全面的入门指南,帮助你从零开始学习 Android 开发。 目录 1. 了解 Android 平台[1]2. 设置开发环境[2]3. 学习基础知识[3]4. 创…

H3C ER8300G2-X未授权导致信息泄露漏洞(CVE-2024-32238)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

解非线性方程组

实验类型:●验证性实验 ○综合性实验 ○设计性实验 实验目的:进一步熟练掌握解非线性方程组牛顿迭代算法,提高编程能力和解算非线性方程组问题的实践技能。 实验内容: 设有非线性方程组(此方程组是非标准型) 实验说明&#xff1…