文件上传复现

文件上传漏洞的概念

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

相关推荐
Fnetlink11 小时前
Fnet 云网安 260904
网络·人工智能·安全·web安全·网络安全
志栋智能2 小时前
安全超自动化如何支持大规模安全运营?
网络·安全·自动化
安科瑞黄益鸣3 小时前
筑牢高压直流安全防线:AIM‑T500L 绝缘监测仪在算力中心 DC800V 系统的应用
安全
HugoStudio_SWAN3 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
小五传输3 小时前
FTP替代怎么做?医院文件安全传输选型与迁移指南
大数据·运维·安全
luckystar513~4 小时前
Hermes 实战 :系列收官/生产化——安全审计与运维
运维·人工智能·安全·agent·智能体开发·hermes实战·智能体网关
大模型码小白5 小时前
AI大模型接入SDK:人工智能核心概念与发展史
大数据·运维·人工智能·安全·prompt
金立基胶粘6 小时前
如何利用替塑油推动环保发展?
大数据·安全
微财经观圈8 小时前
酒店配送机器人如何选型:普渡和优地从安全到场景的全面对比
大数据·安全·机器人
是隼人9 小时前
buuctf-pwn [HarekazeCTF2019]baby_rop2(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门