<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>文件上传安全 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%AE%89%E5%85%A8/</link><description>Recent content in 文件上传安全 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 16 Dec 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>文件上传安全</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/security/security-007/</link><pubDate>Wed, 02 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/security/security-007/</guid><description>&lt;h2 id="文件上传漏洞简介"&gt;文件上传漏洞简介&lt;/h2&gt;
&lt;h3 id="原理"&gt;&lt;strong&gt;原理&lt;/strong&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本到服务器上,然后访问这些恶意脚本中包含的恶意代码,从而获得了执行服务器端命令的能力,进一步影响服务器安全。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="危害"&gt;危害&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;文件上传漏洞最直接的威胁就是上传任意文件，包括恶意脚本、可执行程序等。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;如果Web 服务器所保存上传文件的可写目录具有执行权限，那么就可以直接上传后门文件，导致网站沦陷。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;如果攻击者通过其他漏洞进行提权操纵，拿到系统管理权限，那么直接导致服务器沦陷。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;同服务器下的其他网站无一幸免，均会被攻击者控制。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="利用"&gt;利用&lt;/h3&gt;
&lt;p&gt;对于利用，我们只需要有个文件上传的点，以及我们知道我们所传的文件所在目录并且上传的恶意文件能够被web容器解析执行，便可能存在文件上传漏洞。&lt;/p&gt;
&lt;h2 id="实战"&gt;实战&lt;/h2&gt;
&lt;p&gt;说是实战但是因为不能随便入侵别人的机器(有概率获取银手镯一套)，这里给大家推荐一个专门用来练习文件上传漏洞的不同利用方法的靶场。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/c0ny1/upload-labs"&gt;github.com/c0ny1/uploa…&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-007/image-01.webp"&gt; 可以看到里面有很多关卡，对于环境的搭建，这里我推荐用phpstudy去进行一键搭建，比较适合入门的萌新，具体搭建方法不是本文的重点，于是我们跳过，接下来给大家带来文件上传漏洞一些常见的绕过方法。&lt;/p&gt;
&lt;h3 id="客户端检测绕过"&gt;客户端检测绕过&lt;/h3&gt;
&lt;p&gt;有的客户端会存在客户端校验，校验上传文件的后缀名，当我们传入php木马时可能会因为类型不同被禁止，此时我们要怎么进行上传一句话木马呢，这里给大家提供两个思路，第一个我们可以禁用浏览器的JS脚本，第二种方法便是使用渗透中常用工具burpsuit进行抓包，然后修改文件后缀为php即可绕过，因为他只是做了一个前端的简单验证。&lt;/p&gt;
&lt;h3 id="修改mime-类型"&gt;修改MIME 类型&lt;/h3&gt;
&lt;p&gt;有的服务器端将会对上传文件content-type类型进行检查以此来防范恶意文件的上传，这时我们打开burp suite将php文件上传，因为content-type的类型不是服务器认可的类型，那么我们就可以使用burpsuite进行修改该文件类型，并将该文件进行上传。&lt;/p&gt;
&lt;p&gt;常见的content-type对应类型如下：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-007/image-02.webp"&gt;&lt;/p&gt;
&lt;h3 id="00截断绕过"&gt;&lt;strong&gt;00截断绕过&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;运用此漏洞需要满足两个条件：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1.php版本小于5.3.4&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;2.php的magic_quotes_gpc为OFF状态&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;0x开头表示16进制，0在十六进制中是00, 0x00就是%00解码成的16进制，具体运用方法如下，假如我们上传一个一句话木马：&lt;/p&gt;
&lt;p&gt;攻击者修改了path以后的拼接结果为：uploads/XINO.php%00/20190818.php，移动文件的时候会将文件保存为：uploads/XINO.php，以此我们便可以绕过检测来上传一句话木马。&lt;/p&gt;
&lt;h3 id="htaccess文件攻击"&gt;&lt;strong&gt;.htaccess文件攻击&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;.htaccess&lt;/strong&gt;文件(或者&amp;quot;分布式配置文件&amp;quot;）,全称是&lt;strong&gt;Hypertext Access&lt;/strong&gt;(超文本入口)。提供了针对目录改变配置的方法， 即，在一个特定的文档目录中放置一个包含一个或多个&lt;strong&gt;指令&lt;/strong&gt;的文件， 以作用于此目录及其所有子目录。&lt;/p&gt;
&lt;p&gt;简单来说该文件的作用就是根据里面的内容解析为我们想要的类型，这么说可能很难理解，比如我上传一个图片马（JPG文件里插入了一句话木马），因为网站对我们的上传类型做了限制，我们上传不了PHP文件，我们先上传一个JPG的图片马，然后上传 &lt;strong&gt;.htaccess文件，&lt;/strong&gt; 将图片解析为php语言，来达到getshell的目的。具体的文件内的内容为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;FilesMatch &lt;span style="color:#e6db74"&gt;&amp;#34;evil.gif&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SetHandler application/x-httpd-php#在当前目录下，如果匹配到evil.gif文件，则被解析成PHP代码执行
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;AddHandler php5-script .gif &lt;span style="color:#75715e"&gt;#在当前目录下，如果匹配到evil.gif文件，则被解析成PHP代码执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/FilesMatch&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当然不止这一种，还能如下写法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;AddHandler php5-script .jpg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;AddType application/x-httpd-php .jpg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sethandler application/x-httpd-php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="文件头检测"&gt;文件头检测&lt;/h3&gt;
&lt;p&gt;当我们上传一些文件时，有些拦截会检测我们文件里的具体内容，如果匹配了正确的文件头则会通过检测，反之则会拦截我们的文件，针对如此我们可以利用在文件前写入适当文件类型的文件头来绕过。常用的文件头如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;JPG：FF D8 FF E0 00 10 4A 46 49 46&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;GIF ：47 49 46 38 39 61 (GIF89a)&lt;/p&gt;</description></item></channel></rss>