sql 注入例項

2021-04-14 08:56:26 字數 1589 閱讀 7253

用於登入的表

users(name,pwd)

建立乙個窗體frmlogin,其上有兩個文字框text1,text2和兩個命令按鈕cmdok,cmdexit。兩個文字框分別用於讓使用者輸入使用者名稱和密碼,兩個命令按鈕用於「登入」和「退出」。

1、定義ado connection物件和ado recordset物件:

option explicit

dim adocon as adodb.connection

dim adors as adodb.recordset

2、在form_load中進行資料庫連線:

set adocon = new adodb.connection

adocon.cursorlocation = aduseclient

adocon.open "provider=microsoft.jet.oledb.4.0.1;data source=" && _

cmdok中的**

dim sqlstr as string

sqlstr = "select * from usersswheresname='" && text1.text && _

"' and pwd='" && text2.text && "'"

set adors = new adodb.recordset

set adors=adocon.execute(sqlstr)

if adors.recordcount>0 then //或if not adors.eof then

....

msgbox "pass" //通過驗證

else

...

msgbox "fail" //未通過驗證

end if

執行該程式,看起來這樣做沒有什麼問題,但是當在text1中輸入任意字串(如123),在text2中輸入a' or 'a'='a時,我們來看sqlstr此時的值:

select * from usersswheresname='123' and pwd='a' or 'a'='a'

執行這樣乙個sql語句,由於or之後的'a'='a'為真值,只要users表中有記錄,則它的返回的eof值一定為false,這樣就輕易地繞過了系統對於使用者和密碼的驗證。

這樣的問題將會出現在所有使用select * from usersswheresname='" && name && "' and pwd='" && password &&"'的各種系統中,無論你是使用那種程式語言。

二、漏洞的特點

1、與程式語言或技術無關

無論是使用vb、delphi還是asp、jsp。

2、隱蔽性

現有的系統中有相當一部分存在著這個漏洞,而且不易覺察。

3、危害性

不需要進行使用者名稱或密碼的猜測即可輕易進入系統。

三、解決漏洞的方法

1、控制密碼中不能出現空格。

2、對密碼採用加密方式。

這裡要提及一點,加密不能採用過於簡單的演算法,因為過於簡單的演算法會讓人能夠構造出形如a' or 'a'='a的密文,從而進入系統。

3、將使用者驗證和密碼驗證分開來做,先進行使用者驗證,如果使用者存在,再進行密碼驗證,這樣一來也能解決問題。 

SQL注入語法型別例項

一 union union操作符 用於合併兩個或多個select 語句的結果集 注意 union內部的select語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條select語句中的列的順序必須相同。預設情況,union操作符選取不同的值。如果允許重複的值,請使用union all ...

利用hackbar進行sql注入簡單例項

這個簡單的例項是對乙個 進行sql注入,獲得管理員的賬號和密碼 目標 步驟如下 1 先猜解當前網頁的字段數 在hackbar的輸入框中輸入 order by 7 頁面顯示正常,輸入 order by 8 頁面報錯,說明欄位數為7.2 獲取資料庫的基本資訊 輸入union select 1,2,3,4...

SQL注入(三) sql注入 bugku

原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...