SQL注入基本知識
阿新 • • 發佈:2021-12-21
注入的基本知識及自己的一點見解
:
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所對應的結果!