Unsafe Fileupload-pikachu

系列目录

第一章 暴力破解

第二章 Cross-Site Scripting-pikachu

第三章 CSRF

第四章 sql-injection 

第五章 RCE

第六章 File inclusion

第七章 Unsafe filedownload

第八章 Unsafe fileupload

概述

不安全的文件上传漏洞概述

文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...

一、Client Check

页面提示我们只能上传图片

尝试上传其他类型的文件

发现存在一个校验

检查前端代码发现,前端进行的校验

我们有两种办法绕过校验

1.禁用js

直接禁用js

我们上传成功

我们上传了一个php一句话木马,所以我们使用蚁剑连接

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

2. 使用burpsuite

由于是前端的校验,那么我们只需要在前端提交一个图片文件

在发送数据的过程中,将数据包更改

就可以绕过这个前端校验了

抓到数据包以后,先去除掉图片的数据

修改文件名

添加文件内容

连接成功

二、MIME type

三、get image size

PHP中的getimagesize()函数是一个内置函数,用于获取图像的大小。Getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

制作图片马,上传成功后

由于这是图片文件,php代码并没有执行

我们需要利用之前的文件上传漏洞,来让php代码执行

### 关于NULL的理解 在C语言中,`NULL` 是一个特殊的宏定义,其本质是一个值为 `0` 的指针。这里的 `0` 并不是一个普通的整数零,而是一个特定的内存地址——即 **空地址** 或者说是无效地址[^1]。 具体来说,在标准头文件 `<stddef.h>` 中,`NULL` 被定义如下: ```c #undef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((void *)0) #endif ``` 上述代码表明,在 C++ 编译环境下,`NULL` 定义为简单的整数值 `0`;而在纯 C 环境下,则被定义为 `(void*)0`,这明确表示它是一个指向空地址的指针[^2]。 如果尝试解引用一个值为 `NULL` 的指针(例如访问该指针所指向的内容),程序通常会触发段错误(Segmentation Fault)。这是因为操作系统不允许应用程序访问特殊保留区域中的数据,比如地址 `0x00000000` 所对应的内存位置。 --- ### Pikachu靶场中Unsafe Fileupload关卡分析 对于Pikachu靶场中的“Unsafe Fileupload”关卡,目标通常是绕过服务器端的安全检测机制上传恶意脚本并执行命令。以下是几个可能的方向和技术细节供参考: #### 文件扩展名过滤规避 许多不安全的文件上传功能仅通过检查文件扩展名来阻止危险类型的文件。然而,这种防护方式容易受到多种攻击手段的影响。例如: - 使用双扩展名欺骗技术:提交像 `shell.php.jpg` 这样的文件名,某些配置不当的服务可能会将其识别为 PHP 文件而非图片。 - 利用 MIME 类型差异:即使服务端验证了 `.jpg/.png` 后缀,但如果未校验实际内容类型 (Content-Type),仍可上传伪装成图像但实际上包含恶意代码的数据包。 #### 隐藏字段篡改 部分应用依赖前端 JavaScript 控制表单参数设置,默认隐藏了一些重要选项如最大尺寸限制或者允许格式列表。黑客可以轻易修改这些不可见输入框内的默认值从而突破原始设定范围约束条件实现非法操作目的。 #### 命令注入漏洞利用 假设存在某个环节未能妥善处理用户提供的元信息(如文件描述文字),那么就有可能构成另一类风险—命令注入(Command Injection).假如上传过程中涉及到调用外部工具完成额外任务(压缩打包,转换编码等等.),而且拼接字符串时缺乏必要的转义措施的话,则很容易成为突破口. 示例代码片段展示如何构造payload: ```bash filename=";ls -l>/tmp/output.txt;" # Unix/Linux system command injection example. ``` 此行语句将在成功传递给后台之后被执行,并把目录结构写入到指定路径下的文本文件当中去。 #### 绕过白名单策略 即便采用了较为严格的正则匹配模式限定只接收若干种已知安全类型的文档材料,仍然可能存在边界情况考虑不足之处有待挖掘探索。比如说PDF内部嵌套JavaScript脚本的情况便是一典型案例之一。 综上所述,针对此类挑战赛题需综合运用逆向工程思维以及常见Web渗透测试技巧相结合的方法论来进行解答求解过程之中不断积累经验教训最终达到熟练掌握的目的。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值