目录

前言

mime类型:

htaccess文件:

::$DATA

图片马

方法一cmd copy命令

方法二使用反汇编工具c32asm在16进制下添加

方法三使用ps工具

move_uploaded_file的小特点

pass-1-js验证:

pass-2-只验证Content-type:

pass-3-后缀名验证:

pass-4-htaccess

注意

pass--5--点-空-点:

pass-6-大小写绕过

pass-7-空点

pass-8-点空格

pass-9-::$DATA

pass-10

pass-11-双写绕过

pass-12-%00截断

pass-13-%00截断

pass-14-上传图片马

pass-15-getimagesize绕过

pass-16-exif_imagetype绕过

pass-17-二次渲染

pass-18-条件竞争

pass-19-条件竞争

pass-20-自定义保存路径

pass-21-数组绕过

总结


前言

upload-labs 我来了


mime类型:

MIME(多用途互联网邮件扩展类型)_百度百科

我自己在搭的留言板中上传图片就是使用mime类型验证,判断收上来的文件属不属于我限定的mime类型,来过滤。

htaccess文件:

htaccess_百度百科

可以修改目录文件,或指定文件的编码格式

提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

简单来说,我们需要的是其改变指定文件解析方式的作用,可以将我们上传的jpg文件使用php进行解读(setHandler)

ps1:启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。

ps2:  .htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。

::$DATA

在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过。

图片马

三种合成方式:

方法一cmd copy命令

完成后

发现ma.jpg文本中出现了一句话木马

ps:最好不要直接使用记事本添加,由于编码的问题,极容易是图片无法正常显示

copy命令中/b是以二进制进行

方法二使用反汇编工具c32asm在16进制下添加

ps最好在最后添加,在中间添加可能是图片不发完全显示。。

二且这个方法你直接记事本打开是看不到一句话木马的,因为咱们是16进制写进去的嘛,嘿嘿

方法三使用ps工具

进入ps,打开图片,在文件简介处直接添加木马。。

move_uploaded_file的小特点

该函数会忽略掉文件末尾的 /.(懂得都懂233)


pass-1-js验证:

本题为js过滤

对此我们可以直接禁用js,这样就可以上传php文件了,也可以通过burp抓包,在burp中将jpg改为php,之后在右键图片,在新标签中打开,即可获得其保存路径。。通过这样我满便可以将一句话木马上传至服务器233.

pass-2-只验证Content-type:

先上传一个正常图片,抓包,观察

发现有mime类型传递,大概率是mime检查没跑了,这里直接修改filename,改为php文件,即可成功上传webshell,因为发送的包中content-type是mime类型,而在服务器只会检查contene-type而不会检查文件后缀名233

ps:同样可以直接上传一个php文件,通过抓包修改content-type为合法的值。。

pass-3-后缀名验证:

本题在pass2的基础上有加入了后缀名过滤,

除了使用mime类型还加入了后缀名限制

对此,既然已经知道限制了那些文件,那我们不用只写文件不就行了,完全可以使用PHP3嘛233

ps:选择后缀名时应该确认靶机httpd上开启了对应后缀名的使用

pass-4-htaccess

黑名单拒绝了几乎所有有问题的后缀名,除了.htaccess


前提条件(1.mod_rewrite模块开启。2.AllowOverride All
因此先上传一个.htaccess文件,内容如下:

注意

.htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。

<FilesMatch "shell"> //使用正则表达式匹配,匹配到shell就执行
SetHandler application/x-httpd-php  //将改文件使用php解析,不考虑其后缀名
</FilesMatch>ps,FilesMatch的作用是匹配限制,不加也可以,如果不加的话,.htaccess文件所在的目录下所有文件都会以php方式解析

上传完.htaccess后,再上传装有木马的shell.jpg,

即可

成功上传webshell

pass--5--点-空-点:

审计源码后我们发现,本题只检验了一次,没有进行循环检验,那么我们完全可以将文件后缀名改为.php. .在过滤时,先把最后面的点给删掉,在收尾去空,这样留下了.php.就上传成功了。

ps:不知道为什么,高版本的php已经不可以在这么进行了,好像是不在识别.php.了,推荐使用php5

pass-6-大小写绕过

阅读源码可知相比于其他题,本题没有变小写这个过程

因此,直接改名.PHP ,成功上传

pass-7-空点

审计源码

最后没有删除空格,所以直接上传文件.pjp .(空格加点),即可绕过

完美

pass-8-点空格

审计源码

没有去掉末尾的点,因此可以上传文件.php. (点加空格)绕过

跟上关几乎一模一样

pass-9-::$DATA

审计源码,可是没有过滤::$DATA

直接走起

成功上传

完美

pass-10

emm,跟第五题一毛一样。。。。可能是重了吧

估计是我安装时bug了

pass-11-双写绕过

哦吼,这个我熟,跟sql注入绕过删除过滤一毛一样,嘿嘿

双写绕过

完美

至此,黑名单绕过已经刷完,下面几道题均为白名单限制,这才是最常见的

pass-12-%00截断

ps%00在oho5.3之后已经不能用了,我的PHP最低版本为5.6,懒得下5.2了,这儿题就跳过吧

大致思路就是再上传时将get参数savepath修改一下,改成 /upload/shell.php %00

ps:经过多次试验,发现使用注释符(";#或者";//)可以绕过检测但不知为何move_uploaded_file($temp_file,$img_path)报错,导致无法正常上传,待解决。

pass-13-%00截断

与12题一样,只是本题采用post方式传参,注意解码,get会自行解码,post不会自行解码233

pass-14-上传图片马

合成图片马将一个正常的jpg/png/gif文件与一个木马php等文件合并形成图片马,如果有文件包含漏洞(类似.htaccess),即可将图片马直接当做php脚本文件执行

另,本题对图片头两个字节进行检查,看是否为图片的,我们是在文件最后面加上木马的完全不需要担心

完美

pass

pass-15-getimagesize绕过

getimagesize()简介

这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的

因此本题跟上题一样,我们直接过

pass-16-exif_imagetype绕过

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

本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。

但依然难不倒我们,跟14题一个解法233

pass-17-二次渲染

本题详情见(3条消息) upload-labs之pass 16详细分析_q1415500189的博客-CSDN博客

ps:png运行完脚本之后,会插入<?php $_GET[0]($_POST[1])?>

需要传入get的0= 以及post的1= 才能运行。。。

害,还是得用别人的东西,太菜了我

pass-18-条件竞争

第十八关主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下,如图操作(先把变量删了)

然后如图操作修改(让我们访问是不带payload)

然后发包,用另一个浏览器一直访问2.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了233。(卡吧)

成功卡如,但现在问题是,一旦结束攻击,他依然会被删掉这个文件

pass-19-条件竞争

ps:本题保存路径好像有问题,没有保存到upload,我们把它改一下

很明显它$dir后面忘加上.'/'了,我已经帮他加上了

本关经过代码审计,感觉像是是18与19关的融合吧,依然是条件竞争,不过这次我们只能上传图片马,用burpsuite爆破,然后用前几关的文件包含漏洞打开。

这关是检查了后缀名,然后上传,然后在进行二次渲染。这时我们只能上传图片马,而且得配合解析漏洞进行通关

操作和18关的一样,就是访问地址是加上包含漏洞的。

没什么问题,这些漏洞其实都是逻辑上的漏洞,二次渲染本身是没什么问题的。如果人家先验证在进行上传那就没有办法了。

pass-20-自定义保存路径

move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.

所以我们把他修改为如图所示

上传

完美

pass-21-数组绕过

审计源码:

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){//检查MIME$allow_type = array('image/jpeg','image/png','image/gif');if(!in_array($_FILES['upload_file']['type'],$allow_type)){$msg = "禁止上传该类型文件!";}else{//检查文件名$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];if (!is_array($file)) {$file = explode('.', strtolower($file));}$ext = end($file);$allow_suffix = array('jpg','png','gif');if (!in_array($ext, $allow_suffix)) {$msg = "禁止上传该后缀文件!";}else{$file_name = reset($file) . '.' . $file[count($file) - 1];$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' .$file_name;if (move_uploaded_file($temp_file, $img_path)) {$msg = "文件上传成功!";$is_upload = true;} else {$msg = "文件上传失败!";}}}
}else{$msg = "请选择要上传的文件!";
}

很容易发现,它最后在合并文件名称时没有使用end,而是使用了数字下标,要知道,php里数组是既可以由下标索引,也可以有键值索引的,再加上前面第11行,如果上传的是数组,就不拆字符串,这都把答案拍你脸上了,比如如我们上传的数组是这样的

$save_name=array('0':payload_20,'2':php,'3':jpg
);

显然在检验后缀名时end()函数取出的是jpg,而在合并文件名时取出的php.

综上,我们在burp中将上传的savename改成数组,格式如下

上传

完美


总结

至此upload-labs篇完结,撒花,芜湖。。。。

我觉得这uplaod-labs是挺不错的,将大部分文件上传都给你出上了,对我这种小白真的帮助非常大,感谢upload-lab作者。。

upload-labs刷题小记相关推荐

  1. 天梯赛刷题小记 —— L1

    最近在重刷 天梯赛,浅浅记录一下,就不管简易程度了 感觉已经很久没有做题了qaq L1-002 打印沙漏 解题思路:循环结构 AC代码: #include <bits/stdc++.h> ...

  2. 兜兜的乐扣刷题算法小记(不停更)

      根据题目,分析数据,找到规律!!!!!!!!题目数量很多,要想基本都会,就必须多练多见.量变导致质变.         "画图"帮助理解 Recursive Tree.     ...

  3. CTF刷题网站汇总(包括本地可以自己搭建的)(1)

    CTF刷题网站汇总(包括本地可以自己搭建的) CTF刷题平台汇总(欢迎各位师傅们补充) 第一个当然是CTFshow啦!https://ctf.show/ 攻防世界 https://adworld.xc ...

  4. Upload labs

    Pass -01(js检查) 题目基于前端js过滤,只能上传图片格式的文件,所以我们用一句话木马,改后缀上传后,用burp抓包,修改文件后缀为php,然后用蚁剑连接, 注意: 文件没有上传在具体题目中 ...

  5. BUUCTF-2020寒假刷题记录

    BUUCTF-2020寒假刷题记录 Web [RoarCTF 2019]Easy Calc 打开源码,看到calc.php,打开看到源码. 在 num 前面加个空格即可绕过 ? num=phpinfo ...

  6. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十四)自动刷题

    前文 JavaScript--易班优课YOOC课群在线测试自动答题解决方案(一)答案获取 Spring Boot--易班优课YOOC课群在线测试自动答题解决方案(二)答案储存 Spring Boot- ...

  7. 【CTF】CTF竞赛介绍以及刷题网址

    CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过 ...

  8. BUUCTF刷题记录(7)

    文章目录 web [NPUCTF2020]ezinclude [NPUCTF2020]ReadlezPHP [GXYCTF2019]BabysqliV3.0 非预期1 非预期2 预期 [NCTF201 ...

  9. 在线考试系统源码,线上即可完成考试+刷题+练习等功能的学习系统

    在线考试是当前软件开发商研究的一个热门. 通过在线考试系统源码搭建的考试系统,皆可实现题目生成,试卷提交,成绩批阅等,让学员在线上即可完成考试+刷题+练习,既摆脱了时间.空间的限制,减轻教师工作负担, ...

最新文章

  1. DARPA人工智能技术研究情况一览
  2. android项目中记录ListView滚动停止位置与设置显示位置
  3. JEECG 3.2版本发布,基于代码生成器的智能开发平台
  4. 联邦学习在视觉领域的应用,揭秘2020年AAAI人工智能创新应用奖获奖案例!
  5. java中的强软弱虚_详解Java的四种引用——强软弱虚,颠覆你的认知!
  6. Linux ACL 权限
  7. 这样 PDF 的技术简历,HR根本不想看,谈何到面试官手中?
  8. VirtualBox中出现“0x00000000指令引用的0x00000000内存该内存不能为written 和visual studio Just in time debugger error
  9. matlab 图像处理之边缘提取
  10. 春运火车票抢票浏览器强力推荐,秒抢车票到手
  11. 显卡和CPU的关系像“主仆”,GPU的工作原理是什么
  12. python电影爬虫背景介绍_Python爬虫入门教程01之爬取豆瓣Top电影
  13. 新手做网页设计?这9款经典网页布局设计了解下
  14. android之网络请求 -- 获取RecyclerView的列表项(图片 + 文字)
  15. LiveGBS国标GB/T28181视频流媒体平台云端录像配置开启关闭支持录像计划根据计划自动录制
  16. 转 http://wenku.baidu.com/view/8719b5dad15abe23482f4d9e.html
  17. 电商类产品搜索功能如何优化?
  18. 《猫和老鼠》里的魔术艺术(四)——夸张与对比
  19. java斗地主发牌代码_[Java源码]扑克牌——斗地主发牌实现
  20. CMT2380/HC32L110入门踩坑记录

热门文章

  1. 危害肠道健康的两大敌人:诺如病毒和轮状病毒
  2. A Robot 3C Assembly Skill Learning Method by Intuitive Human Assembly Demonstration论文解析
  3. java getclass用法_java 中getClass()的用法
  4. 学习数据分析:缺失值处理的正确姿势!
  5. 传智播客XMl比较四部曲--(一)个人总结
  6. 今日头条面试官竟然问我new一个对象背后发生了什么?这太难了...
  7. Linux 之父 LinusTorvalds 喊话:Rust 即将出现在 Linux 内核中
  8. VSAM让大型机存储性能重获新生
  9. H.Shifting
  10. 揭秘日收入900+的美女微信收红包项目,请勿操作!