upload-labs打关详解
1-19关
00x01 JS检查
方法一.修改javascript代码,将.php添加到允许上传的类型中
3.上传成功
方法二:绕过前端,通过burpsuit抓包,上传一张info.jpg图片,然后抓包之后,将后缀改为.php,发包上传成功
00x02 服务端对数据包的MIME进行检查
1. burpsuite类型type绕过,上传.php文件,然后拦截,将类型改为image/jpeg
,发包,上传成功
00x03 黑名单,禁止上传.asp|.aspx|.php|.jsp后缀文件
1.尝试通过phtml,php3,php4,php5,pht后缀名绕过
上传成功
2.第二种方法是直接上传.htaccess,实现重写文件解析,可以直接上传图片自动解析成php文件。
00x04 黑名单,.htaccess上传解析
1.过滤了很多后缀文件,但是没有过滤.htaccess文件,可以重写文件解析规则绕过,上传一个.htaccess
2.然后再上传一个含有phpinfo()的jpg文件,就可以解析为php文件执行
00x05 黑名单
1.还是黑名单,且加上了.htaccess,但是没有将后缀进行大小写统一,于是大小写绕过:
2.访问成功
00x06 黑名单,空绕过
1.还是黑名单,但是没有对后缀名进行去空处理,可在后缀名中加空绕过:
2.上传成功
00x07 黑名单,点绕过
1.还是黑名单,但是没有对后缀名进行去“.”处理,因此可在后缀名中加“.”绕过(php代码中少了$file_name = deldot($file_name);/删除文件名末尾的点)利用windows特性,会自动去掉最后的”.”
00x08 黑名单,::$DATA绕过
1.还是黑名单,但是少了这一行代码$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
因此可以在后缀名加”::$DATA”绕过(利用windows特性)。
上传成功
00x09 黑名单,配合解析漏洞
1. 这一关像是前几关的组合拳,虽然把最后的点给删掉,但是仍然可以绕过,因为这里的过滤并没有递归下去,只是一步,这样就相当于SQL注入里面用str_replace只过滤一次关键字一样
2. 可以遵循着他的步骤去实现自己的payload,可以这样设置(点+空格+点),经过处理后,文件名变成info.php.,即可绕过。
3.然后就可以访问info.php了。
00x10 黑名单,双后缀名绕过
1. 依旧是黑名单过滤,注意到,这里是将问题后缀名替换为空,于是可以利用双写绕过:$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
00x11 白名单,%00截断(需要两个条件:php版本小于5.3.4;php的magic_quotes_gpc为OFF状态)
1. 另save_path等于下面的值:../upload/4.php%00
00x12 白名单,00截断
1. 和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。
00x13 白名单,图片马
从这一关开始要求上传图片马,但是没有办法直接执行图片马,需要另外的方法去实现一般是加上php伪协议去getshell,常见的有phar,zip等等
如果想要看到详细的效果可以写一下简单的脚本放在upload目录下即可,
<?php
@include $_GET[file];
?>
最最最简单的图片马直接一条命令即可生成
copy normal.jpg /b + shell.php /a webshell.jpg
上传一个图片马,内容如下,可以看到里面有脚本语言
把该图片上传上去,尝试文件包含,成功回显
00x14 白名单,图片马
类似上一个题目,获取了图片的相关的大小及类型,并验证是否时刻上传的图片,同样可以使用文件头的方式绕过
$info = getimagesize($filename);
$ext = image_type_to_extension($info[2]);
说明info[2]是一个文件的类型,同样的方法也是可以绕过的
00x15 白名单,图片马
换了一个获取图片信息的函数
//需要开启php_exif模块
$image_type = exif_imagetype($filename);
跟pass-13一样的绕过方法
00x16 白名单,图片马
这一关对后缀名和文件类型啥的都进行了很严格的控制,而且在后面还对图片进行了二次编译
//使用上传的图片生成新的图片
$im = imagecreatefromjpeg($target_path);
这一个题目跟上次校赛的题目思路一致,寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传,下载下来后发现这一部分插入代码的没变但是其他部分都变了
尝试文件包含,后面怎么利用就不多说了
00x17条件竞争
代码审计一波,发现有unlink()
函数,此函数是删除文件的作用,
这里先将文件保存在服务器中,再判断后缀名,若后缀名不合法则删除文件
通过条件竞争的方式在unlink
之前,访问上传文件。
利用条件竞争删除文件时间差绕过。
上传一个含有phpinfo()函数的php文件试试,然后burp抓包
放到inruder里面,然后清除掉所有被选则的值,因为这里不是爆破,而是让其大量重放包
发送大量的包,然后start attack,之后浏览器一直刷新访问我们上传的这个php文件
刷新访问成功
00x18 条件竞争2
解题思路
- 对文件后缀名做了白名单判断,然后检查文件大小、文件是否存在等等。
- 将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。
初始文件命名规则$this->cls_upload_dir . $this->cls_filename
,重命名规则$this->cls_upload_dir . $this->cls_file_rename_to
,当大量文件需要被重命名时就会出现条件竞争
- move在rename之前,move操作进行了一次文件保存, 然后rename进行了一次更改文件名。
- 利用burp不间断地发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。
- 查看配置
mime.types
,这里记录着可被Apache
服务器所识别的文件属性:#application/x-7z-compressed 7z
7z
后缀并不被Apache
服务器所识别,却在上传文件名后缀的白名单中,可以利用Apache的解析漏洞
将上传的7z
后缀文件当做php
文件解析。 Apache的解析漏洞
Apache
服务器在解析多后缀文件名的文件时,会从后往前辨别后缀,一直辨别到可以解析的后缀。
利用burp不停发包方法同上题
浏览器一直刷新访问上传的文件名
或者上传的图片马
00x19黑名单策略,文件名用户可控
提示与查看源码
本pass的取文件名通过$_POST来获取。
名单策略,文件名用户可控,文件命名info.php.
绕过
上传info.php文件,保存名称改为info.php.绕过黑名单
上传成功
参考:https://segmentfault.com/a/1190000019450720#articleHeader77
upload-labs打关详解的更多相关文章
- sqli-labs第二关 详解
学会了第一关,时隔多天来到了第二关,怎么说了没有看wp就给做出来了. 首先,我是自己先判断了下,这个是什么注入 ?id=1' 不行 ?id=1' or '1'='1--+ 也不行 然后又尝试了下 ?i ...
- sqli-labs第一关 详解
sqli-labs第一关 方法一:手工注入 方法二:sqlmap工具 两种方式,都可以学学,顺便学会用sqlmap,也是不错的.不多说,我们开始吧 方法一: 来到第一关,图上说我们需要一个数字的参数 ...
- Centos系统各种日志存详解
Centos系统各种日志存储路径和详细介绍 Linux常见的日志文件详述如下 1./var/log/boot.log(自检过程) 2./var/log/cron (crontab守护进程crond所派 ...
- MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动
MVC图片上传详解 MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...
- SpringBoot配置文件 application.properties详解
SpringBoot配置文件 application.properties详解 本文转载:https://www.cnblogs.com/louby/p/8565027.html 阅读过程中若发现 ...
- Upload-libs通关详解
Uplo ad-labs—详解 1前端验证绕过 前端验证绕过可以直接用burp万能绕过前端JS脚本 方法先上传一张jpg Burp改包然后改后缀 上传成功 2Content-Type方式绕过 此绕过方 ...
- SpringMVC详解及SSM框架整合项目
SpringMVC ssm : mybatis + Spring + SpringMVC MVC三层架构 JavaSE:认真学习,老师带,入门快 JavaWeb:认真学习,老师带,入门快 SSM框架: ...
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...
- 3.awk数组详解及企业实战案例
awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...
随机推荐
- 文本段落缩进text-indent:2em
中文文字中的段前习惯空两个文字的空白,这个特殊的样式可以用下面代码来实现: p{text-indent:2em;} <p>1922年的春天,一个想要成名名叫尼克卡拉威(托比?马奎尔Tobe ...
- 「C++ 」借来的资源,何如还的潇洒?
前言 本文的内容将专门对付内存管理,培养起有借有还的好习惯,方可消除资源管理的问题. 正文 所谓的资源就是,一旦用了它,将来必须还给系统.如果不是这样,糟糕的事情就会发生. C++ 程序内常见的资源: ...
- 用原生JS&PHP简单的AJAX实例
功能介绍: 1)file.html 使用 xmlhttp 请求服务器端文件 text ,并更新 file.html 的部分内容 2)update.html 使用 xmlhttp 通过 filewrit ...
- Redis常用命令之操作String类型
场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...
- POSIX简介
POSIX:Potable Operating System Interface of UNIX (可移植操作系统接口),是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的 ...
- Node.js文档-模块
核心模块 Node为Javascript提供了很多服务器级别的API,绝大多数都被包装到了一个具名的核心模块中,例如文件操作的fs核心模块,http服务构建的http模块等,核心模块的使用必须通过re ...
- 在阿里云服务器上安装mysql及重置密码
参考链接:https://www.cnblogs.com/ljysy/p/10324854.html 下载与安装MySQL: 这里采用Yum管理好了各种rpm包的依赖,能够从指定的服务器自动下载RPM ...
- LNMP+HTTPS
title: "Lnmp + Https" date: 2019-08-28T16:18:20+08:00 draft: true --- 注:我的linux的ip地址为192.1 ...
- 【python基础语法】第3天作业练习题
''' .将给定字符串的PHP替换为Python best_language = "PHP is the best programming language in the world! &q ...
- 使用SSM 或者 springboot +mybatis时,对数据库的认证信息(用户名,密码)进行加密。
通常情况下,为了提高安全性,我们需要对数据库的认证信息进行加密操作,然后在启动项目的时候,会自动解密来核对信息是否正确.下面介绍在SSM和springboot项目中分别是怎样实现的. 无论是使用SSM ...