文件上传复现

文件上传漏洞的概念

在现代互联网的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配置文件中修改。

相关推荐
QXWZ_IA1 小时前
测绘单位采购RTK:设备价格、账号年费、售后,用时间轴分权重
网络·人工智能·安全
IT大白鼠3 小时前
GitLab 未认证 RCE 应急实战CVE-2026-97229(CVSS 10.0)
网络·安全·gitlab
进击的荆棘3 小时前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
KCENN3 小时前
安全地毯压敏传感防护在工业流水线与机器人作业区的耐腐蚀材质及紧急停机机制
安全
北城笑笑4 小时前
Vue 109 ,从零搭建 Vue3 + Electron 工程:生态、安全桥接与打包选型( Vue + Electron )
前端·javascript·vue.js·安全·electron·vue
山东科恩光电16 小时前
安全触边在协作机器人工作站防碰撞防护中的安装方案与性能优化
安全
山东科恩光电1 天前
安全地毯压力感应防护在工厂自动化区域的实时监测与停机联动应用
安全
Flynt2 天前
日涨4000星的OSINT工具,我拿Linus的用户名和一个随机字符串实测了一遍
python·安全
国科安芯2 天前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
国科安芯2 天前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天