L003001010-HTTP攻擊與防范-SQL注入攻擊_第1頁
L003001010-HTTP攻擊與防范-SQL注入攻擊_第2頁
L003001010-HTTP攻擊與防范-SQL注入攻擊_第3頁
L003001010-HTTP攻擊與防范-SQL注入攻擊_第4頁
L003001010-HTTP攻擊與防范-SQL注入攻擊_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

課程編寫類別內(nèi)容實驗課題名稱SQL注入攻擊實驗目的與要求1.了解SQL注入攻擊帶來的危險性。2.掌握SQL注入攻擊的原理與方法3.掌握防范攻擊的方法實驗環(huán)境VPC1(虛擬PC)Windowsserver2003VPC1連接要求PC網(wǎng)絡(luò)接口,本地連接與實驗網(wǎng)絡(luò)直連軟件描述1、學生機要求安裝java環(huán)境

2、vpc安裝windwos系統(tǒng)實驗環(huán)境描述學生機與實驗室網(wǎng)絡(luò)直連;VPC1與實驗室網(wǎng)絡(luò)直連;學生機與VPC1物理鏈路連通;預備知識在PHP的Web應用程序架構(gòu)中,大部分都是配合MySQL數(shù)據(jù)庫來保存相關(guān)的數(shù)據(jù)。例如會員登錄、留言板、討論區(qū)的賬號、密碼、真實姓名、住址及聯(lián)系電話等個人信息,或是購物系統(tǒng)的商品與價格等記錄。Web應用程序使用SQL語句來操作MySQL數(shù)據(jù)庫。例如,select表達式用來讀取數(shù)據(jù)庫的記錄,insert表達式用來在數(shù)據(jù)庫中插入新的記錄,delete表達式用來刪除數(shù)據(jù)庫中的記錄。設(shè)置了SQL語句的字符串后,使用mysql_query這類的PHP函數(shù)來將SQL語句傳遞給MySQL數(shù)據(jù)庫系統(tǒng)處理。MySQL處理完后,會返回Web應用程序所需要的數(shù)據(jù)庫記錄。SQL注入攻擊(SQLInjection)是利用在客戶端的網(wǎng)頁中輸入數(shù)據(jù),例如,在會員登錄文本框中輸入用戶的賬號和密碼,用戶在提交會員登錄文本框的數(shù)據(jù)后,Web應用程序會將這些賬號和密碼與網(wǎng)站數(shù)據(jù)庫中的相關(guān)記錄相比較,或是插入到數(shù)據(jù)庫內(nèi)。一般地,用戶在他的瀏覽器中輸入的表單數(shù)據(jù),Web應用程序會使用$_POST變量來保存。例如,$_POST["name"]是用戶的名字,$_POST["email"]是用戶的電子郵件信箱。而旦在SQL語句中,直接將SQL字符串與這些$_POST變量進行字符串連接。下面是一個簡單的例子:$query="insertintomember(name)values("'.$_POST["name"].'")";$result=mysql_query($query)黑客利用這種網(wǎng)頁設(shè)計的既定模式,在客戶端輸入的表單數(shù)據(jù)(即$_POST變量的值)中加入特殊的代碼,來改變原來的SQL語句。如果Web應用程序沒有仔細檢查$_POST變量的值就直接提交這個SQL語句,那么就會啟動SQL注入攻擊。SQL注入攻擊的步驟如圖所示。步驟1:黑客登錄有SQL注入漏洞的網(wǎng)站,網(wǎng)站顯示會員登錄的網(wǎng)頁。步驟2:黑客在客戶端輸入會員登錄所需的賬號和密碼,但是在賬號/密碼的字符串內(nèi)加入特殊的代碼。步驟3:有SQL注入漏洞的網(wǎng)站將黑客所輸入的賬號和密碼用$_POST變量來保存。并且將賬號和密碼的$_POST變量與SQL字符串進行連接來生成一個新的SQL語句。步驟4:有SQL注入漏洞的網(wǎng)站將查詢的SQL語句提交到MySQL數(shù)據(jù)庫處理。步驟5:因為SQL語句中被黑客注入了代碼而引發(fā)SQL注入攻擊。實驗內(nèi)容1.了解SQL注入攻擊帶來的危險性。2.掌握SQL注入攻擊的原理與方法3.掌握防范攻擊的方法實驗步驟學生單擊實驗拓撲按鈕,進入實驗場景,進入目標主機,(第一次啟動目標主機,還需要安裝java控件),如圖所示:2.打開虛擬機,輸入用戶名和密碼,用戶為Adminsitrator密碼為1234563.打開瀏覽器,輸入http://localhost:8080/example_code/如圖:4、找到“(5)SQl注入攻擊(SQLinjection,俗稱負料隱碼)”項,并點擊打開。5、攻擊實例:繞過賬號、密碼的檢查先來看看上圖,這是一個常見的形式簡單的會員登錄的畫面。會員登錄的功能是讓來訪者輸入賬號和密碼來登錄網(wǎng)站,入口網(wǎng)頁的程序代碼會判斷來訪者輸入的賬號和密碼是否存在于數(shù)據(jù)庫中。如果輸入的數(shù)據(jù)存在于數(shù)據(jù)庫中,就讓這個來訪者登錄網(wǎng)站,否則就提示信息要求來訪者必須先注冊。上圖的網(wǎng)頁是一個簡單的會員登錄的畫面login.php,請試著執(zhí)行它。login.php文件會讀取ch數(shù)據(jù)庫中的member數(shù)據(jù)表內(nèi)的記錄,如果使用者所輸入的賬號和密碼存在于member數(shù)據(jù)表內(nèi),就會打開首頁ex5-1.php。源碼為http://localhost:8080/example_code/source/code5/login.php所謂SQL注入攻擊,就是在客戶端的網(wǎng)頁中輸入特定的與SQL語句有關(guān)的代碼。這段特定的程序代碼會改變SQL語句,也就是login.php文件中有一段代碼:$query="select*frommemberwhereusername="'.$_POST["username"]."'andpassword='".$_POST["password"]."'";這個SQL語句用來把在“賬號”和“密碼”文本框的輸入值,與select語句連接成一個查詢語句。假如在上圖的“賬號”文本框中輸入“daniel”,在“密碼”文本框中輸入“123456”,那么這個SQL語句會是:select*frommemberwhereusemame='daniel'andpassword='123456'使用mysql_query函數(shù)提交這個SQL語句后,如果“daniel"與“123456”的賬號/密碼值存在于ch數(shù)據(jù)庫中的member數(shù)據(jù)表內(nèi),那么mysql_query函數(shù)會返回一個結(jié)果集:$result=mysql_query($query);如果“daniel”與“123456”的賬號/密碼值不存在于ch數(shù)據(jù)庫中的member數(shù)據(jù)表內(nèi),那么mysql_query函數(shù)會返回FALSE。如果能夠讓SQL語句:$query="select*frommemberwhereusername="'.$_POST["username"]."'andpassword='".$_POST["password"]."'";不檢查$_POST["username"]與$_POST["password"]的值,那么就可以繞開會員登錄的數(shù)據(jù)檢查而隨意錄入數(shù)據(jù)。在類似這種檢查“賬號”與“密碼”值的入口網(wǎng)頁,許多黑客利用暴力破解的方式來嘗試賬號/密碼,或是設(shè)法取得他人的cookie來得獲得目標的賬號/密碼。如果使用SQL注入攻擊的話,根本就不需要賬號/密碼就可以直接進入網(wǎng)站。6、開始攻擊攻擊1實例現(xiàn)在打開“攻擊1”,進行輸入,“賬號”文本框中輸入“'OR"='”,“密碼”文本框中輸入“'OR"='”。“'OR"='”字符串是由下列字符所組成的:●一個單引號:●一個空白;●OR:●一個空白:●兩個單引號;●=;●一個單引號。輸入情況下圖所示。上圖為輸入SQL注入攻擊的字符串結(jié)果如下圖所示,無效的賬號/密碼值也可以用來登錄網(wǎng)站。無效的賬號/密碼也可以登錄現(xiàn)在回頭看看login.php文件中所用的SQL語句:$query="select*frommemberwhereusername="'.$_POST["username"]."'andpassword='".$_POST["password"],"'";在“賬號”文本框中輸入“'OR"='”,在“密碼”文本框中輸入“'OR"='”,那么這個SQL語句會是:select*frommemberwhereusername=''OR''=''andpassword=''OR''=''在where子句中,username=''(兩個單引號)表示username等于空字符串“"”,"="表示空字符串“''”等于空字符串“''”,所以結(jié)果為TRUE,usemame=''OR''=''的結(jié)果為TRUE,因為''=''為TRUE,所以''ORTRUE的結(jié)果為TRUE。同樣地,password=''(兩個單引號)表示password等于空字符串“''”,''=''表示空字符串''等于空字符串'',所以結(jié)果為TRUE,password=''OR''=''的結(jié)果為TRUE,因為''=''為TRUE,所以''ORTRUE的結(jié)果為TRUE。所以login.php文件的SQL語句:select*frommemberwhereusername=''OR''=''andpassword=''OR''=''等同于:select*frommemberwhereTRUEandTRUE因此這個SQL語句不會驗證賬號和密碼文本框所輸入的值,而是直接查詢member數(shù)據(jù)表內(nèi)的所有記錄。攻擊1的防護方法是:字符串變量的過濾方式(使用addslashes函數(shù))。使用addslashes函數(shù)來將SQL語句中的單引號、雙引號、“\”及NULL字符加上反斜線“\”。例如:addslashes("O'reilly")會變成:"O\'reilly"注意,如果在php.ini文件中將magic_quotes_gpc設(shè)置為On,那么在GET、POST和COOKIE的數(shù)據(jù)上會自動執(zhí)行addslashes函數(shù)。如果再調(diào)用一次addslashes函數(shù),就會變成加了兩次反斜線“\”而產(chǎn)生錯誤。點擊“防護1”,進行輸入,“賬號”文本框中輸入“'OR"='”,“密碼”文本框中輸入“'OR"='”,網(wǎng)頁不會提交。攻擊2實例:刪除數(shù)據(jù)庫的所有記錄現(xiàn)在來看下圖,這是一個常見的簡單形式的留言板。下圖的網(wǎng)頁是ex5-2.php,執(zhí)行這個頁面,ex5-2.php文件會將留言的數(shù)據(jù)插入MySQL數(shù)據(jù)庫ch5里面的postmessage數(shù)據(jù)表中。執(zhí)行ex5-2-check.php文件,瀏覽ch數(shù)據(jù)庫的postmessage數(shù)據(jù)表內(nèi)的記錄。ex5-2-check.php文件的頁面如圖所示。在如下圖所示的“標題”文本框中,單擊第一條超鏈接。這時會打開ex5-2-show.php文件來顯示這一條留言,在ex5-2-show.php文件中有一個“刪除”按鈕,單擊這個【刪除】按鈕后就會刪除目前顯示的這一條留言,如下圖所示。請注意在ex5-2-show.php的一段這樣的程序代碼,有一個“刪除”按鈕的程序代碼:<inputtype="submit"name="delete"id="delete"value="刪除"/>“刪除’’按鈕的name與id屬性值是delete。在刪除目前這一條留言的時候,我們使用postmessage數(shù)據(jù)表內(nèi)的id字段來標識。$query="deletefrompostmessagewhereid=".$_POST["id"];$_POST["id"]的值是由id這個隱藏文本框:<inputtype="hidden"name="id"value="<?phpecho$_GET['id']?>"/>而來的。而id隱藏文本框的值,則是從ex5-2-show.php的URL參數(shù)id而來。攻擊1的防護方法是:字符串變量的過濾方式(使用addslashes函數(shù))。打開“攻擊2”,點擊超鏈接按鈕進行攻擊,刪除所有記錄,如下圖。同樣攻擊2的防護也可以使用addslashes函數(shù)來將SQL語句中的單引號、雙引號、“\”及NULL字符加上反斜線“\”。例如:打開“防護3”,點擊按鈕超鏈接進行防護。攻擊3實例:盜取密碼現(xiàn)在來看下圖,這是一個簡單的首頁的畫面。下圖的網(wǎng)頁是ex5-3.php,請試著執(zhí)行它。ex5-3.php文件會讀取ch5數(shù)據(jù)庫中的member數(shù)據(jù)表內(nèi)的記錄,然后在“訪客:”文字處顯示member數(shù)據(jù)表的username文本框的值。上圖是一個簡單的首頁的畫面ex5-3.php文件需要URL參數(shù)id,這個id值是member數(shù)據(jù)表內(nèi)的id文本框的值。在“訪客:”文字處顯示的username值,就是URL參數(shù)id所對應的username文本框的值。這段在ex5-3.php中的程序代碼http://localhost:8080/example_code/source/code5/ex5-3.php。如何攻擊在ex5-3.php文件中,查詢所用的SQL語句是:$query="selectusernamefrommemberwhereid=".$_GET["id"];黑客利用在$_GET["id"]變量內(nèi)加入unionselect表達式的方式來達到盜取會員密碼的目的。unionselect表達式用來實現(xiàn)多重查詢的功能,在$_GET["id"]變量內(nèi)加入unionselect就會讓ex5-3.php文件的SQL語句變成有兩個select查詢語句。第1個select查詢語句是ex5-3.php原本的:selectusernamefrommember第2個select查詢語句是黑客加入的:selectpasswordfrommember這個select查詢語句用來盜取別人的密碼。黑客必須讓第1個select查詢語句失效,而讓第2個select查詢語句成功,那么這個SQL語句就會返回password,而不是username的值。由于ex5-3.php預期SQL語句會返回username,所以在“訪客:”文字處顯示了這個SQL語句的查詢結(jié)果。但是實際上這個SQL語句返回的是password,所以原本要顯示賬號的地方就會顯示密碼的值。因此黑客就可以借著這種SQL注入攻擊,來盜取網(wǎng)站會員的密碼。開始攻擊這個攻擊的程序代碼在ex5-3-attack.html文件中:http://localhost:8080/example_code/source/code5/ex5-3-attack.html。ex5-3-attack.html文件實際上是執(zhí)行一個HTTP鏈接:http://localhost/example/ex5-3.php?id="unionselectpasswordfrommemberwhereusemame='daniel'/*ex5-3.php文件的URL參數(shù)id的值等于:"unionselectpasswordfrommemberwhereusername='daniel'/*開頭是兩個單引號“''”。將URL參數(shù)id的值代入SQL語句:$query="selectusernamefrommemberwhereid=".$_GET["id"];結(jié)果得到:selectusernamefrommemberwhereid="unionselectpasswordfrommemberwhereusername='daniel'/*第1個select查詢語句是ex5-3.php原本的:sele

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論