1. 程式人生 > >SQL注入攻擊原理以及基本方法

SQL注入攻擊原理以及基本方法

一、SQL注入的概述

定義:SQL注入即是指web應用程式對使用者輸入資料的合法性沒有判斷,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的SQL語句,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。

                                    為了更直觀的讓大家瞭解到sql注入的原理,貼上一張sql注入攻擊示意圖

●SQL注入威脅表現形式可以體現為以下幾點:

        ●繞過認證,獲得非法許可權

        ●猜解後臺資料庫全部的資訊

        ●注入可以藉助資料庫的儲存過程進行提權等操作

●SQL注入攻擊的典型手段

        ●判斷應用程式是否存在注入漏洞

        ●收集資訊、並判斷資料庫型別

        ●根據注入引數型別,重構SQL語句的原貌

        ●猜解表名、欄位名

        ●獲取賬戶資訊、攻擊web或為下一步攻擊做準備

二、SQL注入的簡單例子

1.SQL注入漏洞的幾種判斷方法

        ①http://www.heetian.com/showtail.asp?id=40'

        ②http://www.heetian.com/showtail.asp?id=40 and 1=1

        ③http://www.heetian.com/showtail.asp?id=40 and 1=2

        如果執行①後,頁面上提示報錯或者提示資料庫錯誤的話,說明是存在注入漏洞的。

        如果執行②後,頁面正常顯示,而執行③後,頁面報錯,那麼說明這個頁面是存在注入漏洞的。

2.收集資訊、判斷資料庫型別

        從其返回的資訊中可以判斷下資料庫的型別,更多可能可以知道部分資料庫中的欄位以及其他有用資訊,為下一步攻擊提供鋪墊。

3.根據注入引數型別,重構SQL語句的原貌

        ①ID=40 這類注入的引數是數字型,那麼SQL語句的原貌大致是:Select*from 表名 where 欄位=40

        ②name=電影 這類注入的引數是字元型,SQL語句原貌大致是:Select*from 表名 where 欄位=‘電影’

        ③搜尋時沒有過濾引數的,如keyword=關鍵字,SQL語句原貌大致是:Select*from 表名 where 欄位 like ‘%關鍵字%’

4.猜解表名、欄位名(直接將SQL語句新增到URL後)

        ①and exists(select*from 表名)

        如果頁面沒有任何變化,說明附加條件成立,那麼就是說明猜解的表名正確,反之,就是不存在這個表,接下來就繼續猜解,知道正確

        ②and exists(select 欄位 from 表名)

        方法原理同上

        ③猜解欄位內容(利用以上猜解出的表名和欄位名 方法較古老且麻煩)

        ●猜解欄位內容的長度

        (select top 1 len(欄位名)from 表名)>0 直至猜解到>n不成立的時候,得出欄位的長度為:n+1。

        ●得到長度後,猜解具體的內容

        (select top 1 asc(mid(username,1,1))from 表名)>0直到>m不成立時,就可以猜解出ASCII碼值了。

注:本人新學習SQL注入,有不對之處望指出並修改,謝謝!!!