inband: 資料經由sql**注入的通道取出,這是最直接的一種攻擊,通過sql注入獲取的資訊直接反映到應用程式的web頁面上;
out-of-band:資料通過不同於sql**注入的方法獲得(譬如通過郵件等)
推理:這種攻擊時說並沒有真正的資料傳輸,但攻擊者可以通過傳送特定的請求,重組返回的結果從而得到一些資訊
不論是哪種sql注入,攻擊者都需要構造乙個語法正確的sql查詢,如果應用程式對乙個不正確的查詢返回了乙個錯誤訊息,那麼就很容易重新構造初始的查詢語句的邏輯,進而也就能更容易的進行注入;如果應用程式隱藏了錯誤資訊,那麼攻擊者就必須對查詢邏輯進行反向工程,即我們所謂的「盲sql注入」
黑盒測試及其示例:
這個測試的第一步是理解我們的應用程式在什麼時候需要訪問資料庫,典型的需要方法資料庫的時機是:
認證表單:輸入使用者名稱和密碼以檢查是否有許可權
搜尋引擎:提交字串以從資料庫中獲取相應的記錄
電子商務站點:獲取某類商品的**等資訊
作為測試人員,我們需要列對所有輸入域的值可能用於查詢的字段做乙個表單,包括那些post請求的隱含字段,然後擷取查詢語句並產生錯誤資訊。第乙個測試往往是用乙個單引號「'」或者分號「;」,前者在sql中是字串終結符,如果應用程式沒有過濾,則會產生一條錯誤資訊;後者在sql中是一條sql語句的終結符,同樣如果沒有過濾,也會產生錯誤資訊。
同樣可用於測試的還有「--」以及sql中的一些諸如「and」的關鍵字,通常很常見的一種測試是在要求輸入為數字的輸入框中輸入字串。
通過上面的測試輸入返回的錯誤資訊能夠讓我們知道很多資料庫的資訊。這時候就需要「盲目sql注入」了。注意,我們需要多所有可能存在的sql注入漏洞的輸入域進行測試,並且在,每個測試用例時只變化乙個域的值,從而才能找到真正存在漏洞的輸入域。下面看看一些常用例測試的sql注入語句。
引用select * from users where username='$username'and password='$password'
我們針對上面的sql語句分析,發現如果用下面的測試資料就能夠進行sql注入了引用
$username = 1'or'1'='1
$password=1'or'1'='1
看看整個sql查詢語句變成:引用
select * from users where username='1' or '1'='1' and password='1'or '1'='1'
假設引數值是通過get方法傳遞到伺服器的,且網域名稱為www.example.com 那麼我們的訪問請求就是:引用'%20or%20'1'%20=%20'1&password=1'%20or%
20'1'%20=%20'1
對上面的sql語句作簡單分析後我們就知道由於該語句永遠為真,所以肯定會返回一些資料,在這種情況下實際上並未驗證使用者名稱和密碼,並且在某些系統中,使用者表的第一行記錄是管理員,那這樣造成的後果則更為嚴重。
另外乙個查詢的例子如下:引用select * from users where((username='$username')and(password=md5('$password')))
在這個例子中,存在兩個問題,乙個是括號的用法,還有乙個是md5雜湊函式的用法。對於第乙個問題,我們很容找出缺少的右括號解決,對於第二個問題,我們可以想辦法使第二個條件失效。我們在查詢語句的最後加上乙個注釋符以表示後面的都是注釋,常見的注釋起始符是/*(在oracle中是--),也就是說,我們用如下的使用者名稱和密碼:引用
$username =1' or '1'='1'))/*
$password = foo
那麼整條sql語句就變為:引用select * from users where(( username='1'or '1'='1'))/*')and(password=md5('$password')))
有關sql注入
大家存在5點誤區 1 sql注入比較難防,需要替換select,delete等一打字元 其實對於字元型替換再多都沒有替換單引號為兩個單引號來的好!對於數字型替換再多都沒有用,一定要型別轉換。2 忽略dropdownlist傳來的東西 其實是不對的,一切客戶端的東西都是不可信任的,select下拉框也...
有關sql注入
所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,...
論壇答疑點滴 有關sql注入
大家存在5點誤區 1 sql注入比較難防,需要替換select,delete等一打字元 其實對於字元型替換再多都沒有替換單引號為兩個單引號來的好!對於數字型替換再多都沒有用,一定要型別轉換。2 忽略dropdownlist傳來的東西 其實是不對的,一切客戶端的東西都是不可信任的,select下拉框也...