当前位置: 首页 > news >正文

upload-labs靶场通关指南(9-11关)

今天继续给大家介绍渗透测试相关知识,本文主要内容是upload-labs靶场通关指南(9-10关)

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、第九关

(一)代码分析

第九关关键代码如下所示:
在这里插入图片描述

(二)绕过思路

分析上述代码,发现这一关对文件后缀名的检测没有过滤::$DATA,Windows系统会把::$DATA当作文件流来进行处理,在文件名后面添加::$DATA可以绕过上述检测代码的查验,但是当PHP尝试将上述文件写入到Windows系统中的目录时,Windows系统就会自动的把文件后面的::$DATA删除,这样就使得该文件的后缀名称为了PHP,从而可以被解析执行了。

(三)绕过实战

利用上述检验代码的漏洞,我们可以抓包,然后在上传文件的名称后面添加::$DATA,修改后的数据包如下所示:
在这里插入图片描述
放行该数据包后,我们就可以看到该文件上传成功,如下所示:
在这里插入图片描述

我们在得到该文件的地址后,去掉后面的::$DATA,发现该文件已经被解析成功,如下图所示:
在这里插入图片描述

二、第十关

(一)代码分析

第十关关键代码如下所示:
在这里插入图片描述

(二)绕过思路

从上述代码可以看出,上述代码中既有对文件末尾的点符号的过滤,也有对::$DATA的过滤,含有对文件末尾空格的过滤,似乎是非常完善,但是依然存在漏洞。我们可以根据源码,根据过滤的顺序,来个性化的定制针对上述过滤的文件名。上述过滤的顺序是先删除文件最后的空格,再上传文件末尾的点,将文件后缀名提取并全部转化成小写,然后删除::$DATA字符串,最后再次删除文件末尾的空格。
针对上述过滤逻辑,我们可以构造文件名称为exp.php. .(注意该文件的两个点中间有个空格),这样,当我们的文件上传后,过滤逻辑会依次去除该文件的空格和最后面的点符号,这样该检测逻辑提取出的后缀名为一个点符号,这显然可以绕过黑名单的检测。而当该文件传输到目标文件夹后,由于Windows系统的特性,会自动删除文件名后面的两个点和一个空格,从而使得该文件的后缀名变成了PHP,这样就使得该文件可以被解析。

(三)绕过实战

根据上述逻辑,我们可以进行实战。抓包后将上传文件的名称修改为exp.php. .,修改后的数据包如下所示:
在这里插入图片描述
放行该数据包后,我们即可访问到我们上传的文件,并发现该文件能够被正常解析,如下所示:
在这里插入图片描述

三、第十一关

(一)代码分析

第十一关关键代码如下所示:
在这里插入图片描述

(二)绕过思路

从上述代码可以看出,并不完全是采用黑名单的过滤方式,而是对匹配黑名单的字符串替换成了空字符串,并且此过程仅仅进行了1次,因此显然我们可以使用双写绕过。
事实上,几乎所有类似的防护逻辑我们都可以采用双写的方式来进行绕过,这种绕过方式可以用在XSS漏洞攻击、SQL注入攻击以及本次实例中的文件上传漏洞攻击。

(三)绕过实战

根据上述分析,我们就可以进行上传的实战了,只需要把文件名改为exp.pphphp即可,这样当代码删除最中间的php以后,剩下的内容就会自动形成新的后缀名php。
上传文件如下所示:
在这里插入图片描述
在上传文件后,我们就可以访问我们上传的文件,发现该文件能够成功解析,如下所示:
在这里插入图片描述
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

相关文章:

  • 【Arduino+ESP32专题】案例:使用INA3221监控电压电流
  • 微信小程序——语法篇
  • 【数据结构】交换排序之冒泡排序与快速排序
  • 第二十七章 使用后台任务页面
  • 【Hive】建表时的存储格式
  • 计算机网络 | 计算机网络体系结构
  • 【云原生】Docker的安装和卸载
  • 古琴【A5】良宵引
  • Causality
  • 【云原生 • Kubernetes】kubernetes 核心技术 - 持久化存储
  • 剑指offer--重建二叉树
  • 索引优化分析_预热_JOIN
  • 【Django】开发日报_1_Day:创建项目
  • 期末作业C#实现学生宿舍管理系统
  • 【算法刷题日记之本手篇】微信红包与计算字符串的编辑距离
  • C++类的相互关联
  • Git学习与使用心得(1)—— 初始化
  • HTML-表单
  • JAVA_NIO系列——Channel和Buffer详解
  • Java读取Properties文件的六种方法
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • unity如何实现一个固定宽度的orthagraphic相机
  • 将回调地狱按在地上摩擦的Promise
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用parted解决大于2T的磁盘分区
  • 异步
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 2017年360最后一道编程题
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​业务双活的数据切换思路设计(下)
  • $.each()与$(selector).each()
  • (11)MATLAB PCA+SVM 人脸识别
  • (C语言)fread与fwrite详解
  • (二)WCF的Binding模型
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)jdk与jre的区别
  • ***利用Ms05002溢出找“肉鸡
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET DataGridView数据绑定说明
  • .net framework4与其client profile版本的区别
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [100天算法】-不同路径 III(day 73)
  • [100天算法】-目标和(day 79)
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [bzoj2957]楼房重建
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [C++]运行时,如何确保一个对象是只读的
  • [CSS]中子元素在父元素中居中
  • [English]英语积累本
  • [GN] DP学习笔记板子