天天看點

【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記

【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記

0x00 部署sqli-labs

這部分相信大部分人都會了,我簡單推薦一種簡單的組合

wamp 實作一鍵部署,其中包含PHP環境

navicat 導入資料

這裡悄悄的給出一種作弊的方法,就是在每句SQL語句後面:

echo $sql. '<br>';
           

如果是練習盲注的同學還是老老實實按照不作弊的方式來。

0x01 開始練習

Less 1

id='
id="
           

單引号

雙引号沒有報錯

這裡的’可以直接得出,他是基于單字元的SQL語句,我們嘗試閉合他。

這裡雙引号為什麼沒有報錯呢?

我們采用白盒(作弊)的方式去解釋:

可以看到我們的1”被當做參數直接去調用了,不存在文法錯誤。

而當為單引号的時候,參數1’提早閉合了’1’那麼後面的’就會報錯。

我們看到後面的單引号’是多出來的,我們嘗試閉合。

嘗試最經典的檢測方法

id=' and ''='
id=' and ''='
           

1-1

【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記

1-2

【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記

最經典的的注入的現象。

最後得出payload

id=' and [payload] and '1'='
           

Less 2

Less 2比Less 1還簡單,在Less 1的基礎上,我們直接得出

payload:

id= and [payload] and =
           

Less 3

出現的報錯如下:

可以看出,這裡的的參數可能是使用如下這種格式的:

我們使用之前講到的方法也驗證的如上的說法。

首先我們要做的就是閉合這個(,嘗試如下:

id=') and (=
           

結果為:

可以看出)的前面有個’,是以我們還要閉合這個單引号,最後就變成了。

id=') and (''='
id=') and (''='
           

嘗試後均沒有報錯,得出payload:

id=') and [payload] and ('1'='
           

Less 4

這次是雙引号出現報錯:

出現如下:

這題和Less 3很相似,唯一不同的點就是Less 3中需要被閉合的是單引号,而4中是雙引号,最後嘗試構造如下:

id=") and (""="
id=") and (""="
           

測試成功,得出payload:

Less 5

Less 5的答案很簡單,但是他沒有顯示出資料,但還是可以基于報錯去判斷和構造SQL語句。

嘗試1:

報錯内容:

直接按照正常的方法去構造:

id=' and ''='
id=' and ''='
           

相應的結果對比:

【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記
【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記【SQL注入之sqli-labs】Less 1 - Less 5 練習筆記

其中輸出的SQL語句為作弊專用。

還好是存在報錯提示,不然如果出現這樣沒有顯示資料的情況,很難判斷是否已經被可以被注入了。

我們來看一下代碼确認一下:

if($row)
    {
    echo '<font size="5" color="#FFFF00">'; 
    echo 'You are in...........';
    echo "<br>";
        echo "</font>";
    }
    else 
    {

    echo '<font size="3" color="#FFFF00">';
    print_r(mysql_error());
    echo "</br></font>";    
    echo '<font color= "#0000ff" font size= 3>';    

    }
           

可以确定的是,SQL語句結果為最後為True或者False都不顯示資料。

判斷的條件是是否出現You are in………..這句話。

因為如果文法錯誤的話,直接回抛出相應的SQL報錯。

那麼我們就放心的構造payload:

id=' and [payload] and '1'='
           

0x03 總結

  1. 使用’和”嘗試是否出現報錯。
  2. 如果出現報錯則為報錯型SQL注入,如沒有報錯則進行盲注。
  3. 報錯中如果出現) ‘) “)等,則進行相應的閉合即可。
  4. 熟練掌握SQL語句,學會如何閉合SQL語句。

0x04 參考文章

http://blog.csdn.net/u012763794/article/details/51207833