1. 程式人生 > 其它 >SQL注入基本知識

SQL注入基本知識

注入的基本知識及自己的一點見解

SQL注入基本知識參考這個部落格即可SQL注入

我主要想說一下自己在做sql注入過程中遇到的疑惑

例如:
資料庫為

查詢語句為

select * from userinfo where id='$_GET['id']'

此時閉合為單引號閉合,當判斷注入型別時候,

輸入1:SELECT * FROM userinfo WHERE id='1';,此時正常返回結果;

輸入1':SELECT * FROM userinfo WHERE id='1'';,此時意料之中報錯

輸入1":SELECT * FROM userinfo WHERE id='1"';,此時本來預料會報錯的,因為閉合型別錯誤,但是沒想到竟然正確輸出結果

當時遇到這種問題困擾好久:既然閉合型別為',為什麼輸入"時候沒有報錯,既然"沒有報錯,那麼在SQL注入時候如何判斷閉合型別呢,

為了查清楚原因所在,在資料庫中不斷測試,又換了一下別的符號
SELECT * FROM userinfo WHERE id='1a';


也是輸出正確結果,不論1後面跟什麼字元,除了單引號和數字,都能正常輸出結果!

這時候倒不得不把問題聚焦到id本身上來,果然問題出現在這裡,在資料庫中看到,id為
int型別,這說明,當輸入內容為1'時候,這時候因為正常閉合了前面的',所以會出現語法錯誤;但是當我們輸入1"或者1a等等,這時候並沒有閉合',我們輸入的內容被當做普通字元了,而id是int型別,這裡有一個隱式轉換,自動把我們輸入的轉換為數字,所以只要1後面不跟',無論其他什麼符號,都會被忽略,最終轉為數字1查詢到id=1所對應的結果!