国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

SQL注入攻擊的原理及其防范措施

2024-07-21 02:11:07
字體:
供稿:網(wǎng)友
asp編程門檻很低,新手很容易上路。在一段不長的時間里,新手往往就已經(jīng)能夠編出看來比較完美的動態(tài)網(wǎng)站,在功能上,老手能做到的,新手也能夠做到。那么新手與老手就沒區(qū)別了嗎?這里面區(qū)別可就大了,只不過外行人很難一眼就看出來罷了。在界面的友好性、運行性能以及網(wǎng)站的安全性方面是新手與老手之間區(qū)別的三個集中點。而在安全性方面,新手最容易忽略的問題就是sql注入漏洞的問題。用nbsi 2.0對網(wǎng)上的一些asp網(wǎng)站稍加掃描,就能發(fā)現(xiàn)許多asp網(wǎng)站存在sql注入漏洞,教育網(wǎng)里高校內(nèi)部機構(gòu)的一些網(wǎng)站這種漏洞就更普遍了,可能這是因為這些網(wǎng)站大都是一些學(xué)生做的緣故吧,雖然個個都很聰明,可是畢竟沒有經(jīng)驗,而且處于學(xué)習(xí)中,難免漏洞多多了。本文主要講講sql注入的防范措施,而要明白這些防范措施的用處,須先詳細(xì)講解利用sql注入漏洞入侵的過程。新手們看明白啦。

  相當(dāng)大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷,使應(yīng)用程序存在安全隱患。如這是一個正常的網(wǎng)址http://localhost/lawjia/show.asp?id=444,將這個網(wǎng)址提交到服務(wù)器后,服務(wù)器將進行類似select * from 表名 where 字段="&id的查詢(id即客戶端提交的參數(shù),本例是即444),再將查詢結(jié)果返回給客戶端,如果這里客戶端故意提交這么一個網(wǎng)址:

  http://localhost/lawjia/show.asp?id=444 and user>0,這時,服務(wù)器運行select * from 表名 where 字段=444 and user>0這樣的查詢,當(dāng)然,這個語句是運行不下去的,肯定出錯,錯誤信息如下:

  ·錯誤類型:

microsoft ole db provider for odbc drivers (0x80040e07)
[microsoft][odbc sql server driver][sql server]將 nvarchar 值 'sonybb' 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時發(fā)生語法錯誤。
/lawjia/show.asp, 第 47 行

  但是別有用心的人從這個出錯信息中,可以獲得以下信息:該站使用ms_sql數(shù)據(jù)庫,用odbc連接,連接帳號名為:sonybb。所謂sql注入(sql injection),就是利用程序員對用戶輸入數(shù)據(jù)的合法性檢測不嚴(yán)或不檢測的特點,故意從客戶端提交特殊的代碼,從而收集程序及服務(wù)器的信息,從而獲取想得到的資料。通常別有用心者的目標(biāo)是獲取網(wǎng)站管理員的帳號和密碼。比如當(dāng)某個人知道網(wǎng)站管理員帳號存在表login中,管理員帳號名為admin,他想知道管理員密碼,這里他從客戶端接著提交這樣一個網(wǎng)址:
http://localhost/lawjia/show.asp?id=444 and (select password from login where user_name='admin')>0,返回的出錯信息如下:

  ·錯誤類型:

microsoft ole db provider for odbc drivers (0x80040e07)
[microsoft][odbc sql server driver][sql server]將 varchar 值 '!@#*&admin' 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時發(fā)生語法錯誤。
/lawjia/show.asp, 第 47 行

  你知道嗎?上面標(biāo)紅的部分就是管理員帳號admin的密碼!雖然很復(fù)雜,讓人看幾遍也記不住的,但它就這樣顯示在你面前了,這時您就可以用這個帳號和密碼接管人家的網(wǎng)站了!這時你可能還會說,如果他不是事先知道管理員帳號存在表login中,而且知道管理員帳號為admin,那他就不可能獲得管理員密碼。你錯了,只要人家愿意多花時間嘗試,他將可以獲得數(shù)據(jù)庫連接帳號權(quán)限內(nèi)所能獲得的所有信息!具體過程請參看網(wǎng)上的這篇文章:sql注入漏洞全接觸。

  當(dāng)然這個過程是很煩瑣的而且要花費很多的時間,如果只能以這種手動方式進行sql注入入侵的話,那么許多存在sql注入漏洞的asp網(wǎng)站會安全很多了,不是漏洞不存在了,而是利用這個漏洞入侵的成本太高了。但是如果利用專門的黑客工具來入侵的話,那情況就大大不同了。手動方式進行sql注入入侵至少需要半天或一天乃至很多天的時間,而利用專門的工具來入侵就只需要幾分鐘時間了(視網(wǎng)速快慢決定),再利用獲得的管理帳號和密碼,上傳一個從網(wǎng)上下載的asp后門程序,就輕易獲得整個網(wǎng)站的管理權(quán)限了,甚至整個服務(wù)器的管理權(quán)限。最有名的一種sql注入入侵工具是nbsi 2.0,現(xiàn)在已經(jīng)出到2.0版本了,不過,人家正式名稱不叫sql注入入侵工具,而叫做網(wǎng)站安全漏洞檢測工具。有了這個所謂的檢測工具,使得入侵存在sql注入漏洞的asp網(wǎng)站成了小兒科的游戲,那些既不懂a(chǎn)sp又不懂sql、年紀(jì)小小的男性青年常常得以在一天之內(nèi)入侵十多個asp網(wǎng)站,他們以此獲得內(nèi)心的極大滿足。他們似乎也非常講究職業(yè)道德,往往并不破壞網(wǎng)站數(shù)據(jù)和系統(tǒng),常見的破壞方式大都僅僅是改換掉網(wǎng)站的主頁,留下"善意的警告",如:你的網(wǎng)站存在sql注入漏洞,請管理員做好防范措施!并聲明"我沒有破壞數(shù)據(jù)和系統(tǒng)",有的還要借機發(fā)布一下他的倡導(dǎo):"國內(nèi)網(wǎng)站大家不要入侵,有本事入侵小日本的!",最后,簽上他的鼎鼎大名是必不可少的程序。

  如此大的成就多數(shù)情況下僅需動動鼠標(biāo)就做到了。打開最新版的nbsi 2.0,如圖1所示:輸入地址到a區(qū),注意網(wǎng)址必須是帶傳遞參數(shù)的那種,點擊右邊的檢測按鈕,即出來b區(qū)信息,顯示當(dāng)前用戶為sonybb的權(quán)限為public,當(dāng)前庫為lawjia。有點可惜啊,如果是sa權(quán)限的話,就可以跨庫注入了。不過,這個權(quán)限也足夠獲取該網(wǎng)站管理員帳號和密碼了。點c區(qū)下的自動猜解按鈕,即出來當(dāng)前庫lawjia中的各種表,哇,login表中一定是存管理員帳號和密碼的吧?選中它吧,接著點擊d區(qū)下的自動猜解按鈕,立即出來login表里的列名稱,果然是存放用戶名和密碼的啊,太棒了!趕快打上勾,迫不急待的點擊e區(qū)下的自動猜解按鈕。激動人心的時刻就要到來啦,只見唰唰地幾下,帳號與密碼全部出來了。剩下的事就是辨別哪一個帳號是管理員了。


圖1(圖中的示例網(wǎng)站在作者本地電腦上運行)

  不知那些沒注意過sql注入漏洞的asp程序員們看了上圖的例子,要作何感想呢?是不是覺得這個所謂的網(wǎng)站安全漏洞檢測工具sbsi 2.0簡直就是ms_sql的企業(yè)管理器呢?只不過人家不需要帳號和密碼就可以查看您數(shù)據(jù)庫里的所有信息了。如果您的網(wǎng)站就這樣被人不費吹灰之力入侵了,您是不是要吐幾升血了呢?也許您已經(jīng)為系統(tǒng)安全費盡心思了,裝補丁、安防火墻、裝殺毒軟件、巧妙配置iis及數(shù)據(jù)庫用戶權(quán)限,但您就是沒有注意到sql注入漏洞,于是"千里之堤,潰于蟻穴"。防火墻與殺毒軟件對sql注入是沒辦法防范的,因為sql注入入侵跟普通的web頁面訪問沒什么區(qū)別,所以往往是防不甚防。而且一個服務(wù)器上放置的網(wǎng)站往往是有很多個的,服務(wù)器管理員不可能挨個網(wǎng)站挨個頁面的審查其是否存在sql注入漏洞。那么應(yīng)該如何防范sql注入入侵呢?作為服務(wù)器管理員或網(wǎng)站程序員應(yīng)該分別怎么做呢?服務(wù)器管理員要做的事主要是配置iis和數(shù)據(jù)庫用戶權(quán)限,而網(wǎng)站程序員主要是要在程序代碼編寫上防范sql注入入侵。下面詳細(xì)敘述:

  對了服務(wù)器管理員,既然你不可能挨個檢查每個網(wǎng)站是否存在sql注入漏洞,那么就來個一個絕招。這個絕招能有效防止sql注入入侵而且"省心又省力,效果真好!"sql注入入侵是根據(jù)iis給出的asp錯誤提示信息來入侵的,如果你把iis設(shè)置成不管出什么樣的asp錯誤,只給出一種錯誤提示信息,即http 500錯誤,那么人家就沒辦法入侵了。具體設(shè)置請參看圖2。主要把500:100這個錯誤的默認(rèn)提示頁面 c:/windows/help/iishelp/common/500-100.asp改成
c:/windows/help/iishelp/common/500.htm即可,這時,無論asp運行中出什么錯,服務(wù)器都只提示http 500錯誤。


圖2、iis出錯信息設(shè)置

  但是這樣設(shè)置一個不好的地方是程序員編寫的代碼出錯時,服務(wù)器不給出詳細(xì)的錯誤提示信息,會給程序員帶來很大的不便。不過,服務(wù)器畢竟不是測試代碼的地方,應(yīng)堅持安全穩(wěn)定第一,這樣設(shè)置也是無可厚非的,事實上許多服務(wù)器的出錯信息都是如此設(shè)置。

  服務(wù)器管理員還應(yīng)在iis中為每個網(wǎng)站設(shè)置好執(zhí)行權(quán)限,可千萬別給人家靜態(tài)網(wǎng)站以"腳本和可執(zhí)行"權(quán)限。一般情況下給個"純腳本"權(quán)限就夠了,對于那些通過網(wǎng)站后臺管理中心上傳的文件存放的目錄,就更吝嗇一點吧,執(zhí)行權(quán)限設(shè)為"無"好了,這樣做是為了防止人家上傳asp木馬,執(zhí)行權(quán)限設(shè)為"無",人家上傳asp木馬也運行不了。一般情況下,sql注入漏洞僅是涉及一個網(wǎng)站安全的事,如果人家通過這個漏洞上傳了asp木馬并運行起來,那整個服務(wù)器都失陷了。所以有遠(yuǎn)見的、有責(zé)任心的服務(wù)器管理員應(yīng)該十分吝嗇的配置iis的執(zhí)行權(quán)限。

  同樣的吝嗇態(tài)度應(yīng)適用于數(shù)據(jù)庫用戶的權(quán)限配置上,當(dāng)然這里數(shù)據(jù)庫是指ms_sql啦,access都沒有用戶權(quán)限配置這一步驟。如果public權(quán)限足夠使用的絕不給再高的權(quán)限,可千萬別把sa級別的權(quán)限隨隨便便地給人家啊。那個所謂的網(wǎng)站安全漏洞檢測工具nbsi 2.0可有跨庫進行sql注入的功能啊,如果你把sa權(quán)限給了存在sql注入漏洞的庫,那其它庫就不保啦!城門失火,殃及池魚呀。而人家還可以通過調(diào)用xp_cmdshell命令得到系統(tǒng)的最高權(quán)限。具體步驟還是請參看上面提到的那篇《sql注入漏洞全接觸》這篇文章吧。

  接下來要講講程序員的防范措施了。程序主要要做兩件事,最重要的一件事,當(dāng)然是對客戶端提交的變量參數(shù)進行仔細(xì)地檢測啦。對客戶端提交的變量進行檢查以防止sql注入,有各種方法,到http://community.csdn.net/上搜索一下,你能獲得許多有益信息。這里介紹一種現(xiàn)成的方法,別人已經(jīng)寫好了檢測代碼,拿來用一下,不用自己辛苦啦。那就是"楓葉sql通用防注入v1.0 asp版",這是一段對用戶通過網(wǎng)址提交過來的變量參數(shù)進行檢查的代碼,發(fā)現(xiàn)客戶端提交的參數(shù)中有"exec、insert、select、delete、from、update、count、user、xp_cmdshell、add、net、asc"等用于sql注入的常用字符時,立即停止執(zhí)行asp并給出警告信息或轉(zhuǎn)向出錯頁面。大家可以到網(wǎng)上搜索一下,下載這段代碼,存為一個asp頁面,如checksql.asp,把這個頁面include到每個需要帶參數(shù)查詢sql數(shù)據(jù)庫asp頁面中,記住,只要加一行這樣的<!--#include file="checksql.asp"-->代碼就行了。

  程序員要做的第二件事是給用戶密碼加密啦。比如用md5加密。md5是沒有反向算法,不能解密的。人家即使知道經(jīng)加密后存在數(shù)據(jù)庫里的像亂碼一樣的密碼,他也沒辦法知道原始密碼了。不過,人家可以用update方法用他的密碼代替你的密碼,但這個操作還是有點麻煩,人家可能會怕麻煩而放棄。而那個所謂的網(wǎng)站安全漏洞檢測工具nbsi 2.0是沒有提供update操作功能的,所以用md5加密后,人家僅用nbsi 2.0而不輔以手動操作的話,就不可能獲得網(wǎng)站管理員帳號的密碼,這將擋住許多菜鳥級的攻擊者,至少那些既不懂a(chǎn)sp又不懂sql、年紀(jì)小小的男性青年是沒有辦法啦!

  文章寫到這,已經(jīng)夠長了,本來還想對那些所謂的網(wǎng)站安全漏洞檢測工具如nbsi之流的黑客工具進行一番理性的探討的,看來還是放棄好了。為了增強網(wǎng)站安全,了解攻擊手段是必須的,但是,利用漏洞開發(fā)專門的黑客工具,使那些其實并不具備必要的網(wǎng)絡(luò)技術(shù)和網(wǎng)絡(luò)安全知識的人(就是文中提到的"既不懂a(chǎn)sp又不懂sql、年紀(jì)小小的男性青年")輕而易舉地侵入一家網(wǎng)站,這除了為許多網(wǎng)絡(luò)管理員制造麻煩外,是否還具有加強網(wǎng)絡(luò)安全意識提高網(wǎng)絡(luò)安全水平的功效呢?

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 文山县| 台北市| 浑源县| 普兰店市| 辽中县| 庐江县| 霞浦县| 阳曲县| 彭州市| 叙永县| 山西省| 应用必备| 赣州市| 连山| 玛纳斯县| 邮箱| 东阿县| 襄城县| 东乌珠穆沁旗| 错那县| 阜平县| 明星| 南漳县| 应用必备| 峡江县| 宝兴县| 时尚| 诏安县| 京山县| 井冈山市| 无棣县| 枞阳县| 大宁县| 贵定县| 惠州市| 宜黄县| 华宁县| 五家渠市| 清新县| 长宁县| 铅山县|