一.前言

upload-labs-master是文件上传靶场,里面目前总共有19关,github地址https://github.com/c0ny1/upload-labs,今天要说的是这个靶场的第七关的解法

二.正文

先看下第七关长什么样

和其他几关一样,咱们先直接看下源码吧

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

说一下上面的代码,虽然php不怎么会但是作者已经把改写的注释已经写上了,所以我就照着作者的注释说一下

$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");#上面这个就是传说中的黑名单了,只要上传的文件的后缀名在这个里边,都会上传不成功,当然绕过方法也是有的
$file_ext = strrchr($file_name, '.'); #这个需要解释下了,strrchr的作用先说下,strrchr() 函数查找字符在指定字符串中从后面开始的第一次出现的位置,如果成功,则返回从该位置到字符串结尾的所有字符,如果失败,则返回 false。与之相对应的是strstr()函数,它查找字符串中首次出现指定字符的位置举个栗子:

<?phpecho strrchr( '123456789.xls' , '.' ); //程序从后面开始查找 '.' 的位置,并返回从 '.' 开始到字符串结尾的所有字符
程序的输出结果是:.xls
?>
$file_ext = strtolower($file_ext); //转换为小写,比如你后缀写成Php,想用大小写绕过的时候就不行了,这段代码将所有的大写转换成小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
  $file_ext = trim($file_ext); //首尾去空,将你后缀名里的前后空格都去掉

看看上面的代码都限制了多少吧,大小写,加空格,加字符串,黑名单,好多限制。。。。。

这个时候可以采用一种方法来绕过,因为靶场是搭建在windows上的,所以windows有一个特性,windows系统自动去掉不符合规则符号后面的内容,什么意思呢?举个栗子

比如你新建了一个1.txt文件,然后你将名称改为1.txt.试试,虽然会有下面的警告,但是windows还是会默认去掉后面的.,名字还是变成了1.txt

这个时候我们就可以利用.来绕过限制了,因为strrchr函数会将上传的文件名后缀处理为.php.,当上传到win机器上时又会将后面的.去掉,然后后缀就又会被还原成.php,这样就可以执行了,下面演示一下

首先上传1.php文件并抓包,在burp修改文件后缀名为.php.

拿c刀连接下试试

连接成功,我们上传的webshell已经成功连接上了

转载于:https://www.cnblogs.com/Id3al/p/9838584.html

upload-labs-master文件上传靶场第七关详解相关推荐

  1. 网络安全与渗透:文件上传漏洞,一文详解(十)此生无悔入华夏,男儿何不带吴钩

    中华人民共和国网络安全法 阅读本文前,请熟读并遵守中华人民共和国网络安全法: http://gkhy.jiujiang.gov.cn/zwgk_228/jc/zcwj/202006/P02020061 ...

  2. java上传下载_Java文件上传与文件下载实现方法详解

    本文实例讲述了Java文件上传与文件下载实现方法.分享给大家供大家参考,具体如下: Java文件上传 数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传 ...

  3. 文件上传漏洞——upload-labs 1-19 (详解)

    upload-labs-1 删除 js 进行绕过 上传图片,发现上传成功 上传 shell 发现: 发现是白名单,所以由前面我们知道,极有可能在前端存在过滤,我们检查一下: 发现 checkFile( ...

  4. 「造轮子」一个文件上传靶场知识总结记录

    https://www.sqlsec.com/2020/10/upload.html#toc-heading-1 或者 https://xz.aliyun.com/t/8435 直接使用别人的靶场总感 ...

  5. python代码图片头像_Flask 上传自定义头像的实例详解

    Flask Web 开发这本书基本上做完了,后面还需要温习,但是自己做的博客总觉得简陋了点,所以,在动脑子开发新功能 今天想到最基本的功能,自定义头像 那这样的功能,设计到2大基本功能块 1:如何进行 ...

  6. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  7. layui如何集成文件服务器,layui使用upload组件实现文件上传功能

    layui使用upload组件实现文件上传功能 发布时间:2020-05-22 17:25:25 来源:亿速云 阅读:309 作者:鸽子 背景:页面上一个按钮,点击弹出上传框,从按钮的方法代码开始写: ...

  8. vue+Element ui中使用 upload实现Excel文件上传

    文章目录 业务需求: 实现方式: 具体步骤: 1.引入组件: 2.data中定义: 3.methods中方法: 业务需求: 批量导入Excel文件 实现方式: 使用组件upload 具体步骤: 1.引 ...

  9. Linux 中 3 个文件打包上传和下载相关命令详解

    tar 命令 通过 SSH 访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的tar是麻雀虽小,五脏俱全,功能强大. 使用t ...

最新文章

  1. 个人博客三|首页后台开发
  2. filazilla搭建ftp_Windows7下利用FileZilla Server搭建ftp
  3. 成功解决ValueError: Data is not binary and pos_label is not specified
  4. defender 删除_Java 8中的默认方法(Defender方法)简介
  5. 【转】c# 操作webservice(经典入门教程+MSDN必胜)(有自己修改的部分)
  6. linux查看tomcat启动内存溢出,Linux下 Tomcat内存溢出
  7. electron forge 好用吗_在优麒麟上使用 Electron 开发桌面应用
  8. 打开新经济大门 淘宝直播如何打造最有价值的直播平台?
  9. VGG16和VGG19的理解
  10. 带注释的c51汇编语言,51单片机矩阵键盘控制程序 汇编语言 带详细注释
  11. html css的参考文献,网页制作论文参考文献大全 网页制作参考文献有哪些
  12. Matlab 两条曲线间填充颜色,改变透明度
  13. ubuntu16.04,zed7020,sdsoc,xfOpenCV,arm-linux,OpenCV3.4.1
  14. 使用js脚本实现微信定时发送信息
  15. 米哈游服务器一个月维护消费多少,崩坏3:为什么现在还有这么多米卫兵一直维护米哈游?这个理由说到心里去了...
  16. 云计算机到底是啥来的,啥叫云计算(云计算究竟是什么)
  17. Please contact your system administrator. Add correct host key in /Users/***/.ssh/known_hosts
  18. java计算机毕业设计教师教学质量评估系统MyBatis+系统+LW文档+源码+调试部署
  19. 罗克韦尔自动化牵手FBS2017 推动中国食品饮料行业“智”变
  20. 一句话理解:谐振腔工作原理

热门文章

  1. jms中activemq事务探讨
  2. 实现一个多线程循环的类
  3. Mac OS X 中的脚本语言应用
  4. SQL 进阶技巧(下)
  5. JavaScript会是Web开发的未来吗?
  6. 史上最坑爹的代码!个个让人崩溃!
  7. PaaS平台应用的12要素原则
  8. 3.JAVA中的多态
  9. WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.as
  10. java包装器类_Java中的基本类型和包装类