文件上传复现

文件上传漏洞的概念

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

相关推荐
No Big Deal1 小时前
ctfshow-_Web应用安全与防护-Base64多层嵌套解码
安全
Oxo Security2 小时前
【AI安全】检索增强生成(RAG)
人工智能·安全·网络安全·ai
2301_795167203 小时前
玩转Rust高级应用 如何让让运算符支持自定义类型,通过运算符重载的方式是针对自定义类型吗?
开发语言·后端·算法·安全·rust
合作小小程序员小小店6 小时前
web安全开发,在线%服务器日志入侵检测%系统安全开发,基于Python,flaskWeb,正则表达式检测,mysql数据库
服务器·python·安全·web安全·flask·安全威胁分析·安全架构
Fanmeang8 小时前
华为防火墙基础功能详解:构建网络安全的基石
运维·网络·安全·华为·防火墙·策略·安全域
数字供应链安全产品选型8 小时前
公示 | 悬镜安全通过首批《信息技术 软件物料清单数据格式规范》行业标准符合性试点验证
安全
AWS官方合作商8 小时前
AWS Lambda的安全之道:S3静态加密与运行时完整性检查的双重保障
安全·云计算·aws
MarkHD8 小时前
蓝牙钥匙 第69次 蓝牙钥匙安全与便捷性平衡:从理论到实践的全方位解析
网络·人工智能·安全
还是奇怪9 小时前
隐藏在字符编码中的陷阱:深入剖析宽字节注入
数据库·sql·安全·web安全
花落已飘9 小时前
openEuler安全特性深度评测:构建企业级安全防护体系
安全·ai