【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
1-2
最經典的的注入的現象。
最後得出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語句為作弊專用。
還好是存在報錯提示,不然如果出現這樣沒有顯示資料的情況,很難判斷是否已經被可以被注入了。
我們來看一下代碼确認一下:
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 總結
- 使用’和”嘗試是否出現報錯。
- 如果出現報錯則為報錯型SQL注入,如沒有報錯則進行盲注。
- 報錯中如果出現) ‘) “)等,則進行相應的閉合即可。
- 熟練掌握SQL語句,學會如何閉合SQL語句。
0x04 參考文章
http://blog.csdn.net/u012763794/article/details/51207833