最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

当前通讯!upload-labs writeup

来源:博客园

pass-1 js绕过

使用js在本地对文件进行校验

解决方法1:浏览器禁用js可实现绕过解决方法2:bp抓包


(资料图片)

将jpg改为php就可实现绕过

解决方案3:将网页下载下,删除过滤的js,在form提交表单中添加action属性,将其发送给原本应该正常发送的地址(查看请求头的URL)。这种方案可以解决一些判断文件以及提交文件都用js,从而导致无法抓包的问题

pass-2:MIME检验

if (($_FILES["upload_file"]["type"] == "image/jpeg") || ($_FILES["upload_file"]["type"] == "image/png") || ($_FILES["upload_file"]["type"] == "image/gif")) 校验代码判断文件的type类型是否为jpg/png/gif三种格式之一绕过方法1:先将php后缀改为jpg/png/gif三种其中之一,然后抓包改为php绕过方法2:直接上传php文件,然后抓包修改数据包中Content-Type类型

pass-3:黑名单绕过

这一关提示

查看校验代码

绕过方法1:双写::\(D::\)DATAATA校验代码只校验一次::$DATA所以可以双写绕过

::\(DATA是window系统特有文件流,::\)DATA可以绕过对文件上传的安全检查,image.php::$DATA上传以后在服务器会存储为image.php绕过方法2:扩展名绕过使用php5/php4/phtml等扩展名进行绕过注:扩展名绕过需要在phpsstudy中的http.conf增加

版本太新的phpstudy即使添加了也不能上传成功,建议使用版本较早的版本

pass-4:.htaccess绕过

黑名单限制增加,但没有限制.htaccess

.htaccess 是一个 Apache Web 服务器的配置文件名字内带有jpg的文件都以php格式解析

先上传.htaccess文件,在上传shell

pass-5 .user.ini绕过

.user.ini是一个配置文件,用于设置PHP运行环境中的各种配置设置。.user.ini配置 使其自动包含shell.jpg文件到每个PHP文件的开头。auto_prepend_file=shell.jpgshell.jpg先上传.user.ini再上传shell.jpg

pass-6:大小写绕过

校验代码相比之前少了,转换小写,搭建平台window对大小写不敏感

绕过方法1:大小写绕过

绕过方法2:双写::$DATA

pass-7 空格绕过

少了trim函数

直接后面添加空格进行绕过

pass-8 点绕过

没有使用函数deldot,在window中点和空格都是不被允许的

pass-9 ::$DATA绕过

直接::$DATA绕过

pass-10 点空格点绕过

这一关主要针对deldot函数进行绕过,deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来遇到deldot()函数可以在后缀名后加入". .",这就是点空格点绕过,空格负责将deldot()停止,然后会被trim函数删除,但是会剩下一个点,上传到服务器,点也会被删除

pass-11:双写绕过

代码先创建一个黑名单,然后接收上传文件的后缀名,去除黑名单内的字符,但只进行了一次绕过,所以可以进行双写绕过

pass-12 %00截断

00截断条件:php版本小于5.3.4php的magic_quotes_gpc为OFF状态服务器版本

审计代码

上传路径可控,使用get传参那就可以使用%00截断

pass-13 0x00截断

与12关代码大同小异,唯一不同的就是传递的存储路径由get改为post

get传参会经过编码,post不会,所以使用0x00截断截断需要在十六进制中将传递的名字后面写为00

或者直接写%00然后对其进行url编码

pass-14 文件包含

getReailFileType函数读取文件前两个字节判断是否为jpg,png,gif其中之一

判断上传文件是否满足要求,满足则随机命名存入文件夹

制作图片马,直接在图片后插入

文件包含漏洞,接收get传入的file参数

访问url:include.php?file=upload/4620230414113629.png

pass-15 getimagesize()+ 文件包含

与十四关大同小异,只是换成getimagesize()来检查文件getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息

直接上传图片马,然后访问url:include.php?file=upload/图片命名.jpg

pass-16 exif_imagetype()+文件包含

需要开启php_exif模块,否则会界面无法显示

exif_imagetype()函数:读取一个图像的第一个字节并检查其签名,如果发现恰当的签名返回一个对应的常量,否则返回false。返回值和getimagesize()返回值的数组中的索引2的值是一样的,但本函数快的多。直接用之前图片马即可

pass-17 二次渲染+文件包含

代码使用imagecreatefromjpeg函数对图片进行渲染

我们可以先上传一个gif图片然后下载渲染过后的gif,二者使用010进行对比,查看有哪些地方是不会被渲染所更改的

然后在不会被渲染的地方添加phpinfo

成功上传

pass-18 条件竞争

根据代码可以看出,先将上传文件放到目录下,然后再进行条件判断,不满足白名单则删除

可以使用burp爆破模块,进行爆破,然后再不断访问上传脚本,只要访问到,就会打断代码删除文件的操作不断访问

pass-19 条件竞争+apache未知扩展名解析漏洞

本关代码有点小问题,需要修改myupload.php

代码审计可知,跟18关大致类型一致,不过限制更加严格一些,思路是相同的,在文件被上传但还未重命名的时候访问这是可以上传的后缀名单,这样就可以使用apache未知扩展名解析漏洞,遇到无法解析的后缀就往前挪一个

上传shell.php.7z

burp爆破

不断刷新访问

pass-20 move_uploaded_file()特性利用

代码审计可知先将文件上传然后判断传递的保存名称是否存在黑名单,不存在就将其移动到指定目录

由于代码没有对其进行严格的限制绕过,所以之前的大小写,空格,点,::$DATA均可以实现绕过,但由于之前关卡都考过,所以这肯定不是作者重点move_uploaded_file()特性,会忽略掉文件末尾的 /.

上传后直接访问即可

pass-21 逻辑数组绕过

代码将上传文件名分割为数组形式然后进行判断

修改为数组形式上传

关键词: