文件上传复现

文件上传漏洞的概念

在现代互联网的web应用程序中,上传文件是一种常见的功能,因为它有助于提高业务效率,比如社交 网站中,允许用户上传图片、视频、头像和许多其他类型的文件。然而向用户提供的功能越多, web应 用受到攻击的风险就越大,如果web应用存在文件上传漏洞,那么恶意用户就可以利用文件上传漏洞将 可执行脚本程序上传到服务器中,获取网站的权限,或者进一步危害服务器。

为什么文件上传存在漏洞?

上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意 文件的情况,包括上传脚本文件(asp、aspx、 php、jsp等格式的文件)。

IIS

SQLserver

会造成什么危害?

非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又称之 为webshell,也可将webshell脚本称为一种网页后门, webshell脚本具有强大的功能,比如查看服务器 目录,服务器中的文件,执行系统命令等。

文件上传漏洞原理和代码分析

Pass-01- 前端校验

可以看到这个地方限制了后缀。

查看源码:

这个时候我们只需要将这个onsubmit事件删除就可以了。

再次提交即可。可以利用burp抓响应包,然后修改响应包。

再次提交即可拿到shell

Pass-03- 黑名单

查看源码:

这个地方尝试利用burp抓包修改后缀为php5试试:

放包:

上传成功,拿到shell:

这一关的前提是在apache配置文件中有如下配置:

AddHandler application/x-httpd-php .php .php3 .php4 .php5 .phtml 当然防御也就是将上面这句配置修改为:

AddHandler application/x-httpd-php .php

docker路径

|----------------------------------------------------------------------------------------------------------------------------------------------|
| root@bf0766c132ed:/etc/apache2/conf-available# echo "AddHandler application/x- httpd-php .php .php3 .php4 .php5 .phtml" >> docker-php.conf |

Pass-10- 双写

查看源码:

抓包尝试:

放包:

拿到shell:

GET-%00 截断 -Pass-11

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都 是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了 一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目

的。00截断通常用来绕过web软waf的白名单限制。

产生的条件

. php版本小于5.3.29

. magic_quotes_gpc = Off 最终达到的效果:

|------------------------------------------------------------------------------|
| www.xxx.com/shell.jpg www.xxx.com/shell.php.jpg => www.xxx.com/shell.php |

我们直接查看源码:

直接burp抓包:

获得shell:

条件竞争 -Pass-17

查看源码:

代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间 访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删 除这个文件,就会提示这个文件在另一程序中打开无法删除。

这个地方需要对并发有一定了解才行。

总体操作是,直接上传一个php文件,利用burp抓包,然后跑一个Null payloads

然后发包,用另一个浏览器一直访问shell.php地址:

总结:

文件包含漏洞属于代码注入漏洞,为了减少重复代码的编写,引入了文件包含函数,通过文件包含函数将文件包含进来,直 接使用包含文件的代码;简单来说就是一个文件里面包含另外一 个或多个文件

但我们除了包含常规的代码文件外, 包含的任意后缀文件都会被当作代码执行 ,因此,如果有允许用户控制包含文件路径的 点,那么则很有可能包含非预期文件,从而执行非预期的代码导致getshell。

几乎所有的脚本语言中都会提供文件包含的功能,但文件包含漏洞在PHP Web 应用中居多,在JSP、ASP中十分少甚至没 有,问题在于语言设计的弊端。因此后续均以PHP为主。

攻击者利用包含的特性,加上应用本身对文件(包含)控制不严格,最终造成攻击者进行任意文件包含。

一句话来说就是: 文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致 了文件包含漏洞的产生

PHP中的文件包含分为本地文件包含远程文件 包含

LFI

本地文件包含 Local File Include (LFI)

所包含文件内容符合PHP语法规范,任何扩展名都可以被PHP解析。

所包含文件内容不符合PHP语法规范,会暴露其源代码(相当于文件读取)。

RFI

远程文件包含 Remote File Include (RFI)

如果要使用远程包含功能,首先需要确定PHP是否已经开启远程包含功能选项(php默认关闭远程包含功能: allow_url_include=off),开启远程包含功能需要在php.ini配置文件中修改。

相关推荐
王哥儿聊AI2 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
Coovally AI模型快速验证5 小时前
从避障到实时建图:机器学习如何让无人机更智能、更安全、更实用(附微型机载演示示例)
人工智能·深度学习·神经网络·学习·安全·机器学习·无人机
Gobysec5 小时前
Goby 漏洞安全通告|Spring Cloud Gateway 信息泄露漏洞(CVE-2025-41243)
spring boot·安全·cve-2025-41243
有点不太正常5 小时前
FlippedRAG——论文阅读
论文阅读·安全·大模型·rag
挨踢攻城7 小时前
Linux 安全 | 使用 iptables 测量流量
linux·服务器·安全·iptables·linux安全·厦门微思网络·测量流量
通信瓦工8 小时前
IEC 60598-1-2020灯具通用安全要求标准介绍
安全·灯具·标准下载
浅拾光º8 小时前
mysql字符串截取,如何在MySQL备份文件中安全截取敏感字符串?
数据库·mysql·安全
踏过山河,踏过海8 小时前
在SSL证书是有效的前提下,依旧显示“资源不安全
网络协议·安全·ssl
游戏开发爱好者89 小时前
App HTTPS 抓包实战,原理、常见问题与可行工具路线(开发 测试 安全 角度)
网络协议·安全·ios·小程序·https·uni-app·iphone
Teamhelper_AR10 小时前
AR技术:轨道交通运维与安全保障的革新力量
运维·安全·ar