在之前的学习和比赛中多少也都有过相应的接触,但是自己没有去深入理解过原理。
在我自己浅薄的理解中,文件上传就是上传一句话木马或者将文件形式改变一下上传至网站,从而获得flag。至于为什么,自己也不太清楚?
言归正传,接下来我将深入学习一下,文件上传的知识。
师兄,师姐提供的相关学习资料:
https://wiki.wgpsec.org/knowledge/ctf/uploadfile.htmlhttps://wiki.wgpsec.org/knowledge/web/fileincludes.htmlhttps://wiki.wgpsec.org/knowledge/web/fileuploads.htmlhttps://wiki.wgpsec.org/knowledge/web/cmd_injection.html、
中允许上传图片、视频、头像和许多其他类型的文件到服务器中。
文件上传漏洞就是利用服务端代码对文件上传路径变量过滤不严格将可执行的文件上传到一个到服务器中 ,再通过URL去访问以执行恶意代码。
web应用程序:什么是网络应用程序?
Web 应用程序是在 Web 浏览器中运行的软件。企业须远程交换信息和提供服务。他们使用 Web 应用程序以方便、安全地与客户联系。购物车、产品搜索和筛选、即时消息和社交媒体新闻源等最常见的网站功能均设计为 Web 应用程序。它们允许您在不安装或配置软件的情况下访问复杂的功能。
Web 应用程序有何优势?
Web 应用程序拥有多个优势,几乎所有大企业都将其作为向用户提供的产品和服务的一部分。以下是与 Web 应用程序相关的一些最常见的优势。
可访问性
可以从所有 Web 浏览器及各种个人和企业设备访问 Web 应用程序。位于不同地点的团队可以通过基于订阅的 Web 应用程序访问共享文档、内容管理系统和其他业务服务。
开发高效
具体而言,Web 应用程序的开发过程相对简单,且对企业而言具有成本效益。小型团队可以实现较短的开发周期,使 Web 应用程序成为一种构建计算机程序的高效且经济的方法。此外,由于同一版本适用于所有现代浏览器和设备,因此您无需为多个平台创建多个不同的迭代。
使用简单
Web 应用程序无需用户下载,易于访问,同时使得最终用户无需进行维护和担心硬盘驱动器的容量问题。Web 应用程序可自动进行软件和安全更新,这意味着它们始终是最新版本,并且面临更小的安全漏洞风险。
可扩展性
使用 Web 应用程序的企业可以在需要时添加用户,而无需配备额外的基础设施或昂贵的硬件。此外,绝大多数 Web 应用程序数据都存储在云中,这意味着您的企业无需投资额外的存储容量来运行 Web 应用程序。
常见的 Web 应用程序有哪些?
有许多类型的 Web 应用程序。以下是一些最著名的例子。
办公协作 Web 应用程序
办公协作 Web 应用程序为团队成员提供访问文档、共享日历、业务即时消息服务等企业工具。
电子商务 Web 应用程序
Amazon.com 等电子商务 Web 应用程序使用户能够在线浏览、搜索和为产品付款。
电子邮件 Web 应用程序
大量企业和个人用户使用 Webmail 应用程序来查看其电子邮件。这些应用程序通常包括其它通信工具,例如即时消息和视频会议。
网上银行 Web 应用程序
企业和个人用户广泛使用网上银行 Web 应用程序来访问他们的账户和其他金融产品,如贷款和抵押贷款。
技术文档
您可以使用 Web 应用程序创建和共享技术文档,例如用户手册、操作指南和设备规格
Web 应用程序的工作原理是什么?
Web 应用程序具有客户端服务器架构。其代码分为两个部分:客户端脚本和服务器端脚本。
客户端架构
客户端脚本可处理用户界面功能,如按钮和下拉框。当最终用户单击 Web 应用程序链接时,Web 浏览器会加载客户端脚本,并呈现图形元素和文本以实现用户交互。例如,用户可以阅读内容、观看视频或在联系表上填写详细信息。单击提交按钮等操作将作为客户端请求传至服务器。
服务器端架构
服务器端脚本可对数据进行处理。Web 应用程序服务器可处理客户端请求,并发回响应。请求通常是获取更多数据或编辑或保存新数据。例如,如果用户单击阅读更多按钮,Web 应用程序服务器会将内容发回给用户。如果用户点击提交按钮,应用程序服务器会将用户数据保存到数据库中。在某些情况下,服务器会完成数据请求,并将完整的 HTML 页面发送回客户端。这便是服务器端渲染。
Web 应用程序和网站有何区别?
互联网刚问世时,网站的功能明显少于 Web 应用程序。它们只能通过静态内容向用户传递信息。您必须安装和运行拥有复杂功能的软件。Web 应用程序旨在弥合软件和静态站点之间的差距。它们具有与软件类似的功能和交互式用户元素,但通过 Web 浏览器 URL 进行交付。
然而,自那时起,Web 技术已有了显著的提升。大多数现代网站的设计都是复杂的 Web 应用程序。
Web 应用程序和原生应用程序有何区别?
原生应用程序是专为特定用户环境设计的计算机程序。最常见的原生应用程序类型之一是使用特定的编程代码开发的移动应用程序。与 Web 应用程序不同,原生或移动应用程序通常由用户通过应用程序商店下载到移动设备上。原生应用程序只能在其下载至的设备上访问,由用户负责下载更新。
如果开发人员想让应用程序在 iOS 或 Android 等操作系统上可用,则必须构建不同版本的移动应用程序,以确保其拥有尽可能广泛的用户群。开发人员还必须确保移动应用程序遵守应用程序商店标准,否则可能无法上架。
客户端检测一般只是在JavaScript代码中加入了对扩展名的黑白名单检查,这种方式只能防止一些普通用户上传错误,只要用Burpsuite在文件上传时进行截断改文件后缀名就可绕过。
A.MIME类型的检查
就是检查Content-Type的值,MIME类型决定了某种扩展名用什么应用程序打开,GIF的MIME值为image/gif。
B.文件扩展名检查
与前端js后缀名检测类似,只不过是在后端进行检查,有时候还可以配合解析漏洞结合目录路径攻击,例如test.asp/test.jpg。后端后缀名检查也分两种,黑名单与白名单。
黑名单检查绕过:
文件名大小写绕过,例代码中有php规则,那么可以使用PHP或pHP绕过。
黑名单列表绕过,对黑名单列表中没有的扩展名进行攻击,比如asa、cer等。
利用windows和Linux系统的特性进行特殊文件名绕过,a.asp. a.asp_等。
htaccess 文件攻击。
配合解析漏洞(IIS、Apache等)。
白名单绕过:
截断攻击,比如a.asp%00.gif等。
配合解析漏洞。
C.目录路径的检查
对目录路径可进行0x00截断绕过;以及可以控制目录地址,上传文件夹的参数可控)
D.检测文件内容是否包含恶意代码
这种方式主要检查图片文件的幻数,比如GIF的值为GIF89a,后端代码会检测改值判断是否为GIF图片文件,想要绕过只要在幻数后面加上一句话木马就行。
F.解析漏洞
F-1 IIS解析漏洞
IIS6.0在解析文件时存在以下两个解析漏洞:
当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都将被IIS服务器当作asp文件来解析。
在IIS6.0下,分号后面的扩展名不会被解析,也就是说当文件名为 *.asp;.jpg时,IIS6.0同样会以ASP脚本来执行。
F-2 Apache解析漏洞
在Apache 1.x和Apache 2.x中存在解析漏洞,但他们与IIS解析漏洞不同。
Apache在解析文件时有一个规则:当碰到不认识的扩展名时,将会从后向前解析,直到碰到认识的扩展名位置,如果都不认识,则会暴露其源码,比如文件名为php.rar.xx.aa时Apache首先会解析aa扩展名,如果不认识则接着解析xx扩展名,这样一直遍历到认识的扩展名为止,然后再将其进行解析。
F-3 PHP CGI解析漏洞
在PHP的配置文件中有一个关键的选项:cgi.fi: x_pathinfo,这个选项在某些版本是默认开启的,在开启时访问url,比如:http://www.xxx.com/x.txt/x.php,其中x.php是不存在的文件,所以php将会向前递归解析,于是就造成了解析漏洞。由于这种漏洞常见于IIS7.0、IIS7.5、Nginx等Web服务器,所以经常会被误认为是这些Web服务器的解析漏洞。
F-4 Nginx<8.03空字节代码执行漏洞
影响版本 :0.5,0.6,0.7<=0.7.65 0.8<=0.8.37
Nginx在图片中嵌入PHP代码,然后通过访问xxx.jpg%00.php可以执行其中的代码。
F-5 其他
在Windows环境下,xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名Windows会默认除去空格或点,攻击者可以通过抓包在文件名后加一个空格或者点绕过黑名单。若上传成功,空格和点都会被Windows自动消除,这样也可以getshell。
如果在Apache中配置文件.htaccess可被执行且可被上传,那可以尝试在.htaccess中写入:SetHandlerapplication/x-httpd-php,然后再上传名称为shell.jpg的webshell,这样shell.jpg就可解析为php文件