[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)

这是做者的系列网络安全自学教程,主要是关于安全工具和实践操做的在线笔记,特分享出来与博友们学习,但愿您们喜欢,一块儿进步。前文分享了编辑器漏洞和IIS高版本文件上传漏洞,包括FCKeditor、eWebEditor、畸形解析漏洞等;本篇文章将详细讲解Upload-labs靶场及文件上传漏洞10道CTF题目,并结合Caidao工具介绍拿站的流程及防护原理。php

做者做为网络安全的小白,分享一些自学基础教程给你们,但愿您们喜欢。同时,更但愿您能与我一块儿操做和进步,后续将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是文章对您有帮助,将是我创做的最大动力。html

PS:本文参考了B站、51CTO学院(Fox老师)和参考文献中的文章,并结合本身的经验进行撰写,也推荐你们阅读参考文献。git

下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
资源下载地址:github

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防护初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防护原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防护原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防护(三)web

前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包正则表达式

该篇文章参考了如下文献,很是推荐你们阅读这些大牛的文章和视频:
https://github.com/eastmountyxz
《Web安全深度剖析》《黑客攻防技术宝典浏览器实战篇》
https://www.bilibili.com/video/av60018118 (B站白帽黑客教程)
2019/Web安全/漏洞挖掘/信息收集/SQLMAP/SSRF/文件上传/逻辑漏洞 (B站强推)
2019文件上传漏洞专题渗透入门网络安全黑客web攻防详解 (Fox B站强推)
https://github.com/c0ny1/upload-labs算法

声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。shell


一.Upload-labs靶场漏洞

1.Upload-labs靶场介绍

先来看看,这是Upload-labs靶场的20道CTF文件上传相关题目。虽然它只是一些题目,但其漏洞原理和利用过程仍然值得咱们学习。数据库

在这里插入图片描述

Upload-labs是一个使用php语言编写,专门收集渗透测试和CTF中遇到的各类上传漏洞的靶场,旨在帮助你们对上传漏洞有一个全面的了解。目前一共20关,每一关都包含不一样的上传方式。编程

项目地址:https://github.com/c0ny1/upload-labs

运行环境:

  • 操做系统:windows、Linux
  • php版本:推荐5.2.17(其余版本可能会致使部分Pass没法突破)
  • php组件:php_gd二、php_exif(部分Pass须要开启这两个组件)

文件上传漏洞的思惟导图以下所示,详细覆盖了咱们前面三篇文章的各类方法。

在这里插入图片描述

其中,服务端监测内容以下所示:

在这里插入图片描述


2.Windows环境快速搭建

本项目提供了一个Windows环境下的集成环境,集成环境绿色免安装,解压便可使用。
下载地址以下:https://github.com/c0ny1/upload-labs/releases

在这里插入图片描述

第一步,从Github上下载环境和题目压缩包。

在这里插入图片描述

第二步,解压“upload-labs-env-win-0.1.7z”以下图所示。第一次运行或者每次改变靶机环境的目录时,都要运行一下modify_path.bat文件以后,再运行phpStudy.exe启动环境。

在这里插入图片描述

第三步,双击“modify_path.bat”文件运行以下图所示。modify_path.bat做用在于修改phpStudy.ini、httpd.conf、php.ini三个配置文件中的路径为最新的路径。

在这里插入图片描述

第四步,接着运行phpStudy.exe文件。
PS:若是环境没法运行,请参考phpStudy的文档manual.chm。

在这里插入图片描述

第五步,而后能够看到“WWW”文件夹中包括了20道题目,以下图所示。

在这里插入图片描述

第六步,启动phpStudy,而后访问地址 http://127.0.0.1/Pass-01/index.php,这样咱们的靶场就成功安装好了。

在这里插入图片描述

一样,咱们能够查看隐藏代码,点击右上角“显示源码”按钮。

在这里插入图片描述

也能够查看每道题目对应的提示,好比第一题的提示显示以下图所示。

在这里插入图片描述


二.文件上传漏洞CTF之01-05关

Pass-01

第一道题目查看提示,显示这是一个JS本地文件验证的关卡。

在这里插入图片描述

解决方法: 须要删除 οnsubmit=“return checkFile()” 函数,再进行上传。

在这里插入图片描述

若是直接上传包含一句话木马的“test.php”文件,则会提示以下图所示的错误。

<?php eval($_POST[eastmount]); ?>

在这里插入图片描述

这里咱们安装“OWASP Mantra Janus”渗透测试专用浏览器,打开靶场以下图所示。

OWASP Mantra 是由 Mantra 团队开发,面向渗透测试人员、Web 开发人员和安全专业人员的安全工具套件 (基于浏览器, 目前是 Chromium 和 Firefox ),包括扩展程序和脚本集合。

在这里插入图片描述

第一步,使用OWASP Mantra Janus浏览器打开,右键点击“使用Firebug查看元素”。

在这里插入图片描述

第二步,找到对应代码并删除 οnsubmit=“return checkFile()”。

在这里插入图片描述

此时成功上传,以下图所示。

在这里插入图片描述

服务器的文件夹也能看到该文件。

在这里插入图片描述

固然做为渗透人员,此时咱们是看不到目标网站的文件目录。咱们能够尝试复制图像地址,以下图所示:

在这里插入图片描述

第三步,直接用浏览器打开该连接 http://127.0.0.1/upload/test.php,以下图所示,显示空白,但表示其上传成功。

在这里插入图片描述

第四步,打开菜刀,添加地址和密码“eastmount”。

在这里插入图片描述

能够获取文件目录,以下图所示。

在这里插入图片描述

讲到这里,第一道题目就讲解完毕,主要是如何绕过JS验证。


Pass-02

第二道题目经过查看提示,发现是MIME文件绕过。

在这里插入图片描述

解决方案: MIME绕过文件上传,尝试对Content-Type进行修改,核心思想是将上传的PHP文件Content-Type修改成“image/jpeg”。

对应的检查代码以下所示:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || 
        ($_FILES['upload_file']['type'] == 'image/png') || 
        ($_FILES['upload_file']['type'] == 'image/gif')) 
        {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']            
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请从新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工建立!';
    }
}

接下来咱们使用BurpSuite进行数据包拦截及修改。
配置过程详见这篇文章:http://www.noobyard.com/article/p-xvklkouw-dn.html

第一步,配置浏览器代理。
新建代理:右上角图标"new tab"–>“tools”–>“poxy”–>“Foxyproxy standard”–>“options”–>“add new poxy”–>“肯定”。

在这里插入图片描述

而后设置为本地代理“127.0.0.1”,端口号为“8080”。

在这里插入图片描述

第二步,打开BurpSuite并设置Proxy,一样为“127.0.0.1:8080”。

在这里插入图片描述

第三步,上传包含一句话木马的图片“mm1.jpg”,以下图所示。

在这里插入图片描述

第四步,经过BurpSuite抓包获取相关信息。

在这里插入图片描述

能够看到里面包含了PHP一句话木马的代码。

在这里插入图片描述

第五步,将“mm1.jpg”后缀修改成“mm1.php”,点击“Forward”按钮。

在这里插入图片描述

第六步,成功上传了该“mm1.php”文件以下图所示,接着复制图像地址。

在这里插入图片描述

第七步,将复制的地址用浏览器打开,http://127.0.0.1/upload/mm1.php。

在这里插入图片描述

上传成功以后,经过Caidao软件能够获取目标服务器的文件目录。


Pass-03

查看提示是“禁止上传 .asp|.aspx|.php|”

在这里插入图片描述

查看源代码发现过滤了点、大小写、空格、data,这里尝试php345绕过,也可用Apache解析漏洞。

在这里插入图片描述

PHP345文件绕过上传
PHP3表明PHP版本3,用于文件绕过检测。通常的软件都是向下兼容,PHP3代码,PHP5一样兼容可以执行。因此会将包含一句话木马的“fox.php”文件修改成“fox.php5”文件,从而正常上传。

Apache解析漏洞
Apache是从右到左判断解析,若是为不可识别解析,就再往左判断。好比1.php.xxx对Apache来讲xxx是不可解析的,因此就会解析成1.php,这就是该漏洞的实现原理。


第一步,若是直接上传“test.php”文件,则会提示以下错误:

在这里插入图片描述

第二步,将文件名“test.php”修改成“test.php4”,发现成功上传。

在这里插入图片描述

第三步,接下来复制图片地址(http://127.0.0.1/upload/201912161548204885.php4)并进行访问。

在这里插入图片描述

第四步,利用Caidao工具便可获取服务器目录。


Pass-04

查看提示是禁止php345上传和大小写漏洞。

在这里插入图片描述

若是继续上传“test.php4”文件,则会提示错误。

在这里插入图片描述

解决方案: 这里咱们利用“.htaccess”文件绕过上传。

.htaccess文件或者“分布式配置文件”提供了针对每一个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令做用于此目录及其全部子目录。

简单来讲,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。它的功能有:网页301重定向、自定义404错误页面、改变文件扩展名、容许/阻止特定的用户或目录的访问、禁止目录列表、配置默认文档等。这里咱们须要用到的是改变文件扩展名,新建一个“.htaccess”文件,代码以下:

<FilesMatch "eastmount">
SetHandler application/x-httpd-php
</FilesMatch>

这里是把fox名字的文件全都以php来运行,须要特殊文件进行建立,如Notepad++。

在这里插入图片描述

首先上传这个“.htaccess”文件。

在这里插入图片描述

再上传一个“eastmount.jpg”文件,它会将这张图片以php来解析。

在这里插入图片描述

复制图片地址,而后用浏览器打开,显示以下图所示,它是以php格式解析的,而不显示成一张jpg图片。以前上传的“mm1.jpg”是以图片方式打开。

eastmount.jpg
在这里插入图片描述

mm1.jpg
在这里插入图片描述

接着打开中国菜刀,获取了该服务器的目录。


Pass-05

查看提示禁止了“.htaccess”文件绕过。

在这里插入图片描述

查看源代码,发现它少了大小写转换的代码。

$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_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $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.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不容许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工建立!';
    }
}

解决方案: 使用大小写绕过方法。
虽然提示中禁止了“.pHp”中间大写,但没有禁止末位的大写,因此这里使用“.phP”。注意,好的防护代码会获取后缀名并所有转换为小写,再定义黑白名单进行校验。

首先,上传“test1.phP”文件。

在这里插入图片描述

发现文件成功上传。

在这里插入图片描述

接着复制图像地址打开以下图所示,它包含了一句话木马“<?php eval($_POST[eastmount]); ?>”,最后使用Caidao工具便可获取服务器文件目录。

在这里插入图片描述


三.文件上传漏洞CTF之06-10关

Pass-06

第6关的提示信息以下所示:

在这里插入图片描述

查看源代码,发现首位去空的代码没有了,这里尝试加空格。

$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 = $_FILES['upload_file']['name'];
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file,$img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件不容许上传';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工建立!';
    }
}

尝试上传包含一句话木马的图片文件“mm2.jpg”。

在这里插入图片描述

若是经过BurpSuite抓包,直接将“mm2.jpg”修改后缀为“mm2.php”,则会提示以下错误。

在这里插入图片描述

这里须要增长空格,即“mm2.php ”,BurpSuite修改以下图所示。

在这里插入图片描述

点击“Forward”按钮,此时成功上传。

在这里插入图片描述

接着复制图片地址并打开,最后链接Caidao工具便可。

在这里插入图片描述


Pass-07

提示信息为“禁止上传全部能够解析的后缀”。
在这里插入图片描述

查看源代码,发现这句代码不在了。

$file_name = deldot($file_name); //删除文件名末尾的点

接着上传一张图片“mm2.jpg”,经过BurpSuite抓包,咱们将文件名“mm2.jpg”修改成“mm3.jpg.”,以下图所示。

在这里插入图片描述

成功上传以后以下图所示。

在这里插入图片描述

咱们复制图片地址(http://127.0.0.1/upload/mm3.php.)并用浏览器打开。

在这里插入图片描述

接着采用Caidao链接。

在这里插入图片描述

成功获取服务器的文件目录。

在这里插入图片描述


Pass-08

查看提示仍是常规的方法绕过。

在这里插入图片描述

查看源代码发现去除“::$DATA”文件的语句没有了,这里尝试加入“::$DATA”。

::$DATA绕过只能用于Windows,简单来讲,就是在数据后面加上::$DATA实现绕过,fox.php::$DATA返回fox.php数据。

$file_ext = str_ireplace('::$DATA', '', $file_ext); //去除字符串::$DATA

上传一个“mm2.jpg”图片,而后经过BurpSuite抓包修改成“mm8.php::$DATA”。

在这里插入图片描述

上传成功以后以下图所示:

在这里插入图片描述

复制图片地址http://127.0.0.1/upload/201912161714288617.php::$data,并删除后面的“::$data”进行访问。

在这里插入图片描述

打开Caidao工具并尝试链接。

在这里插入图片描述

成功获取目标的文件夹目录,以下图所示:

在这里插入图片描述


Pass-09

查看提示发现该关值容许上传图片后缀的文件。

在这里插入图片描述

查看源代码,发现15行文件不同,路径拼接的是处理后的文件名,因而构造“fox.php. .”(点+空格+点),尝试进行绕过。

在这里插入图片描述

上传一张“mm2.jpg”的图片,尝试修改成“mm2.php. .”进行绕过。

在这里插入图片描述

上传成功以后,复制图片地址(http://127.0.0.1/upload/mm2.php.)并访问。注意,“mm2.php.”后面没有点也能成功访问,这都是Windows的一些特性。

在这里插入图片描述


Pass-10

查看提示发现应该是过滤后缀。

在这里插入图片描述

查看源代码,这里是将问题后缀名替换为空,也就是“php.php”会变成“php.”,可是这里只过滤一次。查看第8行代码,发现它把文件后缀名替换为空。

在这里插入图片描述

这里注意写法,“phphpp”、“pphphp”上传比较。

第一步,尝试上传一个文件“php123.phphpp”。

在这里插入图片描述

第二步,上传成功,复制图像地址并打开。

在这里插入图片描述

第三步,此时图片的地址变为“http://127.0.0.1/upload/123.hpp”,访问以下图所示。

在这里插入图片描述

第四步,“php123.phphpp”变成了“123.hpp”,它把后缀“php”过滤了,剩一个“hpp”。若是咱们的后缀设置为“pphphp”,而后再进行拼接上传。

在这里插入图片描述

上传成功以后的地址为“http://127.0.0.1/upload/123.php”。

在这里插入图片描述

最后再调用Caidao工具便可获取目录。


四.总结

写到这里,这篇基础性文章就此结束,最后但愿这篇基础性文章对您有所帮助。总共包括包括10关,其技术分别是:

  • 第一关:JS验证绕过
  • 第二关:MIME绕过
  • 第三关:php345绕过
  • 第四关:.htaccess绕过
  • 第五关:大小写绕过
  • 第六关:空格绕过
  • 第七关:点绕过
  • 第八关:::$DATA绕过
  • 第九关:点+空格+点拼接绕过
  • 第十关:双文件绕过

做者做为这个领域的菜鸟,但愿与您共同进步。若是网络安全系列文章对您有所帮助,将是我分享的最大动力。该系列会写上100+篇,但愿以后本身能入门。还有就是这个专栏要不要收不收费呢?哈哈~目前仍是喜欢免费文章,网上不少安全的视频都很是贵,我也但愿经过这个系列能帮到更多的初学者,但若是做者某一天真收费了(不会很贵),也请海涵。

在这里插入图片描述

这周咱们举办XDef会议,会议圆满落幕,办会很是辛苦,也学到了不少东西,不论知识仍是处事。同时,见到了不少大佬,包括360古河大神,后续尝试分享一些会议内容。今天回归正轨,差距虽然很明显,但但愿本身能在安全领域深刻下去,继续加油~

(By:Eastmount 2019-12-16 晚上8点写于武大 http://blog.csdn.net/eastmount/ )