




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程編寫類別內(nèi)容實(shí)驗(yàn)課題名稱SQL注入攻擊實(shí)驗(yàn)?zāi)康呐c要求1.了解SQL注入攻擊帶來(lái)的危險(xiǎn)性。2.掌握SQL注入攻擊的原理與方法3.掌握防范攻擊的方法實(shí)驗(yàn)環(huán)境VPC1(虛擬PC)Windowsserver2003VPC1連接要求PC網(wǎng)絡(luò)接口,本地連接與實(shí)驗(yàn)網(wǎng)絡(luò)直連軟件描述1、學(xué)生機(jī)要求安裝java環(huán)境
2、vpc安裝windwos系統(tǒng)實(shí)驗(yàn)環(huán)境描述學(xué)生機(jī)與實(shí)驗(yàn)室網(wǎng)絡(luò)直連;VPC1與實(shí)驗(yàn)室網(wǎng)絡(luò)直連;學(xué)生機(jī)與VPC1物理鏈路連通;預(yù)備知識(shí)在PHP的Web應(yīng)用程序架構(gòu)中,大部分都是配合MySQL數(shù)據(jù)庫(kù)來(lái)保存相關(guān)的數(shù)據(jù)。例如會(huì)員登錄、留言板、討論區(qū)的賬號(hào)、密碼、真實(shí)姓名、住址及聯(lián)系電話等個(gè)人信息,或是購(gòu)物系統(tǒng)的商品與價(jià)格等記錄。Web應(yīng)用程序使用SQL語(yǔ)句來(lái)操作MySQL數(shù)據(jù)庫(kù)。例如,select表達(dá)式用來(lái)讀取數(shù)據(jù)庫(kù)的記錄,insert表達(dá)式用來(lái)在數(shù)據(jù)庫(kù)中插入新的記錄,delete表達(dá)式用來(lái)刪除數(shù)據(jù)庫(kù)中的記錄。設(shè)置了SQL語(yǔ)句的字符串后,使用mysql_query這類的PHP函數(shù)來(lái)將SQL語(yǔ)句傳遞給MySQL數(shù)據(jù)庫(kù)系統(tǒng)處理。MySQL處理完后,會(huì)返回Web應(yīng)用程序所需要的數(shù)據(jù)庫(kù)記錄。SQL注入攻擊(SQLInjection)是利用在客戶端的網(wǎng)頁(yè)中輸入數(shù)據(jù),例如,在會(huì)員登錄文本框中輸入用戶的賬號(hào)和密碼,用戶在提交會(huì)員登錄文本框的數(shù)據(jù)后,Web應(yīng)用程序會(huì)將這些賬號(hào)和密碼與網(wǎng)站數(shù)據(jù)庫(kù)中的相關(guān)記錄相比較,或是插入到數(shù)據(jù)庫(kù)內(nèi)。一般地,用戶在他的瀏覽器中輸入的表單數(shù)據(jù),Web應(yīng)用程序會(huì)使用$_POST變量來(lái)保存。例如,$_POST["name"]是用戶的名字,$_POST["email"]是用戶的電子郵件信箱。而旦在SQL語(yǔ)句中,直接將SQL字符串與這些$_POST變量進(jìn)行字符串連接。下面是一個(gè)簡(jiǎn)單的例子:$query="insertintomember(name)values("'.$_POST["name"].'")";$result=mysql_query($query)黑客利用這種網(wǎng)頁(yè)設(shè)計(jì)的既定模式,在客戶端輸入的表單數(shù)據(jù)(即$_POST變量的值)中加入特殊的代碼,來(lái)改變?cè)瓉?lái)的SQL語(yǔ)句。如果Web應(yīng)用程序沒(méi)有仔細(xì)檢查$_POST變量的值就直接提交這個(gè)SQL語(yǔ)句,那么就會(huì)啟動(dòng)SQL注入攻擊。SQL注入攻擊的步驟如圖所示。步驟1:黑客登錄有SQL注入漏洞的網(wǎng)站,網(wǎng)站顯示會(huì)員登錄的網(wǎng)頁(yè)。步驟2:黑客在客戶端輸入會(huì)員登錄所需的賬號(hào)和密碼,但是在賬號(hào)/密碼的字符串內(nèi)加入特殊的代碼。步驟3:有SQL注入漏洞的網(wǎng)站將黑客所輸入的賬號(hào)和密碼用$_POST變量來(lái)保存。并且將賬號(hào)和密碼的$_POST變量與SQL字符串進(jìn)行連接來(lái)生成一個(gè)新的SQL語(yǔ)句。步驟4:有SQL注入漏洞的網(wǎng)站將查詢的SQL語(yǔ)句提交到MySQL數(shù)據(jù)庫(kù)處理。步驟5:因?yàn)镾QL語(yǔ)句中被黑客注入了代碼而引發(fā)SQL注入攻擊。實(shí)驗(yàn)內(nèi)容1.了解SQL注入攻擊帶來(lái)的危險(xiǎn)性。2.掌握SQL注入攻擊的原理與方法3.掌握防范攻擊的方法實(shí)驗(yàn)步驟學(xué)生單擊實(shí)驗(yàn)拓?fù)浒粹o,進(jìn)入實(shí)驗(yàn)場(chǎng)景,進(jìn)入目標(biāo)主機(jī),(第一次啟動(dòng)目標(biāo)主機(jī),還需要安裝java控件),如圖所示:2.打開虛擬機(jī),輸入用戶名和密碼,用戶為Adminsitrator密碼為1234563.打開瀏覽器,輸入http://localhost:8080/example_code/如圖:4、找到“(5)SQl注入攻擊(SQLinjection,俗稱負(fù)料隱碼)”項(xiàng),并點(diǎn)擊打開。5、攻擊實(shí)例:繞過(guò)賬號(hào)、密碼的檢查先來(lái)看看上圖,這是一個(gè)常見的形式簡(jiǎn)單的會(huì)員登錄的畫面。會(huì)員登錄的功能是讓來(lái)訪者輸入賬號(hào)和密碼來(lái)登錄網(wǎng)站,入口網(wǎng)頁(yè)的程序代碼會(huì)判斷來(lái)訪者輸入的賬號(hào)和密碼是否存在于數(shù)據(jù)庫(kù)中。如果輸入的數(shù)據(jù)存在于數(shù)據(jù)庫(kù)中,就讓這個(gè)來(lái)訪者登錄網(wǎng)站,否則就提示信息要求來(lái)訪者必須先注冊(cè)。上圖的網(wǎng)頁(yè)是一個(gè)簡(jiǎn)單的會(huì)員登錄的畫面login.php,請(qǐng)?jiān)囍鴪?zhí)行它。login.php文件會(huì)讀取ch數(shù)據(jù)庫(kù)中的member數(shù)據(jù)表內(nèi)的記錄,如果使用者所輸入的賬號(hào)和密碼存在于member數(shù)據(jù)表內(nèi),就會(huì)打開首頁(yè)ex5-1.php。源碼為http://localhost:8080/example_code/source/code5/login.php所謂SQL注入攻擊,就是在客戶端的網(wǎng)頁(yè)中輸入特定的與SQL語(yǔ)句有關(guān)的代碼。這段特定的程序代碼會(huì)改變SQL語(yǔ)句,也就是login.php文件中有一段代碼:$query="select*frommemberwhereusername="'.$_POST["username"]."'andpassword='".$_POST["password"]."'";這個(gè)SQL語(yǔ)句用來(lái)把在“賬號(hào)”和“密碼”文本框的輸入值,與select語(yǔ)句連接成一個(gè)查詢語(yǔ)句。假如在上圖的“賬號(hào)”文本框中輸入“daniel”,在“密碼”文本框中輸入“123456”,那么這個(gè)SQL語(yǔ)句會(huì)是:select*frommemberwhereusemame='daniel'andpassword='123456'使用mysql_query函數(shù)提交這個(gè)SQL語(yǔ)句后,如果“daniel"與“123456”的賬號(hào)/密碼值存在于ch數(shù)據(jù)庫(kù)中的member數(shù)據(jù)表內(nèi),那么mysql_query函數(shù)會(huì)返回一個(gè)結(jié)果集:$result=mysql_query($query);如果“daniel”與“123456”的賬號(hào)/密碼值不存在于ch數(shù)據(jù)庫(kù)中的member數(shù)據(jù)表內(nèi),那么mysql_query函數(shù)會(huì)返回FALSE。如果能夠讓SQL語(yǔ)句:$query="select*frommemberwhereusername="'.$_POST["username"]."'andpassword='".$_POST["password"]."'";不檢查$_POST["username"]與$_POST["password"]的值,那么就可以繞開會(huì)員登錄的數(shù)據(jù)檢查而隨意錄入數(shù)據(jù)。在類似這種檢查“賬號(hào)”與“密碼”值的入口網(wǎng)頁(yè),許多黑客利用暴力破解的方式來(lái)嘗試賬號(hào)/密碼,或是設(shè)法取得他人的cookie來(lái)得獲得目標(biāo)的賬號(hào)/密碼。如果使用SQL注入攻擊的話,根本就不需要賬號(hào)/密碼就可以直接進(jìn)入網(wǎng)站。6、開始攻擊攻擊1實(shí)例現(xiàn)在打開“攻擊1”,進(jìn)行輸入,“賬號(hào)”文本框中輸入“'OR"='”,“密碼”文本框中輸入“'OR"='”?!?OR"='”字符串是由下列字符所組成的:●一個(gè)單引號(hào):●一個(gè)空白;●OR:●一個(gè)空白:●兩個(gè)單引號(hào);●=;●一個(gè)單引號(hào)。輸入情況下圖所示。上圖為輸入SQL注入攻擊的字符串結(jié)果如下圖所示,無(wú)效的賬號(hào)/密碼值也可以用來(lái)登錄網(wǎng)站。無(wú)效的賬號(hào)/密碼也可以登錄現(xiàn)在回頭看看login.php文件中所用的SQL語(yǔ)句:$query="select*frommemberwhereusername="'.$_POST["username"]."'andpassword='".$_POST["password"],"'";在“賬號(hào)”文本框中輸入“'OR"='”,在“密碼”文本框中輸入“'OR"='”,那么這個(gè)SQL語(yǔ)句會(huì)是:select*frommemberwhereusername=''OR''=''andpassword=''OR''=''在where子句中,username=''(兩個(gè)單引號(hào))表示username等于空字符串“"”,"="表示空字符串“''”等于空字符串“''”,所以結(jié)果為TRUE,usemame=''OR''=''的結(jié)果為TRUE,因?yàn)?'=''為TRUE,所以''ORTRUE的結(jié)果為TRUE。同樣地,password=''(兩個(gè)單引號(hào))表示password等于空字符串“''”,''=''表示空字符串''等于空字符串'',所以結(jié)果為TRUE,password=''OR''=''的結(jié)果為TRUE,因?yàn)?'=''為TRUE,所以''ORTRUE的結(jié)果為TRUE。所以login.php文件的SQL語(yǔ)句:select*frommemberwhereusername=''OR''=''andpassword=''OR''=''等同于:select*frommemberwhereTRUEandTRUE因此這個(gè)SQL語(yǔ)句不會(huì)驗(yàn)證賬號(hào)和密碼文本框所輸入的值,而是直接查詢member數(shù)據(jù)表內(nèi)的所有記錄。攻擊1的防護(hù)方法是:字符串變量的過(guò)濾方式(使用addslashes函數(shù))。使用addslashes函數(shù)來(lái)將SQL語(yǔ)句中的單引號(hào)、雙引號(hào)、“\”及NULL字符加上反斜線“\”。例如:addslashes("O'reilly")會(huì)變成:"O\'reilly"注意,如果在php.ini文件中將magic_quotes_gpc設(shè)置為On,那么在GET、POST和COOKIE的數(shù)據(jù)上會(huì)自動(dòng)執(zhí)行addslashes函數(shù)。如果再調(diào)用一次addslashes函數(shù),就會(huì)變成加了兩次反斜線“\”而產(chǎn)生錯(cuò)誤。點(diǎn)擊“防護(hù)1”,進(jìn)行輸入,“賬號(hào)”文本框中輸入“'OR"='”,“密碼”文本框中輸入“'OR"='”,網(wǎng)頁(yè)不會(huì)提交。攻擊2實(shí)例:刪除數(shù)據(jù)庫(kù)的所有記錄現(xiàn)在來(lái)看下圖,這是一個(gè)常見的簡(jiǎn)單形式的留言板。下圖的網(wǎng)頁(yè)是ex5-2.php,執(zhí)行這個(gè)頁(yè)面,ex5-2.php文件會(huì)將留言的數(shù)據(jù)插入MySQL數(shù)據(jù)庫(kù)ch5里面的postmessage數(shù)據(jù)表中。執(zhí)行ex5-2-check.php文件,瀏覽ch數(shù)據(jù)庫(kù)的postmessage數(shù)據(jù)表內(nèi)的記錄。ex5-2-check.php文件的頁(yè)面如圖所示。在如下圖所示的“標(biāo)題”文本框中,單擊第一條超鏈接。這時(shí)會(huì)打開ex5-2-show.php文件來(lái)顯示這一條留言,在ex5-2-show.php文件中有一個(gè)“刪除”按鈕,單擊這個(gè)【刪除】按鈕后就會(huì)刪除目前顯示的這一條留言,如下圖所示。請(qǐng)注意在ex5-2-show.php的一段這樣的程序代碼,有一個(gè)“刪除”按鈕的程序代碼:<inputtype="submit"name="delete"id="delete"value="刪除"/>“刪除’’按鈕的name與id屬性值是delete。在刪除目前這一條留言的時(shí)候,我們使用postmessage數(shù)據(jù)表內(nèi)的id字段來(lái)標(biāo)識(shí)。$query="deletefrompostmessagewhereid=".$_POST["id"];$_POST["id"]的值是由id這個(gè)隱藏文本框:<inputtype="hidden"name="id"value="<?phpecho$_GET['id']?>"/>而來(lái)的。而id隱藏文本框的值,則是從ex5-2-show.php的URL參數(shù)id而來(lái)。攻擊1的防護(hù)方法是:字符串變量的過(guò)濾方式(使用addslashes函數(shù))。打開“攻擊2”,點(diǎn)擊超鏈接按鈕進(jìn)行攻擊,刪除所有記錄,如下圖。同樣攻擊2的防護(hù)也可以使用addslashes函數(shù)來(lái)將SQL語(yǔ)句中的單引號(hào)、雙引號(hào)、“\”及NULL字符加上反斜線“\”。例如:打開“防護(hù)3”,點(diǎn)擊按鈕超鏈接進(jìn)行防護(hù)。攻擊3實(shí)例:盜取密碼現(xiàn)在來(lái)看下圖,這是一個(gè)簡(jiǎn)單的首頁(yè)的畫面。下圖的網(wǎng)頁(yè)是ex5-3.php,請(qǐng)?jiān)囍鴪?zhí)行它。ex5-3.php文件會(huì)讀取ch5數(shù)據(jù)庫(kù)中的member數(shù)據(jù)表內(nèi)的記錄,然后在“訪客:”文字處顯示member數(shù)據(jù)表的username文本框的值。上圖是一個(gè)簡(jiǎn)單的首頁(yè)的畫面ex5-3.php文件需要URL參數(shù)id,這個(gè)id值是member數(shù)據(jù)表內(nèi)的id文本框的值。在“訪客:”文字處顯示的username值,就是URL參數(shù)id所對(duì)應(yīng)的username文本框的值。這段在ex5-3.php中的程序代碼http://localhost:8080/example_code/source/code5/ex5-3.php。如何攻擊在ex5-3.php文件中,查詢所用的SQL語(yǔ)句是:$query="selectusernamefrommemberwhereid=".$_GET["id"];黑客利用在$_GET["id"]變量?jī)?nèi)加入unionselect表達(dá)式的方式來(lái)達(dá)到盜取會(huì)員密碼的目的。unionselect表達(dá)式用來(lái)實(shí)現(xiàn)多重查詢的功能,在$_GET["id"]變量?jī)?nèi)加入unionselect就會(huì)讓ex5-3.php文件的SQL語(yǔ)句變成有兩個(gè)select查詢語(yǔ)句。第1個(gè)select查詢語(yǔ)句是ex5-3.php原本的:selectusernamefrommember第2個(gè)select查詢語(yǔ)句是黑客加入的:selectpasswordfrommember這個(gè)select查詢語(yǔ)句用來(lái)盜取別人的密碼。黑客必須讓第1個(gè)select查詢語(yǔ)句失效,而讓第2個(gè)select查詢語(yǔ)句成功,那么這個(gè)SQL語(yǔ)句就會(huì)返回password,而不是username的值。由于ex5-3.php預(yù)期SQL語(yǔ)句會(huì)返回username,所以在“訪客:”文字處顯示了這個(gè)SQL語(yǔ)句的查詢結(jié)果。但是實(shí)際上這個(gè)SQL語(yǔ)句返回的是password,所以原本要顯示賬號(hào)的地方就會(huì)顯示密碼的值。因此黑客就可以借著這種SQL注入攻擊,來(lái)盜取網(wǎng)站會(huì)員的密碼。開始攻擊這個(gè)攻擊的程序代碼在ex5-3-attack.html文件中:http://localhost:8080/example_code/source/code5/ex5-3-attack.html。ex5-3-attack.html文件實(shí)際上是執(zhí)行一個(gè)HTTP鏈接:http://localhost/example/ex5-3.php?id="unionselectpasswordfrommemberwhereusemame='daniel'/*ex5-3.php文件的URL參數(shù)id的值等于:"unionselectpasswordfrommemberwhereusername='daniel'/*開頭是兩個(gè)單引號(hào)“''”。將URL參數(shù)id的值代入SQL語(yǔ)句:$query="selectusernamefrommemberwhereid=".$_GET["id"];結(jié)果得到:selectusernamefrommemberwhereid="unionselectpasswordfrommemberwhereusername='daniel'/*第1個(gè)select查詢語(yǔ)句是ex5-3.php原本的:sele
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)培訓(xùn)現(xiàn)場(chǎng)課件內(nèi)容
- 企業(yè)培訓(xùn)時(shí)間管理課件
- 嬰幼兒托育相關(guān)知識(shí)考核試題及答案
- 英語(yǔ)八年級(jí)上第二次月考試卷
- 財(cái)務(wù)稅務(wù)籌劃財(cái)務(wù)擔(dān)保合同范本
- 核心技術(shù)資料參觀保密協(xié)議書模板
- 跨國(guó)餐飲品牌國(guó)內(nèi)托管合作協(xié)議
- 智能家居草坪施工與智能家居系統(tǒng)整合合同
- 供應(yīng)鏈金融企業(yè)應(yīng)收賬款融資借款合同范本
- 財(cái)務(wù)風(fēng)險(xiǎn)控制保密合同模板
- 裝卸作業(yè)時(shí)接口連接可靠性確認(rèn)制度
- 非法宗教知識(shí)講座
- 紅磚圍墻施工方案
- 2025年云南省保山市隆陽(yáng)區(qū)小升初模擬數(shù)學(xué)測(cè)試卷含解析
- 數(shù)字化賦能高校思政課建設(shè)的策略研究
- 黃柏種植可行性報(bào)告
- 2025年度地下綜合管廊代建合同模板
- 工程全過(guò)程造價(jià)咨詢管理及控制要點(diǎn)
- 2025年度藥品區(qū)域代理銷售合同范本3篇
- 輸變電工程監(jiān)督檢查標(biāo)準(zhǔn)化清單-質(zhì)監(jiān)站檢查
- 國(guó)家開放大學(xué)法學(xué)本科《商法》期末紙質(zhì)考試第四大題案例分析庫(kù)2025珍藏版
評(píng)論
0/150
提交評(píng)論