文件上传漏洞是指程序员没有对上传的文件进行严格的验证和过滤,导致用户可以超越自己的权限向服务器上传可执行的动态脚本文件。这里上传的文件可能是木马、病毒、恶意脚本或WebShell等。这种攻击方式是最直接有效的。“文件上传”本身没有问题。问题在于文件上传后,服务器如何处理和解释文件。如果服务器的处理逻辑不够安全,就会导致严重的后果。
先了解什么是Web容器,IIS,文件解析,再了解文件上传漏洞。
什么是web容器?
web容器是一种服务程序。在服务器的一个端口有一个提供相应服务的程序,这个程序就是处理来自客户端的请求,比如tomcat,apache,nginx等。(可以理解为提供编程语言的环境)
中间件:提供系统软件和应用软件之间连接的软件,以便于软件组件之间的通信。中间件介于 *** 作系统和更高层的应用程序之间。
容器*:为其中的应用组件(ASP、JSP、PHP)提供一个环境。使其中的应用程序组件与容器中的环境变量接口进行交互,而无需关注其他系统问题。
服务器:www服务器或http服务器。提供网络信息旅游服务。它只需要支持http协议、html文档格式和url,并为访问者提供服务。
什么是IIS?
IIS的全称是互联网信息服务,包括FTP/FTPS、NNTP、HTTP/HTTPS、SMTP等服务。
的。net框架是基础类库,是程序运行的底层框架。
IIS是用来设置web服务器提供Web浏览服务的,属于系统环境。
一般用ASP.NET开发软件,然后用IIS给公网提供服务。
什么是文件解析?
当服务器收到HTTP请求时,IIS首先需要决定如何处理请求(服务器必须处理。aspx和。html不同),基于文件的后缀。
在获得所请求的页面(或文件)的后缀后,服务器将在服务器端寻找可以处理这种后缀的应用程序。如果IIS找不到可以处理这种文件的应用程序,那么IIS会直接将该文件返回给客户端。
1解析漏洞当攻击者利用上传漏洞时,通常会配合Web容器的解析漏洞。所以我们先来看看解析漏洞,这样可以对上传漏洞有更深入的了解和防范。
常见的Web容器有ⅱS、Apache、Nginx、Tomcat等。下面主要关注IIS和Apache容器。
1.1IIS解析漏洞
IIS6.0在解析文件时有以下两个解析漏洞。
例如,设置parsing.asp文件夹,在parsing.asp文件夹中新建一个文本文档test.txt,内容为<%=NOW()%>;,然后在浏览器中访问它。
“nowo”是ASP提供的获取当前时间的函数。TXT是一种文本文档格式。IIS不会解析这类文件,应该直接显示其内容。但是,在parsing.asp文件夹中,它被解析为ASP脚本。
Apache从右向左判断和解析。如果它未被识别,它将判断为向左,如xxx.php.owf.rar。后缀”。owf“和”。rar”不能被apache解析,所以Apache会把xxx.php.owf.rar解析成php。
如何判断后缀是否合法是利用该漏洞的关键。测试的时候,把所有常见的后缀都写下来测试是否合法,一步步识别。
一些程序开发人员在上传文件时,会判断文件名是否是PHP、ASP、ASPX、ASA、CER、ASPX等脚本扩展名。如果是,则不允许他们上传。此时,攻击者就有可能上传1.php.rar等扩展绕过程序检测,配合漏洞分析获取WebShell。
2绕过上传漏洞有两种方法可以绕过上传漏洞。
客户端检测:客户端在文件未上传时,使用JavaScript对文件进行检测和验证;
服务器端检测:服务器端脚本通常检测文件的MIME类型以及文件扩展名是否合法。
有些程序员甚至会检测文件中是否嵌入了恶意代码。
在研究上传漏洞之前,我们先来看两个小工具:中国菜刀和一字图片木马。
“中国菜刀”这个软件是用来管理网站文件的。它非常小巧灵活。它只需要一个简短的代码
就可以方便地管理网站。中国菜刀现在已经成为安全研究人员的必备工具,其官方网站是http://www.maicaidao.com。
这个软件提供的服务器端文件只有一行代码。目前支持的服务器端脚本有PHP、ASP、ASP.NET、JSP等。,以及支持HTTPS安全连接的网站。常见代码如下:
Asp一句话:<%evalrequest("XXX")%>;
Php总之:<%Php@eval($_POST[XXX]);?>
Aspx总之:<%@PageLanguag="xxx"%><%eval(请求。item["XXX"])%>;
由于代码短小精悍,被黑客称为特洛伊木马(后门)。
会<?PHP@eval(S_POST['XXX']);?>保存为shell.php,上传到PHP主机空房间,配置菜刀连接,如图。
“图片一词”就是在不破坏图片文件的情况下,在图片文件中插入木马。这种方法可以避免一点防火墙检测。有很多方法可以制作一个图文并茂的特洛伊木马。目前,安全研究人员已经设计了一个专业软件:Edjpgcom。Edjpgcom的使用非常简单:将一张正常的图片拖入Edjpgcom.exe程序中,填入相应的一句话代码,就可以制作出一张图一句话的木马。
插入word木马后,打开图片为文本,可以看到里面有word木马代码,并且不会影响图片的正常预览。
还有一种方法是用CMD命令把木马和正常图片结合起来。
注意:如果直接将图片作为文本打开并插入句子,可能会造成文件损坏。
在了解了程序员如何防护上传漏洞和一句话图片木马之后,下面就深入研究攻击者如何绕过程序员的防护思维上传一句话木马文件。
2.1客户端检测
2.1.1使用FileBug浏览器插件
FireBug是一款开源的浏览器插件,支持Firefox、Chrome等浏览器。它让Web开发者可以轻松调试HTML、JavaScript、AJAX、CSS等前端脚本代码。,是Web开发者的必备武器。由于FireBug功能强大,也被黑客认为是必备武器。
2.1.2中间人攻击
中间人攻击与FireBug完全不同。FireBug删除客户端的JavaScript验证,而使用BurpSuite按照正常流程通过JavaScript验证,然后在传输中 *** 纵HTTP层。
首先把木马文件扩展名改成正常图片的扩展名,比如JPG扩展名。上传的时候用BurpSuite拦截上传的数据,然后把扩展JPG改成PHP,这样就可以绕过客户端检查了。
2.2服务器端检测
2.2.1白名单和黑名单的验证
(1)黑名单过滤方法
黑名单过滤是一种不安全的方法。黑名单定义了一系列不安全的扩展。收到文件后,服务器将其与黑名单扩展名进行比较,如果发现文件扩展名与黑名单中的扩展名匹配,则该文件被视为非法文件。
(2)白名单的过滤方法
白名单的过滤方法与黑名单相反。黑名单定义不允许上传的文件扩展名,白名单定义允许上传的扩展名。白名单比黑名单有更好的防御机制。如:$whitelist=
array(rar',jpg',png,bmpy,gif,jpg;doc);获得文件扩展名后,迭代判断白名单数组中的扩展名。如果文件扩展名被命中,程序将认为文件是合法的,否则不允许上传。
MIME认证
MIME类型用于设置打开具有特定扩展名的文件的方式。当访问具有该扩展名的文件时,浏览器将自动用指定的应用程序打开它。比如GIF图片MIME是image/gif,CSS文件MIME类型是text/ess。
2.2.3.目录验证
在上传文件时,程序通常允许用户将文件放在指定的目录中。然而,一些Web开发人员通常会做一些 *** 作来使代码更加健壮。如果指定的目录存在,他们会将文件写入该目录;如果没有,他们会先建立目录,然后再写。
2.2.4截断上传攻击
文件名的后缀有一个%00字节,可以截断一些函数对文件名的判断。在许多语言函数中,0x00被视为处理字符串的函数中的终止符。
比如网站上传功能处理xxx.asp%00.jpg时,后缀名一开始是合法的jpg格式,可以上传。当保存文件时,它遇到%00个字符并丢弃以下字符。jpg。文件的后缀最终保存为xxx.asp。
3文件上传漏洞防御首先,上传的文件可以被Web容器解释和执行。所以上传文件的目录就是Web容器覆盖的路径。其次,用户可以从网上访问这个文件。如果文件上传了,但是用户无法通过Web访问,或者Web容器无法解释这个脚本,那么就不能称之为漏洞。最后,如果用户上传的文件内容被安全检查、格式化、图像压缩等功能改变,攻击也可能不成功。
防止文件上传漏洞的几种常用方法:
1.上传文件的目录设置为不可执行
只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,所以这一点很关键。
2.判断文件类型
判断文件类型时,可以使用MIME类型、后缀检查等。在文件类型检查中,强烈推荐白名单法,黑名单法已经被无数次证明不靠谱。此外,对于图像的处理,您可以在处理图像时使用压缩函数或调整大小函数来销毁图像中可能包含的HTML代码。
3.用随机数覆盖文件名和文件路径
文件上传。如果您想执行代码,您需要用户能够访问这个文件。在某些环境中,用户可以上传,但不能访问。如果应用随机数重写文件名和路径,会大大增加攻击的成本。然后还有像shell.php.rar.rar、crossdomain.xml这样的文件,因为重命名而无法被攻击。
4.单独设置文件服务器的域名
由于浏览器的同源策略,一系列的客户端攻击都会失败,比如上传crossdomain.xml,上传包含Javascript的XSS利用等。都会得到解决。
5.限制上传文件的大小
限制上传文件的大小,以防止因内存和磁盘耗尽而导致拒绝服务。
您可以配置web服务器允许的最大帖子大小。
您可以在代码级别获取上传文件的大小,并根据文件类型的不同进一步筛选。
6.确保上传的文件被正确访问和返回
1。将文件上传目录设置为静态资源目录,以防止其被解析为脚本执行。
2。使用代理页面隐藏文件的真实路径。
3。使用上述方法时,确保内容类型与实际文件类型一致。[br/]
4。如果文件不允许在页面上显示,只允许下载,请设置content-disposition:attachment。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)