當前位置:成語大全網 - 書法字典 - 如何檢測SQL註入技術和跨站腳本攻擊

如何檢測SQL註入技術和跨站腳本攻擊

在過去的兩年中,安全專家應該更加關註對網絡應用層的攻擊。因為不管妳的防火墻規則有多強,或者妳在打補丁方面有多努力,如果妳的web應用程序開發人員不

跟隨

安全代碼開發,攻擊者將通過端口80進入您的系統。廣泛使用的兩種主要攻擊技術是SQL註入攻擊和CSS攻擊。SQL註入群島

指:通過互聯網的輸入區域插入SQL元字符(特殊字符)。

表示壹些數據)和指令,並操縱執行後端SQL查詢的技術。這些攻擊主要針對其他組織的WEB服務器。CSS攻擊是通過在URL中插入腳本標簽來實現的,然後

誘導信任它們的用戶點擊它們,以確保惡意Javascript代碼在受害者的機器上運行。這些攻擊利用了用戶和服務器之間的信任關系,實際上服務器並沒有損失。

檢測輸入和輸出,因此javascript代碼不會被拒絕。

本文討論了SQL註入和CSS攻擊漏洞的檢測技術。網上已經有很多關於這兩種基於。

討論網絡攻擊,例如如何實施攻擊、攻擊的影響以及如何更好地編譯和設計程序來防止這些攻擊。然而

關於如何檢測這些攻擊沒有足夠的討論。我們采用流行的開源IDSnort

3】,根據檢測這些攻擊的規則形成正則表達式。順便提壹下,Snort的默認規則設置包含檢測CSS的方法,但這些方法很容易避免檢測。比如大部分都是十六進制編碼。

代碼,如%3C%73%63%72%69%70% 74%3E,而不是避免檢測。

的依賴程度

偏執狂組織,我們編寫了各種規則來檢測相同的攻擊。如果您想檢測各種可能的SQL註入攻擊,那麽您只需關註任何現有的SQL。

元字符,如單引號、分號和雙破折號。類似地,檢測CSS攻擊的壹種極端方法就是小心HTML標記的尖括號。但是這可以檢測到

犯很多錯誤。為了避免這些,需要修改這些規則以使其檢測更準確,同時仍然無法避免錯誤。

在Snort規則中使用pcre(Perl)

兼容常規

表達式)【ref4】關鍵字,每個規則可以有或沒有其他規則操作。grep(文檔搜索工具)等公共軟件也可以使用這些規則來審查網絡。

服務器日誌。但是,需要註意的是,只有當使用GET提交請求時,用戶的輸入才會記錄在日誌中,如果使用POST提交請求,則不會記錄在日誌中。

2.SQL註入的正則表達式

當...的時候

當您為SQL註入攻擊選擇正則表達式時,壹定要記住攻擊者可以通過提交表單或通過Cookie區域註入SQL。您的輸入檢測邏輯應該考慮用戶。

組織的各種類型的輸入(如表單或Cookie信息)。如果您發現許多警告來自某個規則,請註意單引號或分號。也許這些角色是由您的Web應用程序創建的。

CookieS中的法律輸入。因此,您需要根據您的特定WEB應用程序來評估每個規則。

如前所述,用於檢測SQL註入攻擊的普通正則表達式應該註意SQL的特殊元字符,例如單引號(‘)和雙擴展名符號(-)。為了找出這些字符及其十六進制等價物,可以使用以下正則表達式:

2.1檢測SQL元字符的正則表達式

/(\ % 27)|(\‘)|(\-\-)|(\ % 23)|(#)/IX

解釋:

科學家首先檢查單引號的十六進制等價性,單引號本身還是雙放大符號。這些是MS SQL Server或Oracle的字符,這意味著註釋是跟在後面的。

接下來的內容將被忽略。此外,如果您使用MySQL,則需要註意‘#‘及其等效十六進制的外觀。註意,我們不需要檢查雙破折號的十六進制等價物。

因為這不是HTML元字符,所以瀏覽器不會對其進行編碼。而且,

如果攻擊者試圖手動將雙破折號更改為十六進制值%2D(使用類似阿基裏斯【參考文獻5】的代理),SQL註入將失敗。

添加上述正則表達式的新Snort規則如下:

警報

TCP $ EXTERNAL _ NET any-& gt;$ HTTP _ SERVERS $ HTTP _ PORTS(msg:“SQL

註射——偏執”;

flow:to_server,已建立;uricontent:“。pl“;pcre:“/(\ % 27)|(\‘)|(\-\-)|(% 23)|(#)/I“;

classtype:Web應用程序攻擊;sid:9099;rev:5;)

在這次討論中,

uricontent關鍵字的值為“。因為在我們的測試環境中,CGI

這個程序是用Perl語言編寫的。uricontent關鍵字的值取決於您的特殊應用。這個值可能是“。php“,“。asp“或”。jsp”。

》,等。從這個角度來看,我們沒有顯示相應的Snort規則,但我們將給出正則表達式來創建這些規則。

您可以通過這些正則表達式輕松創建許多Snort規則。在前面的正則表達式中,

我們檢測雙破折號是因為即使沒有單引號,它也可能是SQL註入點【參考文獻6】。例如,SQL查詢條目僅包含數值,如下所示:

從數據庫中選擇值1,值2,數值3

其中數量值3 =某個用戶提供的數量

在這種情況下,攻擊者可以執行額外的SQL查詢並提交以下輸入:

3;將值插入some_other_table

最後,pcre的修飾符“I”和“x”分別用於匹配大小寫和忽略空格。上述規則也可以擴展到檢查分號的存在。然而,分號很可能是普通HTTP響應的壹部分。為了減少這種錯誤,還可以對任何正常的單引號和雙放大符號。

現在,上面的規則應該修改為首先檢測=的存在。用戶輸入將響應GET或POST請求,壹般輸入提交如下:

用戶名=某個用戶提供的值。密碼=某個用戶提供的值

因此,嘗試註入SQL將導致用戶輸入出現在a =符號或其等效十六進制值之後。

2.2更正用於檢測SQL元字符的正則表達式

/((\%3d)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3b)|(:))/i

解釋:

該規則首先關註=符號或其十六進制值(%3D),然後考慮除換行符之外的零個或多個任意字符,最後檢測單引號、雙破折號或分號。

學術標準工作

類型-B SQL註入將嘗試圍繞單引號的目的操縱原始查詢,以便獲得有用的值。為了討論這種攻擊,我們通常使用字符串1‘或‘1‘=‘1。然而,

此字符串的調查很容易逃脫,例如使用1‘or 2》;1 - .

然而,唯壹不變的部分是初始字符的值,後面是單引號,然後是“或”。隨後的布爾邏輯可能在壹定範圍內變化,這可能是常見的或非常復雜的。這些攻擊可能

由以下正則表達式相當準確地檢測到。2.3章節解釋。

2.3典型SQL註入攻擊的正則表達式

/\ w *(\ % 27)|(\‘)()| o |(\ % 4F)((\ % 72)| r |(\ % 52)/IX

解釋:

\ w *-零個或多個字符或下劃線。

(\ % 27)| \‘-單引號或其十六進制等效符號。

(\ % 6 f)| o |(\ % 4 f)(\ % 72)| r |-(\ % 52)-‘or‘的大小寫及其十六進制等價形式。

聯合SQL

在SQL註入查詢各種數據庫也很常見。如果前面的正則表達式只檢測單引號或其他SQL元字符。

,會造成很多錯誤。您應該進壹步修改查詢以檢測單引號和關鍵字“union”。這也可以進壹步擴展其他SQL關鍵字,如“select”,

“插入”、“更新”、“刪除”等。

2.4檢測SQL註入和聯合查詢關鍵字的正則表達式。

/((\ % 27)|(\‘)union/IX

(\ % 27)|(\‘)-單引號及其十六進制等效符號

union-聯合關鍵字

您還可以為其他SQL查詢定制表達式,例如》:Select、insert、update、delete、drop等。

諸如

因此,在這壹階段,攻擊者發現web應用程序中存在SQL註入漏洞,並試圖利用該漏洞。如果他實現了基於後端服務器的MS SQL,

服務器時,他通常會嘗試運行壹些危險的存儲和擴展存儲進程。這些過程通常以字母“sp”或“XP”開頭。通常情況下,他可能會試圖逃跑。

XP _ cmdshell擴展存儲過程(通過SQL Server執行Windows

命令)。SQL server的SA權限有權執行這些命令。同樣,他們可以通過XP _ xp_regread、xp_regwrite等存儲過程修改註冊表。

2.5檢測MS SQL Server SQLSQL註入攻擊的正則表達式

/exec(\ s | \+)+(s | x)p \ w+/IX

解釋:

exec-用於請求執行存儲或擴展存儲過程的關鍵字。

(\ s | \+)+-壹個或多個空格或它們的http等效編碼。

字母(s | x)p-“sp”或“XP”用於標識存儲或擴展存儲過程。

\ w+-與過程名稱匹配的壹個或多個字符或下劃線。

3.跨站點腳本(CSS)的正則表達式

當...的時候

當發起CSS攻擊或檢測到網站漏洞時,攻擊者可能首先制作簡單的HTML標記,如(粗體)、(斜體)或(下劃線),或者他可能嘗試簡單的標記。

腳本標簽,如alert(“OK”)。

因為大多數出版物和在線通信測試網站都存在css漏洞,所以以此為例。這些企圖很容易被發現。

然而,聰明的攻擊者可能會用十六進制值替換整個字符串。這樣,標簽將顯示為%3C%73%63%72%69%70%74%3E。

另壹方面,攻擊者可能使用web代理服務器,如Achilles,它會自動轉換壹些特殊字符,如%3E,這樣當攻擊發生時,URL

十六進制等價通常用於代替尖括號。

下面的正則表達式將檢測任何文本中包含的html。它將捕獲使用、或的嘗試。此正則表達式應忽略大小寫。我們需要檢測尖括號及其十六進制等效值(%3C|)

3.1壹般CSS攻擊的正則表達式

/((\ % 3C)|)/IX

解釋:

((\ % 3c)|)-Check》或其等效十六進制值

Snort規則:

警報

TCP $ EXTERNAL _ NET any-& gt;$HTTP_SERVERS $HTTP_PORTS(消息:“NII

跨站點腳本編寫嘗試“;flow:to_server,已建立;

pcre:“/((\ % 3C)|)/I“;classtype:Web應用程序攻擊;sid:9000;rev:5;)

跨站點腳本也可以使用技術。當前默認的snort規則很容易避免。

第3.2節提供了防止這種技術的方法。

3.2 "

/((\ % 3C)|)/I

解釋:

(\ % 3c)|)-& gt;或其十六進制等價物

3.3 CSS攻擊的極端正則表達式

/((\ % 3C)|)/I

解釋:

這條規則很容易找到。由於您的web服務器和web應用程序的體系結構,此規則可能會產生壹些錯誤。但它可以保證捕捉任何類似CCS或CSS的攻擊。

關於避免過濾的CSS方法,請參考Bugtraq提交的方法。

但是請註意,最後壹個極端規則將能夠檢測到所有這些攻擊。

總結:

存在

在本文中,我們提出了不同類型的正則表達式規則來檢測SQL註入和跨站腳本攻擊。壹些規則簡單而極端,潛在的攻擊將提高警惕。但是這些極端的規則可以

會導致壹些主動的錯誤。鑒於此,我們修改了這些簡單的規則並使用了其他樣式,以便可以更準確地檢查它們。在這些網絡的攻擊檢測中,我們建議這樣做。

這些是調試IDS或日誌分析方法的起點。經過幾次修訂後,在評估正常在線交易部分的非惡意響應後,您應該準備好檢測這些攻擊。