<?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 知识带给我们自由</title>
    <link>https://yuexuan521.github.io/zh/tags/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/</link>
    <description>Recent content in 渗透测试 on 知识带给我们自由</description>
    <image>
      <title>知识带给我们自由</title>
      <url>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://yuexuan521.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.160.1</generator>
    <language>en-us</language>
    <copyright>See this site&amp;rsquo;s source code here, licensed under GPLv3 ·</copyright>
    <lastBuildDate>Mon, 30 Sep 2024 12:23:22 +0000</lastBuildDate>
    <atom:link href="https://yuexuan521.github.io/zh/tags/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>网络安全 DVWA通关指南 DVWA File Inclusion（文件包含）</title>
      <link>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-file-inclusion%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB/</link>
      <pubDate>Mon, 30 Sep 2024 12:23:22 +0000</pubDate>
      <guid>https://yuexuan521.github.io/zh/posts/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8-dvwa%E9%80%9A%E5%85%B3%E6%8C%87%E5%8D%97-dvwa-file-inclusion%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB/</guid>
      <description>&lt;h2 id=&#34;dvwa-file-inclusion文件包含&#34;&gt;DVWA File Inclusion（文件包含）&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;post-img-view&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg&#34;&gt;
        &lt;img src=&#34;https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg&#34; 
             alt=&#34;在这里插入图片描述&#34; 
              
             loading=&#34;lazy&#34;
        /&gt;
    &lt;/a&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考文献&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA&#34;target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WEB 安全靶场通关指南&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;本地文件包含lfi&#34;&gt;本地文件包含(LFI)&lt;/h3&gt;
&lt;p&gt;文件包含漏洞的产生原因是 PHP 语言在通过引入文件时，引用的文件名，用户可控，由于传入的文件名没有经过合理的校验，或者校验被绕过，从而操作了预想之外的文件，就可能导致意外的文件泄露甚至恶意的代码注入。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="dvwa-file-inclusion文件包含">DVWA File Inclusion（文件包含）</h2>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312280.jpeg" 
             alt="在这里插入图片描述" 
              
             loading="lazy"
        />
    </a>
</div></p>
<hr>
<p>参考文献</p>
<ul>
<li><a href="https://www.cnblogs.com/linfangnan/p/13994655.html#dvwa-%E9%9D%B6%E5%9C%BA"target="_blank" rel="noopener noreferrer">WEB 安全靶场通关指南</a></li>
</ul>
<hr>
<blockquote>
<h3 id="本地文件包含lfi">本地文件包含(LFI)</h3>
<p>文件包含漏洞的产生原因是 PHP 语言在通过引入文件时，引用的文件名，用户可控，由于传入的文件名没有经过合理的校验，或者校验被绕过，从而操作了预想之外的文件，就可能导致意外的文件泄露甚至恶意的代码注入。</p>
<p>当被包含的文件在服务器本地时，就形成的本地文件包含漏洞。</p>
<h4 id="漏洞利用">漏洞利用</h4>
<p><strong>利用条件：</strong></p>
<blockquote>
<p>（1）include()等函数通过动态变量的方式引入包含文件； （2）用户能够控制该动态变量。</p>
</blockquote>
<h3 id="远程文件包含rfl">远程文件包含(RFL)</h3>
<p>服务器通过 PHP 的特性（函数）去包含任意文件时，由于要包含的这个文件来源过滤不严格，</p>
<p>从而可以去包含一个恶意文件，攻击者就可以远程构造一个特定的恶意文件达到攻击目的。</p>
<h4 id="漏洞利用-1">漏洞利用</h4>
<p><strong>条件：</strong> <code>php.ini</code> 中开启 <code>allow_url_include</code> 、 <code>allow_url_fopen</code> 选项。</p>
<h3 id="修复建议">修复建议</h3>
<blockquote>
<ol>
<li>
<p>禁止远程文件包含 <code>allow_url_include=off</code></p>
</li>
<li>
<p>配置 <code>open_basedir=指定目录</code> ，限制访问区域。</p>
</li>
<li>
<p>过滤 <code>../</code> 等特殊符号</p>
</li>
<li>
<p>修改Apache日志文件的存放地址</p>
</li>
<li>
<p>开启魔术引号 <code>magic_quotes_qpc=on</code></p>
</li>
<li>
<p>尽量不要使用动态变量调用文件，直接写要包含的文件。</p>
</li>
</ol>
</blockquote>
</blockquote>
<h2 id="low">Low</h2>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>没有任何过滤措施存在，同时使用GET方法传递参数。尝试查看file1.php文件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312282.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312282.png" 
             alt="image-20240517101641776" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>2、在URL输入不存在的路径，提交出现报错信息，得到文件的绝对路径</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Warning: include(iviirjgiegij): failed to open stream: No such file or directory in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Warning: include(): Failed opening &#39;iviirjgiegij&#39; for inclusion (include_path=&#39;.;C:\php\pear;../../external/phpids/0.6/lib/&#39;) in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36
</span></span></code></pre></td></tr></table>
</div>
</div><p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312283.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312283.png" 
             alt="" 
              
             loading="lazy"
        />
    </a>
</div></p>
<p>3、使用相对路径访问fi.php，路径为D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php。</p>
<p>相对路径计算如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">..\..\hackable\flags\fi.php
</span></span></code></pre></td></tr></table>
</div>
</div><p>成功访问到fi.php文件</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312284.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312284.png" 
             alt="image-20240517102538336" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="medium">Medium</h2>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Input validation
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nx">str_replace</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span> <span class="s2">&#34;http://&#34;</span><span class="p">,</span> <span class="s2">&#34;https://&#34;</span> <span class="p">),</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="nv">$file</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 使用str_replace函数移除$file字符串中所有的&#34;http://&#34;和&#34;https://&#34;子串。
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nx">str_replace</span><span class="p">(</span> <span class="k">array</span><span class="p">(</span> <span class="s2">&#34;../&#34;</span><span class="p">,</span> <span class="s2">&#34;..</span><span class="se">\&#34;</span><span class="s2">&#34;</span> <span class="p">),</span> <span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="nv">$file</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 继续使用str_replace函数，这次移除$file中所有向上一级目录的路径指示符，无论是&#34;../&#34;还是&#34;..\&#34;（考虑到不同操作系统的路径分隔符）。
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、使用str_replace函数对输入的文件路径进行过滤，因为使用的是str_replace函数，所以可以使用双写绕过。构造Payload如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">..././..././hackable/flags/fi.php
</span></span></code></pre></td></tr></table>
</div>
</div><p>拼接到URL中提交，绕过成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312285.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312285.png" 
             alt="image-20240517103347816" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="high">High</h2>
<p>1、分析网页源代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Input validation
</span></span></span><span class="line"><span class="cl"><span class="c1">// 使用fnmatch函数检查$file是否匹配模式&#34;file*&#34;
</span></span></span><span class="line"><span class="cl"><span class="c1">// fnmatch用于实现shell风格的通配符匹配，这里的&#34;file*&#34;会匹配以&#34;file&#34;开头的任何字符串。
</span></span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="o">!</span><span class="nx">fnmatch</span><span class="p">(</span> <span class="s2">&#34;file*&#34;</span><span class="p">,</span> <span class="nv">$file</span> <span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;include.php&#34;</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// This isn&#39;t the page we want!
</span></span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;ERROR: File not found!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>2、使用fnmatch函数函数，虽然只能包含&quot;file&quot;开头的文件，但我们可以使用file伪协议读取到文件。（这个地方需要文件的绝对路径，与Low级别不同，这里的报错信息需要提交以file开头的不存在文件或路径，否则会返回统一错误页面）</p>
<p>构造Payload如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">file:///D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php
</span></span></code></pre></td></tr></table>
</div>
</div><p>拼接到URL中提交，包含文件成功</p>
<p>
<div class="post-img-view">
    <a data-fancybox="gallery" href="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312286.png">
        <img src="https://cdn.jsdelivr.net/gh/yuexuan521/image/20251225165312286.png" 
             alt="image-20240517104929712" 
              
             loading="lazy"
        />
    </a>
</div></p>
<h2 id="impossible">Impossible</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// The page we wish to display
</span></span></span><span class="line"><span class="cl"><span class="nv">$file</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span> <span class="s1">&#39;page&#39;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Only allow include.php or file{1..3}.php
</span></span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;include.php&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;file1.php&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;file2.php&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$file</span> <span class="o">!=</span> <span class="s2">&#34;file3.php&#34;</span> <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// This isn&#39;t the page we want!
</span></span></span><span class="line"><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;ERROR: File not found!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">exit</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
