当前位置:网站首页>网络安全——文件上传内容检查绕过
网络安全——文件上传内容检查绕过
2022-07-24 13:33:00 【Beluga】
文件上传内容检查绕过
第一步,打开网络拓扑,启动实验虚拟机。
第二步,打开桌面上的Chrome浏览器,在地址栏中输入http://127.0.0.1,进入upload-labs页面中,然后点击左侧的导航栏Pass-13进入关卡13

在任务提示中要求上传格式为.jpg\.png\.gif且包含一句话或webshell的图片马,点击查看源代码按钮

在代码的第四行$bin = fread($file, 2);读取文件的前两个字节,接着往下看出现了一个unpack函数,将字节字符串解包成变量,并将变量存放在两个数组分别为chars1和chars2中,并由intval转换为十进制,经过了这一段代码的处理后,文件头中的前面两个字节将以十进制的信息表示,接下来是一个switch的判断,判断文件的格式为jpg、png、gif文件则允许上传跳到上传的程序中,否则判断为unknown则提示上传失败。该程序主要是取上传文件的头两个字节判断文件类型,因此此处可直接上传图片马,操作如下:打开桌面上的pentestbox输入命令cd C:\Users\Administrator\Desktop\隐写术Images\gif,

在该文件中创建一个内容为<?php phpinfo(); ?>的shell.php文件,然后使用命令copy cat_tldzFZS.jpg /b + shell.php /a webshell.jpg拼接图片和木马,

将图片移动到桌面上,然后回到上传页面,上传该图片马同时打开代理使用burpsuite进行抓包,

为了方便观察上传后的路径,右键鼠标选择Send to Repeater将数据包发送到Repeater重放器中,然后直接点Go发送数据包

上传成功,关闭代理功能。

第三步,目前该漏洞无法单独进行利用,需要与文件包含漏洞搭配起来进行利用,由于网站为本地环境,我们直接在本地的网站中模拟这一过程,进入路径C:\Program Files (x86)\upload-labs\WWW中,写一个简单的存在文件包含的页面

此文件已写入到网站中,在自己进行实验时可以不用创建,我们直接访问http://127.0.0.1/include.php即可,

接下来构造利用页面结尾添加?file=upload/8620200104160811.jpg,再次访问

利用成功。
第四步,回到网站首页,点击左侧的导航栏Pass-14进入关卡14,依旧是上传图片马,点击显示源码按钮查看源代码

这里用getimagesize获取文件类型,依旧可以使用图片马进行绕过,在这里简单补充一下getimagesize的知识点

用上一步中的图片木马进行上传,并查看/upload/文件夹中的上传的名称

访问/include.php并构造/include.php?file=upload/9120200104164552.jpeg

第五步,再次回到网站首页,点击左侧的导航栏Pass-15进入关卡15,依旧是上传图片马,点击显示源码按钮查看源代码发现更换了函数

使用了exif_imagetype()函数,读取一个图像的第一个字节并检查其签名,其绕过方法同Pass-13一样,省略复现过程,以上实验完成后。
第六步,进入网站首页,点击左侧的导航栏Pass-16进入关卡16,依旧是上传图片马,点击显示源码按钮查看源代码

通过审阅整个文件的代码,判断了后缀名、centent-type以及利用imagecreatefromgif/jepg/png判断是否为gif、jepg、png图片,最后又做了一次二次渲染。单独看一下文件中关于检测gif的代码

第61行通过两个函数$fileext和$filetype检测文件是否为gif格式,第62行使用了move_uploaded_file函数来做条件判断,如果成功将文件移动到$target_path,就会进入二次渲染的代码,反之则上传失败

这一关破解的思路大致为:首先上传一个gif图片,然后将上传的gif和本地的gif图片进行对比,找出仍然相同的数据块部分,然后将phpinfo()函数的代码插入进去。
第七步,首先上传一张普通的gif图片,进入C:\test路径,将图片test.gif复制到桌面上,改名为1.gif然后再网页中上传1.gif

访问/upload/

点击4575.gif打开图片将文件另存为到本地保存为2.gif

然后使用桌面上的Hex Editor Neo打开2.gif图片与1.gif进行对比发现在a0行的地方两个图片的内容一致,

直接将2.gif的a0位置的字符修改为<?php phpinfo(); ?>

最后将文件保存为3.gif,进行上传。访问upload目录获得文件上传后的名称

使用include.php包含该文件

边栏推荐
- AtCoder Beginner Contest 261 F // 树状数组
- An example of how to save various data types by using esp32 EEPROM library functions under Arduino framework
- How to quickly learn Embedded
- Easycvr platform security scanning prompt go pprof debugging information leakage solution
- 基于群体熵的机器人群体智能汇聚度量
- Kunyu(坤舆) 安装 详解
- Packaging class (mutual conversion between types)
- Vscode configuration user code snippet (including deletion method)
- Atcoder beginer contest 261 f / / tree array
- Windivert: capture and modify packages
猜你喜欢
随机推荐
AtCoder Beginner Contest 261 F // 树状数组
Go deadlock problem
WSDM 22 | 基于双曲几何的图推荐
Notes on Linear Algebra -- lesson 25 -- projection of vectors on axes
Make a fake! Science has exposed the academic misconduct of nature's heavy papers, which may mislead the world for 16 years
2022.07.21
Chat room project
Introduction of embedded network interface scheme and summary of driver debugging methods
DDD based on ABP -- Entity creation and update
Interview question 01.02. determine whether it is character rearrangement
如何生成预期数据?埃默里大学等最新《深度学习可控数据生成》综述,52页pdf涵盖346篇文献全面阐述可控生成技术体系
网络安全——Web信息收集
An example of how to save various data types by using esp32 EEPROM library functions under Arduino framework
现代数据架构选型:Data Fabric、Data Mesh
Vscode configuration user code snippet (including deletion method)
Basic operation of file
Chrome plug-in development tutorial
Network security -- man in the middle attack penetration test
[paper reading] temporary binding for semi-superior learning
ESP32ADC









