登陸中的SQL注入

2021-06-08 16:00:41 字數 1439 閱讀 5296

在web應用程式的登入驗證程式中,一般有使用者名稱(username) 和密碼(password)兩個引數,程式會通過使用者所提交輸入的使用者名稱和密碼來執行授權操作。我們有很多人喜歡將sql語句拼接起來。例如:

select * from userswhere username =』 txtusername.text 』 and password =』 txtpassword.text 』

其原理是通過查詢users表中的使用者名稱(username) 和密碼(password) 的結果來進行授權訪問,在txtusername.text為a,txtpassword.text為1,那麼sql查詢語句就為:

select * from userswhere username =』 a 』 and password  =』 1 』

如果分別給txtusername.text 和txtpassword.text賦值』 or 『1』 =『1』 --和abc。那麼,sql 指令碼直譯器中的上述語句就會變為:

select * from userswhere username =』』or  『1』 = 『1』  -- and password =』abc』

該語句中進行了兩個條件判斷,只要乙個條件成立,就會執行成功。而'1'='1'在邏輯判斷上是恆成立的,後面的"--"表示注釋,即後面所有的語句為注釋語句這樣我們就成功登入。即sql注入成功.

類似的原理還有

' or1=1--     

1'or'1'='1    

x'or'1'='1'or'1'='1 

如果我們給txtusername.text賦值為:』;droptable users--即:

select * from userswhere username =』』;drop table users-- and password =』abc』

整個使用者表就沒有了,當然這裡要猜出資料表名稱。想想是多麼可怕的事情。

防範sql注入

最簡單的方法是對使用者的輸入進行判定和過濾

可以禁止輸入非法字元

private subtxtusername_change()

dim s as string, ss as long, i as long

s = "\=<>*'- /'"                 '需要禁止的字元

ss = txtusername.selstart              

for i = 1 to len(s)

i = len(txtusername.text)

txtusername.text =replace(txtusername.text, mid(s, i, 1), "")

if i <> len(txtusername.text) and ss > 0 then ss = ss - 1

next

txtusername.selstart = ss

end sub

sqli labs 七 登陸處sql注入

第十三關 這關也是乙個登陸口,和上關所說的一樣,先使用 試一下,讓程式報錯然後判斷後台的sql語句 可以看到後台sql大概是 where name name 這樣的 post資訊中輸入uname 1 or 1 1 passwd 1 submit submit 可以成功進入 但是沒有顯示賬號密碼之類的...

引數化登陸防止SQL注入

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

登陸頁面Sql注入(繞過)

如圖,看到這道題的時候發覺之前做過乙個類似的手工注入 不過這次手注會失敗,後台過濾了sql語句裡的一些東西,但我們並不知道過濾了什麼 到這裡我就基本上沒轍了,不過查詢了資料以後發現sqlmap可以對登入頁面進行注入 一直以為sqlmap只能對url裡的物件進行注入 參考資料 sqlmap的爬蟲會爬取...