![《Web安全程序設(shè)計(jì)與實(shí)踐》課件項(xiàng)目3_第1頁(yè)](http://file4.renrendoc.com/view14/M08/27/0B/wKhkGWZMldWAX4J9AACHc3aoWbA598.jpg)
![《Web安全程序設(shè)計(jì)與實(shí)踐》課件項(xiàng)目3_第2頁(yè)](http://file4.renrendoc.com/view14/M08/27/0B/wKhkGWZMldWAX4J9AACHc3aoWbA5982.jpg)
![《Web安全程序設(shè)計(jì)與實(shí)踐》課件項(xiàng)目3_第3頁(yè)](http://file4.renrendoc.com/view14/M08/27/0B/wKhkGWZMldWAX4J9AACHc3aoWbA5983.jpg)
![《Web安全程序設(shè)計(jì)與實(shí)踐》課件項(xiàng)目3_第4頁(yè)](http://file4.renrendoc.com/view14/M08/27/0B/wKhkGWZMldWAX4J9AACHc3aoWbA5984.jpg)
![《Web安全程序設(shè)計(jì)與實(shí)踐》課件項(xiàng)目3_第5頁(yè)](http://file4.renrendoc.com/view14/M08/27/0B/wKhkGWZMldWAX4J9AACHc3aoWbA5985.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目3萬(wàn)能密碼登錄——Post型注入攻擊【項(xiàng)目描述】本項(xiàng)目對(duì)Post型SQL注入攻擊和防護(hù)進(jìn)行實(shí)訓(xùn)。本項(xiàng)目包含四個(gè)任務(wù),首先建立建立用戶信息數(shù)據(jù)庫(kù),然后開(kāi)發(fā)一個(gè)基于Session驗(yàn)證的用戶登錄功能網(wǎng)站,并在網(wǎng)頁(yè)表單使用Post的方式提交用戶參數(shù)。接下來(lái)實(shí)現(xiàn)基于SQL注入方式的萬(wàn)能密碼登錄。最后通過(guò)分析萬(wàn)能密碼SQL注入的原理,實(shí)現(xiàn)對(duì)Post型SQL注入攻擊的多種防護(hù)方式。通過(guò)本項(xiàng)目的實(shí)訓(xùn),可以解釋和分析萬(wàn)能密碼登錄漏洞為例子的Post型SQL注入原理及危害,應(yīng)用多種方式實(shí)現(xiàn)SQL注入攻擊的防護(hù)?!局R(shí)儲(chǔ)備】HTML的Post與Get提交信息方式Post型SQL注入攻擊使用了HTML的Post提交信息方式。在HTML中,經(jīng)常會(huì)用表單<form>進(jìn)行信息的收集,然后提交給服務(wù)器進(jìn)行處理。HTML提交信息的方式有Get和Post兩種。Get方式Post方式在URL顯示表單參數(shù)的key/value值不在URL里顯示表單的數(shù)據(jù)長(zhǎng)度有限制,只適合有少量參數(shù)的表單表單提交的信息沒(méi)有長(zhǎng)度限制歷史參數(shù)保留在瀏覽器歷史中參數(shù)不會(huì)保存在瀏覽器歷史中可以通過(guò)保留URL的方式保存數(shù)據(jù)不能通過(guò)保留URL保存數(shù)據(jù)刷新不會(huì)重新提交刷新會(huì)重新提交表單的數(shù)據(jù)集的值必須為ASCII字符沒(méi)有限制表
3?1Post方式與Get方式的主要區(qū)別Session機(jī)制的原理HTTP協(xié)議是無(wú)狀態(tài)的,也就是說(shuō),客戶端的每個(gè)HTTP請(qǐng)求都是獨(dú)立的,與前面或者后面的HTTP請(qǐng)求都沒(méi)有直接聯(lián)系。這樣的好處是,服務(wù)器不需要為每個(gè)連接維持狀態(tài)而消耗大量資源。最初設(shè)計(jì)的HTTP協(xié)議只是用來(lái)瀏覽靜態(tài)文件,無(wú)狀態(tài)特點(diǎn)已經(jīng)足夠。但是隨著Web應(yīng)用的發(fā)展,需要變得有狀態(tài),比如需要保持用戶的登錄狀態(tài)。Session機(jī)制就是用來(lái)保存用戶登錄狀態(tài)的。用戶提交登錄信息并通過(guò)驗(yàn)證之后,在服務(wù)器將用戶信息保存在Session變量中,在用戶的瀏覽器則保存這個(gè)Session的ID(即SessionID)。當(dāng)用戶再次訪問(wèn)這個(gè)服務(wù)器時(shí)會(huì)將此SessionID提交,服務(wù)器便可以驗(yàn)證此SessionID是否存在于Session變量中,進(jìn)而判斷是否為登錄用戶基于Session機(jī)制的Web登錄驗(yàn)證過(guò)程用戶賬號(hào)信息提交在Web服務(wù)器建立Session會(huì)話退出登錄萬(wàn)能密碼SQL注入攻擊的原理所謂萬(wàn)能密碼,就是通過(guò)在輸入的用戶名或者密碼構(gòu)造出一個(gè)特殊的SQL語(yǔ)句,破壞原有的SQL語(yǔ)句結(jié)構(gòu)和邏輯,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,進(jìn)而繞過(guò)權(quán)限檢查登錄系統(tǒng)。由于用戶登錄基本都是使用HTML的Post方式提交賬號(hào)和密碼等信息,因此萬(wàn)能密碼登錄是一種典型的Post型SQL注入攻擊。SQL注入攻擊的危害雖然Post型和Get型注入攻擊在方式上有所區(qū)別,但都是通過(guò)破壞正常的SQL語(yǔ)句結(jié)構(gòu),實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)非正常增刪改查。SQL注入攻擊的危害主要體現(xiàn)在:繞過(guò)登錄檢查;獲取、篡改數(shù)據(jù)庫(kù)信息;篡改網(wǎng)頁(yè)內(nèi)容、網(wǎng)頁(yè)掛馬;控制網(wǎng)站、甚至整個(gè)服務(wù)器等?!救蝿?wù)3-1】創(chuàng)建數(shù)據(jù)庫(kù)本任務(wù)采用SQL腳本的方式創(chuàng)建數(shù)據(jù)庫(kù)lab。并在該數(shù)據(jù)庫(kù)中建立表users,最后插入兩條記錄。在Apache的網(wǎng)站根目錄C:\Apache24\htdocs\下新建一個(gè)文件夾logintest作為本項(xiàng)目的網(wǎng)站目錄。基于SQL腳本的方式創(chuàng)建數(shù)據(jù)庫(kù)有兩個(gè)步驟,分別是:創(chuàng)建SQL腳本將腳本文件導(dǎo)入到數(shù)據(jù)庫(kù)【任務(wù)3-2】建立基于Session驗(yàn)證的用戶登錄網(wǎng)站在本任務(wù),分別創(chuàng)建用戶登錄HTML頁(yè)面和驗(yàn)證登錄的PHP后端頁(yè)面,以實(shí)現(xiàn)用戶登錄功能。用戶登錄成功之后會(huì)跳轉(zhuǎn)到歡迎頁(yè)面,并創(chuàng)建退出登錄頁(yè)面銷毀用戶Session。最后進(jìn)行功能測(cè)試,以驗(yàn)證所設(shè)計(jì)的功能。3-2-1任務(wù)實(shí)現(xiàn)創(chuàng)建用戶登錄頁(yè)面login.html設(shè)置編碼方式為UTF8并保存登錄驗(yàn)證后端頁(yè)面歡迎頁(yè)面銷毀session頁(yè)面3-2-2功能測(cè)試打開(kāi)瀏覽器,在地址欄輸入服務(wù)器的地址和相對(duì)路徑以及文件名,即可訪問(wèn)。本書(shū)默認(rèn)的瀏覽器客戶端都是在Web服務(wù)器的本地訪問(wèn),在地址欄輸入U(xiǎn)RL的主機(jī)地址都是localhost或者,比如輸入http://localhost/logintest/login.html打開(kāi)登錄頁(yè)面在該頁(yè)面點(diǎn)擊超鏈接“歡迎訪問(wèn)”,進(jìn)入welcome頁(yè)面在該頁(yè)面點(diǎn)擊超鏈接“退出登錄”,進(jìn)入logout頁(yè)面注銷登錄【任務(wù)3-3】萬(wàn)能密碼SQL注入攻擊測(cè)試在本任務(wù),利用萬(wàn)能密碼進(jìn)行Post型SQL注入攻擊測(cè)試,繞過(guò)登錄檢查進(jìn)入歡迎頁(yè)面。并對(duì)萬(wàn)能密碼注入攻擊的原理進(jìn)行分析,最后討論其它形式的萬(wàn)能密碼SQL注入及其原理。3-3-1測(cè)試過(guò)程用戶名注入在Username輸入:'or1=1or',Password隨便輸入(比如輸入123),點(diǎn)擊Submit按鈕則可以登錄進(jìn)入系統(tǒng)注意:引號(hào)為英文的單引號(hào)在歡迎登錄頁(yè)面,可以看到登錄用戶為admin密碼注入在Username隨便輸入(比如輸入admin),在Password輸入'or'1=1,也可以登錄系統(tǒng)其效果與用戶名注入方式相同3-3-2其它形式的萬(wàn)能密碼'or''=''or‘注意都是單引號(hào)將其代入到SQL語(yǔ)句的變量后,則查詢語(yǔ)句變成了:select*fromuserswhereusername=''or''=''or''andpasscode='123'該語(yǔ)句的條件是恒成立的,因此查詢的結(jié)果也是users表的全部記錄--注釋也可以使用注釋的方式實(shí)現(xiàn)萬(wàn)能密碼,比如'or1=1--'(注意:兩個(gè)連續(xù)的減號(hào)后面必須有一個(gè)空格)。將其代入到SQL語(yǔ)句的變量后,則查詢語(yǔ)句變成了:select*fromuserswhereusername=''or1=1--''andpasscode='123'在SQL語(yǔ)句中,兩個(gè)減號(hào)表示后面的語(yǔ)句被注釋掉。因此該查詢語(yǔ)句變成了:select*fromuserswhereusername=''or1=1該條件是恒成立的,查詢的結(jié)果也是users表的全部記錄#注釋注釋型的萬(wàn)能密碼也可以說(shuō)使用#(即英文的井號(hào)),比如'or1=1#。將其代入到SQL語(yǔ)句的變量后,則查詢語(yǔ)句變成了:select*fromuserswhereusername=''or1=1#'andpasscode='123'去掉注釋后的查詢語(yǔ)句變成了:select*fromuserswhereusername=''or1=1該語(yǔ)句的查詢效果與以上相同3-3-3測(cè)試分析在用戶名注入情況下,將字符串'or1=1or'代入到check_login.php頁(yè)面第16行的變量$username,將字符串123代入到變量$passwd,則SQL查詢語(yǔ)句select*fromuserswhereusername='$username'andpasscode='$passwd'變成了:select*fromuserswhereusername=''or1=1or''andpasscode='123'注意:''為兩個(gè)連續(xù)的單引號(hào)。可見(jiàn),字符串'or1=1or'的第一個(gè)單引號(hào)閉合'$username'的第一個(gè)單引號(hào),第二個(gè)單引號(hào)閉合'$username'的第二個(gè)單引號(hào)。查詢條件or1=1恒成立。在SQL查詢語(yǔ)句中,and的運(yùn)算優(yōu)先級(jí)大于or。故在上述SQL查詢語(yǔ)句的where子句中,雖然username=''為假,passcode='123'為假,但是1=1為真,故where子句的條件為永真。在第2種情況下,SQL查詢語(yǔ)句則變成了:select*fromuserswhereusername='admin'andpasscode=''or'1=1'其分析與上一種情況類似。從以上分析可以發(fā)現(xiàn),引起Post型SQL注入的根源在于,PHP代碼使用了SQL語(yǔ)句拼接的方式進(jìn)行數(shù)據(jù)庫(kù)操作,而拼接所使用的變量由Post方式提交。因此,用戶可以通過(guò)提交包含特殊SQL分界符等內(nèi)容,使得正常的SQL查詢、更新、插入等語(yǔ)句的結(jié)構(gòu)和邏輯功能發(fā)生變化,反而執(zhí)行了攻擊者設(shè)計(jì)的邏輯,造成對(duì)系統(tǒng)破壞或者非授權(quán)的訪問(wèn)?!救蝿?wù)3-4】萬(wàn)能密碼SQL注入攻擊防護(hù)在本任務(wù),實(shí)現(xiàn)對(duì)萬(wàn)能密碼SQL注入攻擊的防護(hù)的四種方式,并驗(yàn)證防護(hù)效果。萬(wàn)能密碼的防護(hù)需要限制用戶的輸入,可以從兩個(gè)方面著手。一方面,可以使用正則表達(dá)式限制用戶輸入;另一方面,可以使用PHP的安全函數(shù)。3-4-1使用正則表達(dá)式限制用戶輸入使用正則表達(dá)式將用戶輸入限制為指定字符組合。這種處理方式是很多網(wǎng)站普遍采用的方式。在用戶注冊(cè)時(shí),將用戶名限制為英文字母、數(shù)字和下劃線的組合,避免出現(xiàn)單引號(hào)等可以引起SQL注入的符號(hào)出現(xiàn),從而避免萬(wàn)能密碼攻擊。正則表達(dá)式的規(guī)則說(shuō)明:頭尾兩個(gè)斜杠/是正則表達(dá)式的限定符,表示兩個(gè)斜杠之間就是正則內(nèi)容;^和$是行定位符,分別用來(lái)匹配字符串的開(kāi)頭和結(jié)尾;中括號(hào)括住的內(nèi)容只匹配一個(gè)單一的字符,比如[a-z]表示匹配a到z的單個(gè)字符;在花括號(hào)里面限制字符出現(xiàn)的個(gè)數(shù),比如[a-z]{5,16}表示匹配a到z的5到16個(gè)字符。使用正則表達(dá)式檢查用戶輸入的用戶名,需要在文件check_login.php中第14行開(kāi)始添加如下內(nèi)容:intpreg_match(string$pattern,string$subject)函數(shù)用于執(zhí)行一個(gè)正則表達(dá)式匹配。其中參數(shù)$pattern為要搜索的模式,字符串形式;$subject為輸入的字符串。函數(shù)preg_match()在第一次匹配后將會(huì)停止搜索,如果出現(xiàn)不匹配的字符將返回0由于正則表達(dá)式限制為5到16個(gè)字母、數(shù)字、或者下劃線組合,如果在用戶名中輸入單引號(hào),或者長(zhǎng)度不在范圍,都會(huì)得到“用戶名輸入格式錯(cuò)誤”的提示。對(duì)輸入密碼的檢查可以使用同樣的方法。3-4-2使用PHP的轉(zhuǎn)義函數(shù)addslashes()函數(shù)addslashes()函數(shù)返回在預(yù)定義字符之前添加反斜杠的字符串mysql_escape_string()或者mysql_real_escape_string()函數(shù)二者都是實(shí)現(xiàn)轉(zhuǎn)義SQL語(yǔ)句中的字符串中的特殊字符,差別較小。在PHP5和PHP7中升級(jí)為mysqli_escape_string()和mysqli_real_escape_string()3-4-3MySQLi參數(shù)化查詢參數(shù)化查詢是指與數(shù)據(jù)庫(kù)連接并訪問(wèn)數(shù)據(jù)時(shí),在需要填入數(shù)值或數(shù)據(jù)的地方,使用參數(shù)來(lái)給值。在使用參數(shù)化查詢的情況下,數(shù)據(jù)庫(kù)服務(wù)器不會(huì)將參數(shù)的內(nèi)容視為SQL指令的一部分來(lái)處理,而是在數(shù)據(jù)庫(kù)完成SQL指令的編譯后,再代入?yún)?shù)運(yùn)行。因此就算參數(shù)中有惡意的指令,由于已經(jīng)編譯完成,就不會(huì)被數(shù)據(jù)庫(kù)運(yùn)行。這個(gè)方法目前已被視為最有效的SQL注入攻擊防護(hù)方式。PHP提供了三種訪問(wèn)MySQL數(shù)據(jù)庫(kù)的擴(kuò)展,即MySQL,MySQLi和PDO。MySQL擴(kuò)展不支持參數(shù)化查詢,MySQLi和PHP數(shù)據(jù)對(duì)象(PHPDataObject,PDO)這兩個(gè)新擴(kuò)展都支持參數(shù)化查詢。3-4-4PDO參數(shù)化查詢MySQLi擴(kuò)展雖然比MySQL擴(kuò)展更加優(yōu)化且方便從MySQL擴(kuò)展遷移,但是它只支持MySQL數(shù)據(jù)庫(kù)。PDO擴(kuò)展對(duì)比MySQLi擴(kuò)展的優(yōu)點(diǎn)是,它是與關(guān)系數(shù)據(jù)庫(kù)類型無(wú)關(guān)的,可以支持十幾種數(shù)據(jù)庫(kù)擴(kuò)展,因此可以很方便的切換數(shù)據(jù)庫(kù),比如從MySQL切換到PostgreSQL、MSSQLServer等?!卷?xiàng)目總結(jié)】本項(xiàng)目以萬(wàn)能密碼登錄為例,對(duì)Post型SQL注入進(jìn)行漏洞重現(xiàn)、攻擊測(cè)試和漏洞分析,給出了多種防護(hù)方案并進(jìn)行防護(hù)效果測(cè)試。攻擊測(cè)試分析表明,對(duì)HTMLPost方式提交的內(nèi)容,使用傳統(tǒng)字符串拼接方式訪問(wèn)數(shù)據(jù)庫(kù)是Post型SQL注入漏洞的根源。使用基于白名單的正則表達(dá)式過(guò)濾用戶提交的用戶名和密碼(如果密碼進(jìn)行了加密或者散列處理則不需要過(guò)濾),可以防護(hù)萬(wàn)能密碼登錄漏洞,但防護(hù)Post提交的其它變量?jī)?nèi)容還需
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- NX-1607-GMP-Cbl-b-IN-3-GMP-生命科學(xué)試劑-MCE-7412
- Isoorotidine-生命科學(xué)試劑-MCE-5873
- 3-Methoxy-prostaglandin-F1α-生命科學(xué)試劑-MCE-1002
- 二零二五年度紅木家具品牌授權(quán)合同及清單
- 二零二五年度父母無(wú)償贈(zèng)與子女房產(chǎn)并約定維修責(zé)任協(xié)議
- 二零二五年度新能源儲(chǔ)能技術(shù)融資合同
- 施工現(xiàn)場(chǎng)施工防突發(fā)公共衛(wèi)生事件制度
- 施工單位關(guān)于協(xié)調(diào)配合的聯(lián)絡(luò)函
- 雨雪天氣的應(yīng)急預(yù)案
- 《運(yùn)營(yíng)管理 第7版》課件-chapt.05-選址與設(shè)施布置
- 烏海周邊焦化企業(yè)概況
- 22S803 圓形鋼筋混凝土蓄水池
- 2023年開(kāi)心英語(yǔ)四年級(jí)上冊(cè)全冊(cè)練習(xí)
- Hadoop大數(shù)據(jù)開(kāi)發(fā)實(shí)例教程高職PPT完整全套教學(xué)課件
- 新人教版小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)教材分析課件
- 企業(yè)中層管理人員測(cè)評(píng)問(wèn)題
- 人教版高中地理必修一全冊(cè)測(cè)試題(16份含答案)
- 《民航服務(wù)溝通技巧》教案第11課孕婦旅客服務(wù)溝通
- 新東方四級(jí)詞匯-正序版
- 面向機(jī)器人柔順操作的力位精準(zhǔn)控制方法研究共3篇
- 《地下工程測(cè)試技術(shù)》課程教學(xué)大綱
評(píng)論
0/150
提交評(píng)論