SQL注入原理介紹
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2008-10-08 19:36:27 作者:佚名
我要評論

對于Web應(yīng)用來說,注射式攻擊由來已久,攻擊方式也五花八門,常見的攻擊方式有SQL注射、命令注射以及新近才出現(xiàn)的XPath注射等等。本文將以SQL注射為例,在源碼級對其攻擊原理進(jìn)行深入的講解。
一、注射式攻擊的原理
注射式攻擊的根源在于,程序命令和用戶數(shù)據(jù)(即用
四、構(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--對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ù)庫所期待的好象是一個(gè)整數(shù),而非字符串,所以可以注入字符串OR1=1--,把單引號去掉就應(yīng)該能成功注入了。對于大多數(shù)SQL數(shù)據(jù)庫,攻擊者可以在一行中放入多個(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)上搭建測試系統(tǒng)。如果在測試系統(tǒng)上發(fā)現(xiàn)了錯(cuò)誤,那么很可能同樣的問題也會(huì)存在于所有使用該工具的Web應(yīng)用身上。 五、小結(jié) 我們在本文中向讀者介紹了注射攻擊的根本原因,即沒有對數(shù)據(jù)和命令進(jìn)行嚴(yán)格區(qū)分。然后通過一些程序源碼對SQL的攻擊進(jìn)行了細(xì)致的分析,使我們對SQL注射機(jī)理有了一個(gè)深入的認(rèn)識。如果您是一名web應(yīng)用開發(fā)人員,那么您就當(dāng)心了,一定不要盲目相信用戶端的輸入,而要對用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格的“消毒”處理,否則的話,SQL注射將會(huì)不期而至。
當(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)上搭建測試系統(tǒng)。如果在測試系統(tǒng)上發(fā)現(xiàn)了錯(cuò)誤,那么很可能同樣的問題也會(huì)存在于所有使用該工具的Web應(yīng)用身上。 五、小結(jié) 我們在本文中向讀者介紹了注射攻擊的根本原因,即沒有對數(shù)據(jù)和命令進(jìn)行嚴(yán)格區(qū)分。然后通過一些程序源碼對SQL的攻擊進(jìn)行了細(xì)致的分析,使我們對SQL注射機(jī)理有了一個(gè)深入的認(rèn)識。如果您是一名web應(yīng)用開發(fā)人員,那么您就當(dāng)心了,一定不要盲目相信用戶端的輸入,而要對用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格的“消毒”處理,否則的話,SQL注射將會(huì)不期而至。
相關(guān)文章
什么是CC攻擊 判斷網(wǎng)站是否被CC攻擊并且如何防御CC攻擊
CC主要是用來攻擊頁面的,大家都有這樣的經(jīng)歷,就是在訪問論壇時(shí),如果這個(gè)論壇比較大,訪問的人比較多,打開頁面的速度會(huì)比較慢,對不?!一般來說,訪問的人越多,論壇的頁2024-01-06Windows系統(tǒng)安全風(fēng)險(xiǎn)-本地NTLM重放提權(quán)
入侵者主要通過Potato程序攻擊擁有SYSTEM權(quán)限的端口偽造網(wǎng)絡(luò)身份認(rèn)證過程,利用NTLM重放機(jī)制騙取SYSTEM身份令牌,最終取得系統(tǒng)權(quán)限,該安全風(fēng)險(xiǎn)微軟并不認(rèn)為存在漏洞,所以2021-04-15- 這篇文章主要介紹了文件上傳漏洞全面滲透分析小結(jié),這里主要為大家分享一下防御方法,需要的朋友可以參考下2021-03-21
- 這篇文章主要介紹了sql手工注入語句&SQL手工注入大全,需要的朋友可以參考下2017-09-06
- 這篇文章主要介紹了詳解Filezilla server 提權(quán),需要的朋友可以參考下2017-05-13
FileZilla Server 2008 x64 提權(quán)與防御方法
這篇文章主要介紹了FileZilla Server 2008 x64 提權(quán)與防御方法,需要的朋友可以參考下2017-05-13https加密也被破解 HEIST攻擊從加密數(shù)據(jù)獲取明文
不久之前我們說過關(guān)于http和https的區(qū)別,對于加密的https,我們一直認(rèn)為它是相對安全的,可今天要講的是,一種繞過HTTPS加密得到明文信息的web攻擊方式,不知道這消息對你2016-08-10iPhone和Mac也會(huì)被黑 一條iMessage密碼可能就被盜了
一直以來蘋果系統(tǒng)的安全性都是比安卓要高的,但是再安全的系統(tǒng)也免不了漏洞,蘋果也一樣。最近爆出的新漏洞,只需要接收一條多媒體信息或者iMessage就會(huì)導(dǎo)致用戶信息泄露。2016-07-27- 國家正在修正關(guān)于黑客方面的法律法規(guī),有一條震驚黑客圈的“世紀(jì)佳緣”起訴白帽黑客事件,深深的傷害了廣大黑客們的心,加上扎克伯格和特拉維斯·卡蘭尼克賬號被盜,于是黑2016-07-11
如何逆向破解HawkEye keylogger鍵盤記錄器進(jìn)入攻擊者郵箱
面對惡意郵件攻擊,我們就只能默默忍受被他攻擊,連自我保護(hù)能力都沒有談什么反抗?讓人痛快的是,如今有了解決辦法,逆向破解鍵盤記錄器,進(jìn)入攻擊者郵箱2016-07-06