?

SQL注入防護

2016-10-17 19:37范義山
科技視界 2016年21期
關鍵詞:入侵防范漏洞

范義山

【摘 要】SQL注入漏洞對網站的安全構成嚴重威脅,然而SQL注入漏洞又具有較高的普遍性。因此查找SQL注入漏洞并了解其入侵方式,及時堵塞網站安全漏洞,是我們網站管理員必須要掌握的。本文以一款SQL注入工具入侵原理入手,講解了其入侵步驟,并給出了防范措施。

【關鍵詞】SQL注入;入侵;漏洞;防范

0 引言

SQL注入攻擊指的是攻擊者通過構建特殊的輸入作為參數傳入Web應用程序(一般通過網頁地址欄或留言板等具有提交功能的欄目輸入),應用程序接收后錯誤的將攻擊者的輸入作為原始SQL查詢語句的一部分執行,導致改變了程序原始的SQL查詢邏輯,額外的執行了攻擊者構造的SQL查詢語句。攻擊者根據程序返回的結果,獲得想得知的某些數據(譬如后臺管理賬戶、密碼),進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使信息泄露。

SQL注入攻擊是黑客對網站進行攻擊、滲透的常用手段,其風險性極高,并且因為SQL注入入侵跟普通的WEB頁面訪問沒什么區別,所以防火墻與殺毒軟件對SQL注入是沒辦法防范的。由于程序員的水平及經驗參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,導致存在SQL注入漏洞的網站相當普遍。如何從根本上進行SQL注入防御,降低SQL注入風險具有極其重要的現實意義。

1 啊D注入工具入侵原理

所謂知己知彼,百戰百勝。要想有效防御SQL注入攻擊,就要了解其攻擊原理。本文通過對一款黑客常用注入工具——啊D注入工具工作原理的講解,來分析SQL注入的防范措施。

啊D注入工具的攻擊方法實際上就是逐步測試、逐步猜解,猜解網站數據庫中的后臺管理員表名、字段名、字段值,進而獲取到網站的管理員賬號、密碼,在其它工具獲取網站后臺登錄地址的前提下,登錄網站后臺,獲取網站控制權,甚至整個服務器的管理權限。

有了這個攻擊工具,使得入侵存在SQL注入漏洞的網站成了小兒科的游戲,那些既不懂編程又不懂SQL、年紀小小的青年常常得以在一天之內入侵十多個網站。

2 啊D注入工具攻擊步驟

2.1 啊D注入工具入侵的第一步是尋找注入點

怎樣才算注入點呢?其實就是一類URL,就是網站的一些鏈接,在后面人為的添加一些SQL語句、單引號等之后,這些人為添加的語句可以最終被提交到數據庫執行,并將結果在瀏覽器端顯示出來,這樣的URL就是網站的注入點。黑客通過執行后不同的返回結果,來猜解數據庫的表名、字段名、字段值,進而入侵網站。

那么啊D注入工具是怎么尋找注入點的呢?實際上和手工注入一樣,就是通過在一些網站鏈接地址后輸入一些非法字符串,根據返回的結果判斷網站是否可以進行注入。最常用的就是單引號測試法和1=2測試法。

單引號測試法就是在最后面加上單引號,如果結果返回“microsoft jet database engine 錯誤80040e14”之類的錯誤信息,就表示單引號被連接到SQL語句中執行了,就說明在該鏈接地址后面添加SQL語句可以被提交到數據庫執行,就表示該鏈接地址存在SQL注入漏洞。

1=2測試法就是在網站鏈接地址后輸入1=2,返回的結果如果是:BOF或EOF中有一個是“真”,或者當前的記錄已被刪除,所需的操作要求一個當前的記錄,或者原來正常顯示的網頁沒有顯示出來,就表示1=2被連接到SQL語句中執行了,就說明在該鏈接地址后面添加SQL語句可以被提交到數據庫執行,就表示該鏈接地址存在SQL注入漏洞。

2.2 猜解表名

假如http://localhost/article.aspx?id=124是一個注入點,要用它來猜解表名。怎么提交?

http://localhost/article.aspx?id=124 and exists(select count(*) from admin)

然后看頁面返回了,返回正常就表示該表存在,否則就不存在了。啊D工具就是這樣猜解的,它的軟件數據庫里面有很多提前添加好的表名。然后猜解的時候就是挨個試了。

2.3 猜解字段名

有了表名,下一步就是猜解字段了。需要用到這樣的語句:http://localhost/article.aspx?id=124 and exists(select username from admin)

也就是將count(*)換成了字段名。將設置列表中的字段挨個進去匹配。頁面返回正常就表示字段存在,否則就不存在。

2.4 猜解字段長度

字段有了,下一步就是猜解字段值了,先猜解字段長度。

http://localhost/article.aspx?id=124 and (select top 1 len(username) from admin)>0

http://localhost/article.aspx?id=124 and (select top 1 len(username) from admin)>5

http://localhost/article.aspx?id=124 and (select top 1 len(username) from admin)>6

|直到準確判斷出長度為止。其中的len()函數負責計算username中第一條記錄的長度。

2.5 猜解字段值

知道了長度,下一步就是準確猜解每一位的值。

and(select top 1 asc(mid(username,1,1))from admin)>97

and(select top 1 asc(mid(username,1,1))from admin)>98

and(select top 1 asc(mid(username,1,1))from admin)>99

and(select top 1 asc(mid(username,1,1))from admin)=100

解析一下這個語句的含義。就是一些函數的使用技巧, asc() 負責查詢某個字符的ascii碼值,mid(addr,start,len)這個函數負責選取某個字符串中從start開始len位的字符。本語句就是取出字符串的第一個字符了。當然第二個字符:

and(select top 1 asc(mid(username,2,1))from admin)>99就是這樣算的了,取出每一位的結果之后,轉換為對應的字符就是用戶名或者密碼了。

這就是為什么猜解表名、字段的時候,都是一條一條的出結果,而猜解字段值的時候,是一個字符一個字符的出結果了。

3 SQL注入攻擊的防御辦法

知道了黑客入侵的原理,也就知道怎么對應的做好防護了。從阿D注入工具入侵的步驟來看,主要就是通過提交非法SQL語句,根據不同的返回信息來確定猜測的表名、字段名、字段值是否正確,通過不斷的窮舉,最終猜解到準確的表名、字段名、字段值。所以防御的辦法就是阻斷猜解過程,一是不讓非法SQL語句提交、執行,二是不讓出錯信息在瀏覽器端顯示出來。下面詳細敘述:

1)對用戶在地址欄的輸入、傳入的Request函數等進行校驗,通過正則表達式,對單引號、SQL語句等進行判斷和過濾,阻止非法SQL語句的執行,防止SQL注入。

2)修改web服務器參數設置。SQL注入入侵是根據web服務錯誤提示信息來獲取信息進行入侵的??梢园褀eb服務器設置成不管出什么樣的錯誤,只給出一種錯誤提示信息,即http 500錯誤,攻擊者就沒辦法從提示信息中獲取有用信息進行入侵了,注入工具也沒有辦法了。這個方法即簡單又有效,缺點就是代碼出錯時,會給程序的調試帶來很大的不便。不過,服務器畢竟不是測試代碼的地方,應堅持安全穩定第一,事實上許多服務器的出錯信息都是如此設置。

另外,利用檢測工具和手工檢測方法,對網站進行檢測,一旦發現存在漏洞,就對被注入的地址進行參數過濾和檢查。

【參考文獻】

[1]方偉,方欣,一個通用防止SQL注入系統的設計與實現[J].湖南理工學院學報:自然科學版,2012,12:25(4).

[2]楊省偉,楊浩杰.SQL注入數據庫攻擊與防御技術研究[J].長沙大學學報,2013,9:27(5).

[3]吳金秀.SQL注入攻擊與防御[J].陜西交通職業技術學院學報,2012(4).

[責任編輯:王偉平]

猜你喜歡
入侵防范漏洞
漏洞
三明:“兩票制”堵住加價漏洞
淺析防范電能表串戶的重要性及方法
高鐵急救應補齊三漏洞
日媒:美虛偽的中國商品“入侵”論
內地非法卵子被傳“入侵”香港
菲律賓抗議中國三艘船艦上月“入侵”南海
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合