文件上传漏洞(pikachu)
文件上传漏洞
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像,附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断,比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式重命名后存储在指定的目录,如果说后台对上传的文件没有进行任何的安全判断或者判断的条件不够严谨,则攻击者可能会上传一些恶意的文件,比如一句话木马,从而导致服务器权限被获取。
防范文件上传漏洞的方法
- 验证文件类型、后缀名、大小
- 验证文件的上传方式
- 对文件进行一定复杂的重命名
- 不要暴露文件上传后的路径
- 等等
进入第一关
提示我们只允许上传图片
但是我们打开F12看到
这里的JS调用了一个checkFileExt的方法
这个方法在后面也找得到,大致的意思就是判断文件的扩展名是不是为jpg、png、gif
我们知道这种前端的限制只能起到辅助作用,起不到实质性的作用
我们只需要把之前那个input标签的onchange的属性删除,让上传的时候触发不了这个方法
就可以达到我们上传的目的
然后我们上传我们的php一句话木马
访问路径,测试一下我们的一句话是否能执行
第二个栏目是考MIME的
什么是MIME可以百度一下
php里有一个$_file函数来获取请求头里面的Content-Type
因此,我们只需要用抓包修改请求头里Content-Type的值
就可以绕过验证
第三个栏目—getimagesize
getimagesize()这个函数返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题
我们可以伪造图片头
我们先普及一下基础知识
先查看一下他们的图片头
用linux的xxd命令
发现png图片的头部十六进制都一样
那我们可以用windows的cmd命令把一张图片和一个php文件合起来变成一个文件
安排一手
选择两个文件
合成一个新的文件叫xxx.png
表面上看还是这个图片
我们把xxx丢进kali看看
发现前面还是正常的图片,但是在最后跟上了我们的一句话木马
还需要了解的是
PHP的文件包含
include在发现错误的时候会继续执行后面的代码
当遇到我们的png的时候,会一直往下读取,执行到我们的一句话的时候就会正确执行
上传的时候我发现在21行会报错
测试后把这半条代码删除就可以正常上传
成功上传了我们的xxx.png
我们来访问一下
发现可以正常访问
但是,他是一个png
那么我们要这么才能让他执行里面的php代码呢
就要用到我们之前的文件包含漏洞
那就要让本地文件包含漏洞找到我们的png图片
发现我们上传的文件在这个文件夹之下那么我们就可以拼凑出
unsafeupload/uploads/7043985d85e8876ad12573844907.png
来进行测试,看看网站是否能找到我们的png
反正就是大概猜测在哪个目录能访问我们图片所在的路径
../../unsafeupload/uploads/7043985d85e8876ad12573844907.png
经测试我们可以用这个路径访问到我们的phpinfo
往下拉就能看到
最新文章
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
- python实现网络爬虫下载天涯论坛帖子
- iOS开发——高级篇——图片轮播及其无限循环效果
- refactor window_x64微信小程序环境搭建
- X.Org可能将失去它的域名x.org
- Running With xpi
- 为什么for(int i=0;i<;9;i++) 在c语言中是错误的?
- linux代码段,数据段,BSS段, 堆,栈(二)
- 利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)
- dubbo监控活跃线程数
- C++数组(指针)作为函数参数
- xp 下卸载 硬盘安装的 ubuntu (本人的悲伤史)
- UVA 572 Oil Deposits油田(DFS求连通块)
- css3学习01
- 详解Linux进程(作业)的查看和杀死
- “基于数据仓库的广东省高速公路一张网过渡期通行数据及异常分析系统";已被《计算机时代》录用
- Intellij Idea中如何debug本地maven项目
- The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer (单调栈+线段树)
- Educational Codeforces Round 62 (Rated for Div. 2)C
- mybatis入门篇:mybatis动态SQL
热门文章
- Java递归练习201908091049
- Let‘s play computer game(最短路 + dfs找出所有确定长度的最短路)
- 从上帝视角看Java如何运行
- 《Three.js 入门指南》3.1.1 - 基本几何形状 -多面体
- idea 本地代码被覆盖问题
- 标准与扩展ACL
- 百度找不到,但高手都知道(感觉他们都知道)的一个小细节--BUG调试报告
- 虚拟机的vmnet8网卡找不到了
- MTK Android Driver :Battery电池曲线
- Linux服务器 上传/下载 文档/目录