欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL注入原理介紹

互聯(lián)網(wǎng)   發(fā)布時間:2008-10-08 19:36:27   作者:佚名   我要評論
對于Web應用來說,注射式攻擊由來已久,攻擊方式也五花八門,常見的攻擊方式有SQL注射、命令注射以及新近才出現(xiàn)的XPath注射等等。本文將以SQL注射為例,在源碼級對其攻擊原理進行深入的講解。 一、注射式攻擊的原理 注射式攻擊的根源在于,程序命令和用戶數(shù)據(jù)(即用
四、構造SQL注射代碼 為了成功地注入SQL命令,攻擊者必須將開發(fā)人員的現(xiàn)有SQL命令轉換成一個合法的SQL語句,當然,要盲注是有些難度的,但一般都是這樣: 'OR1=1– 或者 ')OR1=1-- 此外,許多Web應用提供了帶來錯誤報告和調試信息,例如,利用'OR1=1--對Web應用進行盲注時,經(jīng)??吹饺缦滤镜腻e誤信息: Errorexecutingquery:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'SELECT(title,body)FROMblog_tableWHEREcat='OR1=1'atline1 該錯誤信息詳細地為我們展示了完整的SQL語句,在此種情況下,SQL數(shù)據(jù)庫所期待的好象是一個整數(shù),而非字符串,所以可以注入字符串OR1=1--,把單引號去掉就應該能成功注入了。對于大多數(shù)SQL數(shù)據(jù)庫,攻擊者可以在一行中放入多個SQL語句,只要各個語句的語法沒有錯誤就行。在下面的代碼中,我們展示了如何將username設為'OR1=1并把password設為x來返回最后的用戶ID: Stringquery="SELECTidFROMuser_tableWHERE" "username='" username "'AND" "password=PASSWORD('" password "')";
當然,攻擊者可以注入其它的查詢,例如,把username設為: 'OR1=1;DROPTABLEuser_table;-- 而這個查詢將變成: SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;--'ANDpassword=PASSWORD('x'); 它相當于: SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;
這個語句將執(zhí)行句法上完全正確的SELECT語句,并利用SQLDROP命令清空user_table。 注射式攻擊不必非要進行盲式攻擊,因為許多Web應用是利用開放源代碼工具開發(fā)的,為了提高注射式攻擊的成功率,我們可以下載免費的或者產(chǎn)品的試用版,然后在自己的系統(tǒng)上搭建測試系統(tǒng)。如果在測試系統(tǒng)上發(fā)現(xiàn)了錯誤,那么很可能同樣的問題也會存在于所有使用該工具的Web應用身上。 五、小結 我們在本文中向讀者介紹了注射攻擊的根本原因,即沒有對數(shù)據(jù)和命令進行嚴格區(qū)分。然后通過一些程序源碼對SQL的攻擊進行了細致的分析,使我們對SQL注射機理有了一個深入的認識。如果您是一名web應用開發(fā)人員,那么您就當心了,一定不要盲目相信用戶端的輸入,而要對用戶輸入的數(shù)據(jù)進行嚴格的“消毒”處理,否則的話,SQL注射將會不期而至。

相關文章

最新評論