国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

SQL注入原理深度解析(1)
2008-08-28   

對于Web應用來說,注射式攻擊由來已久,攻擊方式也五花八門,常見的攻擊方式有SQL注射、命令注射以及新近才出現的XPath注射等等。本文將以SQL注射為例,在源碼級對其攻擊原理進行深入的講解。

一、注射式攻擊的原理

注射式攻擊的根源在于,程序命令和用戶數據(即用戶輸入)之間沒有做到涇渭分明。這使得攻擊者有機會將程序命令當作用戶輸入的數據提交給We程序,以發號施令,為所欲為。

為了發動注射攻擊,攻擊者需要在常規輸入中混入將被解釋為命令的“數據”,要想成功,必須要做三件事情:

1.確定Web應用程序所使用的技術

注射式攻擊對程序設計語言或者硬件關系密切,但是這些可以通過適當的踩點或者索性將所有常見的注射式攻擊都搬出來逐個試一下就知道了。為了確定所采用的技術,攻擊者可以考察Web頁面的頁腳,查看錯誤頁面,檢查頁面源代碼,或者使用諸如Nessus等工具來進行刺探。

2.確定所有可能的輸入方式

Web應用的用戶輸入方式比較多,其中一些用戶輸入方式是很明顯的,如HTML表單;另外,攻擊者可以通過隱藏的HTML表單輸入、HTTP頭部、cookies、甚至對用戶不可見的后端AJAX請求來跟Web應用進行交互。一般來說,所有HTTP的GET和POST都應當作用戶輸入。為了找出一個Web應用所有可能的用戶輸入,我們可以求助于Web代理,如Burp等。

3.查找可以用于注射的用戶輸入

在找出所有用戶輸入方式后,就要對這些輸入方式進行篩選,找出其中可以注入命令的那些輸入方式。這個任務好像有點難,但是這里有一個小竅門,那就是多多留意Web應用的錯誤頁面,很多時候您能從這里得到意想不到的收獲。

二、SQL注射原理

上面對注射攻擊做了一般性的解釋,下面我們以SQL注射為例進行講解,以使讀者對注射攻擊有一個感性的認識,至于其他攻擊,原理是一致的。

SQL注射能使攻擊者繞過認證機制,完全控制遠程服務器上的數據庫。SQL是結構化查詢語言的簡稱,它是訪問數據庫的事實標準。目前,大多數Web應用都使用SQL數據庫來存放應用程序的數據。幾乎所有的Web應用在后臺都使用某種SQL數據庫。跟大多數語言一樣,SQL語法允許數據庫命令和用戶數據混雜在一起的。如果開發人員不細心的話,用戶數據就有可能被解釋成命令,這樣的話,遠程用戶就不僅能向Web應用輸入數據,而且還可以在數據庫上執行任意命令了。

三、繞過用戶認證

我們這里以一個需要用戶身份認證的簡單的Web應用程序為例進行講解。假定這個應用程序提供一個登錄頁面,要求用戶輸入用戶名和口令。用戶通過HTTP請求發送他們的用戶名和口令,之后,Web應用程序檢查用戶傳遞來用戶名和口令跟數據庫中的用戶名和口令是否匹配。這種情況下,會要求在SQL數據庫中使用一個數據庫表。開發人員可以通過以下SQL語句來創建表:

CREATETABLEuser_table(

idINTEGERPRIMARYKEY,

usernameVARCHAR(32),

passwordVARCHAR(41)

);

上面的SQL代碼將建立一個表,該表由三欄組成。第一欄存放的是用戶ID,如果某人經過認證,則用此標識該用戶。第二欄存放的是用戶名,該用戶名最多由32字符組成。第三欄存放的是口令,它由用戶的口令的hash值組成,因為以明文的形式來存放用戶的口令實在太危險,所以通常取口令的散列值進行存放。我們將使用SQL函數PASSWORD()來獲得口令的hash值,在MySQL中,函數PASSWORD()的輸出由41字符組成。

對一個用戶進行認證,實際上就是將用戶的輸入即用戶名和口令跟表中的各行進行比較,如果跟某行中的用戶名和口令跟用戶的輸入完全匹配,那么該用戶就會通過認證,并得到該行中的ID。假如用戶提供的用戶名和口令分別為lonelynerd15和mypassword,那么檢查用戶ID過程如下所示:

SELECTidFROMuser_tableWHEREusername='lonelynerd15'ANDpassword=PASSWORD('mypassword')

如果該用戶位于數據庫的表中,這個SQL命令將返回該用戶相應的ID,這就意味著該用戶通過了認證;否則,這個SQL命令的返回為空,這意味著該用戶沒有通過認證。

下面是用來實現自動登錄的Java代碼,它從用戶那里接收用戶名和口令,然后通過一個SQL查詢對用戶進行認證:

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請求中取得用戶輸入,然后在下一行開始構造一個SQL查詢。執行查詢,然后在while()循環中得到結果,如果一個用戶名和口令對匹配,就會返回正確的ID。否則,id的值仍然為-1,這意味著用戶沒有通過認證。表面上看,如果用戶名和口令對匹配,那么該用戶通過認證;否則,該用戶不會通過認證——但是,事實果真如此嗎?非也!讀者也許已經注意到了,這里并沒有對SQL命令進行設防,所以攻擊者完全能夠在用戶名或者口令字段中注入SQL語句,從而改變SQL查詢。為此,我們仔細研究一下上面的SQL查詢字符串:

Stringquery="SELECTidFROMuser_tableWHERE"+

"username='"+username+"'AND"+

"password=PASSWORD('"+password+"')";

上述代碼認為字符串username和password都是數據,不過,攻擊者卻可以隨心所欲地輸入任何字符。如果一位攻擊者輸入的用戶名為

’OR1=1—

而口令為

x

那么查詢字符串將變成下面的樣子:

SELECTidFROMuser_tableWHEREusername=''OR1=1--'ANDpassword

=PASSWORD('x')

該雙劃符號--告訴SQL解析器,右邊的東西全部是注釋,所以不必理會。這樣,查詢字符串相當于:

SELECTidFROMuser_tableWHEREusername=''OR1=1

如今的SELECT語句跟以前的已經大相徑庭了,因為現在只要用戶名為長度為零的字符串''或1=1這兩個條件中一個為真,就返回用戶標識符ID——我們知道,1=1是恒為真的。所以這個語句將返回user_table中的所有ID。在此種情況下,攻擊者在username字段放入的是SQL指令'OR1=1--而非數據。


共2頁: 1 [2] 下一頁
 第 1 頁:  第 2 頁:構造SQL注射代碼

熱詞搜索:

上一篇:合理運用四種方法正確管理你的口令(1)
下一篇:針對Web安全 如何進行防御?

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
欧美成va人片在线观看| 丁香另类激情小说| 一道本成人在线| 国产精品乱人伦| 国产91丝袜在线播放九色| 欧美大片顶级少妇| 另类调教123区| 欧美成人在线直播| 国产一区在线不卡| 精品国产a毛片| 国产成人综合在线| 91麻豆精品国产| 青青草伊人久久| 日韩欧美在线影院| 国产真实乱对白精彩久久| 久久久精品黄色| 成人91在线观看| 国产精品家庭影院| 色婷婷av一区二区三区gif| 亚洲一区二区三区四区五区黄 | 欧美日韩亚洲综合在线| 一个色在线综合| 欧美精品1区2区3区| 日韩精品一级二级| 欧美精品一区视频| 国产精品一区免费视频| 亚洲区小说区图片区qvod| 欧美丝袜自拍制服另类| 青青草国产成人av片免费| 欧美精品一区视频| 91丨九色丨黑人外教| 亚洲精品va在线观看| 91精品国产色综合久久| 激情小说亚洲一区| 自拍av一区二区三区| 欧美日韩国产区一| 国内不卡的二区三区中文字幕| 久久影院午夜论| jlzzjlzz欧美大全| 视频一区视频二区中文字幕| 久久久亚洲午夜电影| 91亚洲精品一区二区乱码| 日本不卡不码高清免费观看| 国产欧美日产一区| 欧美在线啊v一区| 狠狠久久亚洲欧美| 亚洲精品国久久99热| 日韩欧美www| 99精品久久99久久久久| 日韩 欧美一区二区三区| 国产三级精品在线| 欧美人妇做爰xxxⅹ性高电影| 韩国精品主播一区二区在线观看 | 久久―日本道色综合久久| www.色精品| 久久精品国产亚洲5555| 中文字幕日韩精品一区| 日韩欧美成人一区二区| 不卡的av中国片| 免费在线观看成人| 亚洲精品视频免费观看| 久久综合色之久久综合| 欧美午夜宅男影院| 国产精品自产自拍| 日日骚欧美日韩| 亚洲精品免费看| 中文字幕一区二区三区四区不卡 | 欧美精品免费视频| 91在线丨porny丨国产| 久久精品国产99| 日韩和欧美一区二区| 一区二区三区av电影| 91精品国产综合久久蜜臀| 日本久久精品电影| 成人午夜在线播放| 久久99九九99精品| 全国精品久久少妇| 婷婷久久综合九色综合绿巨人 | 日本电影欧美片| 成人午夜短视频| 国模一区二区三区白浆| 理论片日本一区| 水野朝阳av一区二区三区| 亚洲美女精品一区| 国产精品久久久久久亚洲毛片| 日韩欧美亚洲国产精品字幕久久久| 成人午夜激情视频| 国产高清一区日本| 国产精品一二二区| 国产精品羞羞答答xxdd| 激情久久五月天| 激情欧美一区二区| 国产精品自拍三区| 国产成人在线电影| 日韩成人av影视| 亚洲男人的天堂网| 亚洲最新视频在线播放| 亚洲一区二区三区四区的| 一区二区三区四区不卡在线| 精品亚洲免费视频| 久久伊人蜜桃av一区二区| 日本一区二区成人| 亚洲激情网站免费观看| 日本不卡视频一二三区| 国产一区91精品张津瑜| 色综合久久中文综合久久97| 欧美日韩国产一级| 久久九九99视频| 亚洲女人的天堂| 日韩av午夜在线观看| 国产麻豆成人精品| 色婷婷亚洲精品| 日韩视频一区二区在线观看| 国产精品网友自拍| 丝袜美腿亚洲一区| 不卡视频免费播放| 91精品国产福利在线观看| 日韩你懂的在线观看| 国产精品国产三级国产普通话蜜臀 | 制服.丝袜.亚洲.中文.综合| 久久久精品一品道一区| 亚洲高清免费视频| 丁香六月综合激情| 欧美一卡二卡三卡四卡| 国产精品视频在线看| 日韩不卡一二三区| av资源网一区| 欧美成人免费网站| 一区二区三区四区亚洲| 国产一区二区不卡老阿姨| 欧美三级日韩三级| 国产精品成人免费精品自在线观看 | 亚洲成在人线在线播放| 国产91精品欧美| 日韩精品专区在线影院重磅| 自拍偷拍亚洲综合| 国产一区二区三区在线观看精品 | 91麻豆精品国产91久久久使用方法| 国产精品久久久久久久裸模 | 精品久久久久久久久久久久久久久久久| 亚洲日本中文字幕区| 国产精品白丝jk黑袜喷水| 欧美日韩高清一区二区| 亚洲另类在线一区| 成人av先锋影音| 国产欧美日韩另类一区| 国产最新精品精品你懂的| 欧美精品欧美精品系列| 夜夜揉揉日日人人青青一国产精品| 丁香婷婷综合色啪| 久久综合精品国产一区二区三区 | 亚洲综合精品久久| 99久久婷婷国产| 国产婷婷精品av在线| 日本免费新一区视频| 欧美日韩日本视频| 亚洲成在线观看| 欧美三级午夜理伦三级中视频| 亚洲天堂成人网| 一本一道久久a久久精品综合蜜臀| 中文字幕在线观看不卡视频| 国产成人av自拍| 久久久久久亚洲综合| 国产一区二区免费视频| 精品1区2区在线观看| 久久精品久久久精品美女| 欧美一区二区三级| 久久99精品国产.久久久久| 日韩欧美国产午夜精品| 美国精品在线观看| 精品欧美黑人一区二区三区| 美女被吸乳得到大胸91| 日韩欧美一区二区免费| 捆绑紧缚一区二区三区视频 | 粉嫩一区二区三区在线看| 国产日韩欧美在线一区| 国产白丝网站精品污在线入口| 国产午夜亚洲精品不卡| 国产成人精品亚洲777人妖 | 91精品黄色片免费大全| 老汉av免费一区二区三区| 久久色中文字幕| 丁香桃色午夜亚洲一区二区三区| 亚洲国产精品黑人久久久| 北条麻妃一区二区三区| 亚洲精品一二三| 7777精品伊人久久久大香线蕉经典版下载| 日韩中文字幕91| 久久色在线视频| 不卡视频在线看| 亚洲r级在线视频| www亚洲一区| 91年精品国产| 日韩电影免费在线看| 久久精品在这里| 91福利小视频| 狠狠色综合播放一区二区| 欧美国产亚洲另类动漫| 在线免费不卡视频| 久久精品国产99久久6|