免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SQL注入原理深度解析
安全中國(guó) www.anqn.com
更新時(shí)間:2008-8-31 0:38:33
責(zé)任編輯:果果龍
熱 點(diǎn):
對(duì)于Web應(yīng)用來說,注射式攻擊由來已久,攻擊方式也五花八門,常見的攻擊方式有SQL注射、命令注射以及新近才出現(xiàn)的XPath注射等等。本文將以SQL注射為例,在源碼級(jí)對(duì)其攻擊原理進(jìn)行深入的講解。
一、注射式攻擊的原理
注射式攻擊的根源在于,程序命令和用戶數(shù)據(jù)(即用戶輸入)之間沒有做到?jīng)芪挤置鳌_@使得攻擊者有機(jī)會(huì)將程序命令當(dāng)作用戶輸入的數(shù)據(jù)提交給We程序,以發(fā)號(hào)施令,為所欲為。
為了發(fā)動(dòng)注射攻擊,攻擊者需要在常規(guī)輸入中混入將被解釋為命令的“數(shù)據(jù)”,要想成功,必須要做三件事情:
1.確定Web應(yīng)用程序所使用的技術(shù)
注射式攻擊對(duì)程序設(shè)計(jì)語言或者硬件關(guān)系密切,但是這些可以通過適當(dāng)?shù)牟赛c(diǎn)或者索性將所有常見的注射式攻擊都搬出來逐個(gè)試一下就知道了。為了確定所采用的技術(shù),攻擊者可以考察Web頁(yè)面的頁(yè)腳,查看錯(cuò)誤頁(yè)面,檢查頁(yè)面源代碼,或者使用諸如Nessus等工具來進(jìn)行刺探。
2.確定所有可能的輸入方式
Web應(yīng)用的用戶輸入方式比較多,其中一些用戶輸入方式是很明顯的,如HTML表單;另外,攻擊者可以通過隱藏的HTML表單輸入、HTTP頭部、cookies、甚至對(duì)用戶不可見的后端AJAX請(qǐng)求來跟Web應(yīng)用進(jìn)行交互。一般來說,所有HTTP的GET和POST都應(yīng)當(dāng)作用戶輸入。為了找出一個(gè)Web應(yīng)用所有可能的用戶輸入,我們可以求助于Web代理,如Burp等。
3.查找可以用于注射的用戶輸入
在找出所有用戶輸入方式后,就要對(duì)這些輸入方式進(jìn)行篩選,找出其中可以注入命令的那些輸入方式。這個(gè)任務(wù)好像有點(diǎn)難,但是這里有一個(gè)小竅門,那就是多多留意Web應(yīng)用的錯(cuò)誤頁(yè)面,很多時(shí)候您能從這里得到意想不到的收獲。
二、SQL注射原理
上面對(duì)注射攻擊做了一般性的解釋,下面我們以SQL注射為例進(jìn)行講解,以使讀者對(duì)注射攻擊有一個(gè)感性的認(rèn)識(shí),至于其他攻擊,原理是一致的。
SQL注射能使攻擊者繞過認(rèn)證機(jī)制,完全控制遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)。SQL是結(jié)構(gòu)化查詢語言的簡(jiǎn)稱,它是訪問數(shù)據(jù)庫(kù)的事實(shí)標(biāo)準(zhǔn)。目前,大多數(shù)Web應(yīng)用都使用SQL數(shù)據(jù)庫(kù)來存放應(yīng)用程序的數(shù)據(jù)。幾乎所有的Web應(yīng)用在后臺(tái)都使用某種SQL數(shù)據(jù)庫(kù)。跟大多數(shù)語言一樣,SQL語法允許數(shù)據(jù)庫(kù)命令和用戶數(shù)據(jù)混雜在一起的。如果開發(fā)人員不細(xì)心的話,用戶數(shù)據(jù)就有可能被解釋成命令,這樣的話,遠(yuǎn)程用戶就不僅能向Web應(yīng)用輸入數(shù)據(jù),而且還可以在數(shù)據(jù)庫(kù)上執(zhí)行任意命令了。
三、繞過用戶認(rèn)證
我們這里以一個(gè)需要用戶身份認(rèn)證的簡(jiǎn)單的Web應(yīng)用程序?yàn)槔M(jìn)行講解。假定這個(gè)應(yīng)用程序提供一個(gè)登錄頁(yè)面,要求用戶輸入用戶名和口令。用戶通過HTTP請(qǐng)求發(fā)送他們的用戶名和口令,之后,Web應(yīng)用程序檢查用戶傳遞來用戶名和口令跟數(shù)據(jù)庫(kù)中的用戶名和口令是否匹配。這種情況下,會(huì)要求在SQL數(shù)據(jù)庫(kù)中使用一個(gè)數(shù)據(jù)庫(kù)表。開發(fā)人員可以通過以下SQL語句來創(chuàng)建表:
CREATETABLEuser_table(
idINTEGERPRIMARYKEY,
usernameVARCHAR(32),
passwordVARCHAR(41)
);
上面的SQL代碼將建立一個(gè)表,該表由三欄組成。第一欄存放的是用戶ID,如果某人經(jīng)過認(rèn)證,則用此標(biāo)識(shí)該用戶。第二欄存放的是用戶名,該用戶名最多由32字符組成。第三欄存放的是口令,它由用戶的口令的hash值組成,因?yàn)橐悦魑牡男问絹泶娣庞脩舻目诹顚?shí)在太危險(xiǎn),所以通常取口令的散列值進(jìn)行存放。我們將使用SQL函數(shù)PASSWORD()來獲得口令的hash值,在MySQL中,函數(shù)PASSWORD()的輸出由41字符組成。
對(duì)一個(gè)用戶進(jìn)行認(rèn)證,實(shí)際上就是將用戶的輸入即用戶名和口令跟表中的各行進(jìn)行比較,如果跟某行中的用戶名和口令跟用戶的輸入完全匹配,那么該用戶就會(huì)通過認(rèn)證,并得到該行中的ID。假如用戶提供的用戶名和口令分別為lonelynerd15和mypassword,那么檢查用戶ID過程如下所示:
SELECTidFROMuser_tableWHEREusername=’lonelynerd15’ANDpassword=PASSWORD(’mypassword’)
如果該用戶位于數(shù)據(jù)庫(kù)的表中,這個(gè)SQL命令將返回該用戶相應(yīng)的ID,這就意味著該用戶通過了認(rèn)證;否則,這個(gè)SQL命令的返回為空,這意味著該用戶沒有通過認(rèn)證。
下面是用來實(shí)現(xiàn)自動(dòng)登錄的Java代碼,它從用戶那里接收用戶名和口令,然后通過一個(gè)SQL查詢對(duì)用戶進(jìn)行認(rèn)證:
Stringusername=req.getParameter("username");
Stringpassword=req.getParameter("password");
Stringquery="SELECTidFROMuser_tableWHERE"+
"username=’"+username+"’AND"+
"password=PASSWORD(’"+password+"’)";
ResultSetrs=stmt.executeQuery(query);
intid=-1;//-1impliesthattheuserisunauthenticated.
while(rs.next()){
id=rs.getInt("id");
}
開頭兩行代碼從HTTP請(qǐng)求中取得用戶輸入,然后在下一行開始構(gòu)造一個(gè)SQL查詢。執(zhí)行查詢,然后在while()循環(huán)中得到結(jié)果,如果一個(gè)用戶名和口令對(duì)匹配,就會(huì)返回正確的ID。否則,id的值仍然為-1,這意味著用戶沒有通過認(rèn)證。表面上看,如果用戶名和口令對(duì)匹配,那么該用戶通過認(rèn)證;否則,該用戶不會(huì)通過認(rèn)證——但是,事實(shí)果真如此嗎?非也!讀者也許已經(jīng)注意到了,這里并沒有對(duì)SQL命令進(jìn)行設(shè)防,所以攻擊者完全能夠在用戶名或者口令字段中注入SQL語句,從而改變SQL查詢。為此,我們仔細(xì)研究一下上面的SQL查詢字符串:
Stringquery="SELECTidFROMuser_tableWHERE"+
"username=’"+username+"’AND"+
"password=PASSWORD(’"+password+"’)";
上述代碼認(rèn)為字符串username和password都是數(shù)據(jù),不過,攻擊者卻可以隨心所欲地輸入任何字符。如果一位攻擊者輸入的用戶名為
’OR1=1—
而口令為
x
那么查詢字符串將變成下面的樣子:
SELECTidFROMuser_tableWHEREusername=’’OR1=1--’ANDpassword
=PASSWORD(’x’)
該雙劃符號(hào)--告訴SQL解析器,右邊的東西全部是注釋,所以不必理會(huì)。這樣,查詢字符串相當(dāng)于:
SELECTidFROMuser_tableWHEREusername=’’OR1=1
如今的SELECT語句跟以前的已經(jīng)大相徑庭了,因?yàn)楝F(xiàn)在只要用戶名為長(zhǎng)度為零的字符串’’或1=1這兩個(gè)條件中一個(gè)為真,就返回用戶標(biāo)識(shí)符ID——我們知道,1=1是恒為真的。所以這個(gè)語句將返回user_table中的所有ID。在此種情況下,攻擊者在username字段放入的是SQL指令’OR1=1--而非數(shù)據(jù)。
加入安全中國(guó)終身VIP會(huì)員待遇:永久學(xué)習(xí)已開設(shè)的所有培訓(xùn)班課程和以后新開培訓(xùn)班課程贈(zèng)送可申請(qǐng)密碼保護(hù)的免費(fèi)6位QQ贈(zèng)送終身VIP會(huì)員獨(dú)享光盤工具包第一版和第二版為終身VIP會(huì)員推薦安排工作就業(yè)
安全中國(guó)網(wǎng)友投稿專用上傳FTP空間:Ftp服務(wù)器:download.anqn.comFtp端口:21用戶名:anqn密 碼:anqn.com
SQL注入原理深度解析
安全中國(guó) www.anqn.com
更新時(shí)間:2008-8-31 0:38:33
責(zé)任編輯:果果龍
熱 點(diǎn):
四、構(gòu)造SQL注射代碼
為了成功地注入SQL命令,攻擊者必須將開發(fā)人員的現(xiàn)有SQL命令轉(zhuǎn)換成一個(gè)合法的SQL語句,當(dāng)然,要盲注是有些難度的,但一般都是這樣:
'OR1=1–
或者
')OR1=1--
此外,許多Web應(yīng)用提供了帶來錯(cuò)誤報(bào)告和調(diào)試信息,例如,利用'OR1=1--對(duì)Web應(yīng)用進(jìn)行盲注時(shí),經(jīng)??吹饺缦滤镜腻e(cuò)誤信息:
Errorexecutingquery: YouhaveanerrorinyourSQLsyntax; checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear 'SELECT(title,body)FROMblog_tableWHEREcat='OR1=1'atline1
該錯(cuò)誤信息詳細(xì)地為我們展示了完整的SQL語句,在此種情況下,SQL數(shù)據(jù)庫(kù)所期待的好象是一個(gè)整數(shù),而非字符串,所以可以注入字符串OR1=1--,把單引號(hào)去掉就應(yīng)該能成功注入了。對(duì)于大多數(shù)SQL數(shù)據(jù)庫(kù),攻擊者可以在一行中放入多個(gè)SQL語句,只要各個(gè)語句的語法沒有錯(cuò)誤就行。在下面的代碼中,我們展示了如何將username設(shè)為'OR1=1并把password設(shè)為x來返回最后的用戶ID:
Stringquery="SELECTidFROMuser_tableWHERE"+ "username='"+username+"'AND"+ "password=PASSWORD('"+password+"')";
當(dāng)然,攻擊者可以注入其它的查詢,例如,把username設(shè)為:
'OR1=1;DROPTABLEuser_table;-- 而這個(gè)查詢將變成: SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;--'ANDpassword=PASSWORD('x'); 它相當(dāng)于: SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;
這個(gè)語句將執(zhí)行句法上完全正確的SELECT語句,并利用SQLDROP命令清空user_table。
注射式攻擊不必非要進(jìn)行盲式攻擊,因?yàn)樵S多Web應(yīng)用是利用開放源代碼工具開發(fā)的,為了提高注射式攻擊的成功率,我們可以下載免費(fèi)的或者產(chǎn)品的試用版,然后在自己的系統(tǒng)上搭建測(cè)試系統(tǒng)。如果在測(cè)試系統(tǒng)上發(fā)現(xiàn)了錯(cuò)誤,那么很可能同樣的問題也會(huì)存在于所有使用該工具的Web應(yīng)用身上。
五、小結(jié)
我們?cè)诒疚闹邢蜃x者介紹了注射攻擊的根本原因,即沒有對(duì)數(shù)據(jù)和命令進(jìn)行嚴(yán)格區(qū)分。然后通過一些程序源碼對(duì)SQL的攻擊進(jìn)行了細(xì)致的分析,使我們對(duì)SQL注射機(jī)理有了一個(gè)深入的認(rèn)識(shí)。如果您是一名web應(yīng)用開發(fā)人員,那么您就當(dāng)心了,一定不要盲目相信用戶端的輸入,而要對(duì)用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格的“消毒”處理,否則的話,SQL注射將會(huì)不期而至。
 
·上一篇:風(fēng)訊 注射0day part 1
·下一篇: 暫時(shí)空缺
相關(guān)文章
·PhpBazar adid SQL注入漏洞
·特征匹配檢測(cè)難以識(shí)別SQL注入攻擊(圖)
·GregariusRSS聚合器ajax.php SQL注入漏洞
·通過SQL注入得到WebShell的原理及步驟
·PERL鑄造多線程+支持中文破解SQL自動(dòng)注入猜解機(jī)
·應(yīng)用IDS防止SQL注入攻擊(圖)
·PHP+MYSQL注入工具V2.0(圖)
·跨站式SQL注入技巧與防護(hù)(圖)
·ASP.NET程序防范SQL注入式攻擊的方法[1]
·ASP.NET程序防范SQL注入式攻擊的方法[2]
一日一文章
·巧用嗅探 玩“滲透"(圖)
·妙用腳本代理提升權(quán)限(圖)
·詳解常見漏洞掃描器及網(wǎng)絡(luò)掃描技術(shù)(圖)
·縱橫間誰能相抗 論常見的殼與加殼技術(shù)
·中國(guó)優(yōu)秀軟件創(chuàng)新大賽安全軟件橫評(píng)(圖)
·網(wǎng)絡(luò)管理員對(duì)付DDoS攻擊的絕招分享
·國(guó)產(chǎn)免費(fèi)木馬查殺利器——?dú)ⅠR(圖)
·Gene6 FTP Server的權(quán)限提升(圖)
·信息的隱藏價(jià)值-社會(huì)工程學(xué)
·Cmd命令提示符被屏蔽 手工來破解(圖)
一日一軟件
·ADSL寬帶網(wǎng)絡(luò)測(cè)速工具 v1.0 PC版(圖)
·網(wǎng)絡(luò)特工 V2.2.4.6(圖)
·簡(jiǎn)易遠(yuǎn)程協(xié)助:CrossLoop 2.41中文版(圖)
·PE Tools 1.5 漢化版(圖)
·金山毒霸 2009(圖)
·機(jī)器碼算法軟件加密大師:ZProtect 1.3(圖)
·銳甲(Araymor) 0.0.3.10(圖)
·校驗(yàn)大師(對(duì)文件進(jìn)行MD4、MD5、CRC32批量校驗(yàn)) V2.2.0(圖)
·趨勢(shì)閃電殺毒手v1.53(圖)
·網(wǎng)吧管理軟件 Pubwin2007最新版(圖)
一日一動(dòng)畫
·投稿:輕松搞定NSET32高啟發(fā)+主動(dòng)
·投稿:爽啤3389批量抓雞
·投稿:用COPY命令下載網(wǎng)吧電影
·投稿:超級(jí)技巧之禁止別人動(dòng)我IE瀏覽器
·投稿:怎樣下載土豆、優(yōu)酷等網(wǎng)站的視頻
·投稿:超級(jí)詳細(xì)灰鴿子系列教程免殺(語音)
·投稿:看我無限次刷卡巴斯基激活碼(工具)
·投稿:用易語言QQ登錄界面DIY
·投稿:8000美金提現(xiàn)的網(wǎng)賺
·菜鳥也會(huì)建立影子賬號(hào)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
話題
SQL Server應(yīng)用程序中的高級(jí)SQL注入
初級(jí)開發(fā)者經(jīng)常忽視的問題——SQL注入攻擊
PHP安全-暴力攻擊
Oracle筆記 二、常用dba命令行
c#更新數(shù)據(jù)庫(kù)中數(shù)據(jù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服