下面通過乙個登入時對使用者驗證來說明:
驗證時的sql語句:
select * from where user='"+txtusername.text+"' and pwd='"+txtpwd.text+"'
這是一段從資料庫中查詢使用者,對使用者名稱,密碼驗證。看上去好象沒有什麼問題,但是實際這裡面淺藏著問題,
使用者名稱:admin 密碼:admin
select * from where user='admin' and pwd='admin'
如果使用者和密碼正確就可通驗證。如果我使用者名稱:asdf' or 1=1 -- 密碼:隨意輸入.我們再來看語句:
select * from where user='asdf' or 1=1 -- and pwd=''
執行後看到什麼?是不是所有記錄,如果程式只是簡單判斷返回的條數,這種方法就可以通驗證。
如果執行語句是sa使用者,再通過xp_cmdshell新增系統管理員,那麼這個伺服器就被拿下了。
解決方法:
a. 這個問題主要是由於傳入特殊字元引起的,我們可以在對輸入的使用者名稱密碼進入過濾特殊字元處理。
b. 使用儲存過程通過傳入引數的方法可解決此類問題(注意:在儲存過程中不可使用拼接實現,不然和沒用儲存過和是一樣
的)。
SQL注入(三) sql注入 bugku
原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...
SQL注入 報錯注入
乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...
SQL注入 報錯注入
sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...