Web安全與防護(hù) (微課版) 課件 03-4 項目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第1頁
Web安全與防護(hù) (微課版) 課件 03-4 項目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第2頁
Web安全與防護(hù) (微課版) 課件 03-4 項目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第3頁
Web安全與防護(hù) (微課版) 課件 03-4 項目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第4頁
Web安全與防護(hù) (微課版) 課件 03-4 項目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Web安全與防護(hù)本任務(wù)要點學(xué)習(xí)目標(biāo)參數(shù)化查詢繞過后臺登錄修復(fù)(字符型注入)文章頁面注入漏洞修復(fù)(數(shù)字型注入)搜索框注入漏洞修復(fù)(搜索框注入)能夠修復(fù)系統(tǒng)中存在的漏洞。能夠?qū)σ研迯?fù)的漏洞進(jìn)行復(fù)測。任務(wù)四

SQL注入漏洞修復(fù)與規(guī)范項目三

安全的數(shù)據(jù)庫交換目錄CONTENTS01/參數(shù)化查詢02/繞過后臺登錄漏洞修復(fù)(字符型)03/文章頁面注入漏洞修復(fù)(數(shù)字型注入)04/搜索框注入漏洞修復(fù)(搜索框注入)參數(shù)化查詢01什么是參數(shù)化查詢?參數(shù)化查詢是一種防止SQL注入攻擊的數(shù)據(jù)庫查詢方法。它通過將SQL查詢語句和查詢參數(shù)分離,以一種安全的方式傳遞用戶提供的輸入?yún)?shù),從而避免了SQL注入攻擊。參數(shù)化查詢的出現(xiàn)就是為了保證應(yīng)用程序安全和性能。在參數(shù)化查詢中,SQL查詢語句中的輸入?yún)?shù)是使用占位符來表示的。這些占位符會被傳遞給查詢處理器,然后再與查詢語句合并,生成一個完整的SQL查詢語句。在這個過程中,輸入?yún)?shù)的值會被安全地轉(zhuǎn)義,以避免SQL注入攻擊。參數(shù)化查詢的原理是使用預(yù)處理語句來處理查詢語句。參數(shù)化查詢可以大大降低應(yīng)用程序被SQL注入攻擊的風(fēng)險。參數(shù)化查詢提高應(yīng)用程序的性能。參數(shù)化查詢不適用于動態(tài)查詢語句和復(fù)雜查詢。參數(shù)化查詢的實現(xiàn)需要一些額外的編碼工作。參數(shù)化查詢的優(yōu)點參數(shù)化查詢的缺點參數(shù)化查詢01假設(shè)我們有一個用戶登錄的頁面,用戶需要輸入用戶名和密碼來登錄。我們使用PHP和MySQL來實現(xiàn)這個功能。完整代碼見教材3.4.1參數(shù)化查詢01我們使用了mysqli_prepare函數(shù)來準(zhǔn)備SQL查詢語句,并將需要傳遞給查詢語句的參數(shù)用問號?替代。接著,使用mysqli_stmt_bind_param函數(shù)來綁定參數(shù),參數(shù)的類型和值通過該函數(shù)的參數(shù)傳遞。最后,使用mysqli_stmt_execute函數(shù)執(zhí)行查詢語句并獲取結(jié)果集。這樣,就可以避免SQL注入攻擊。完整代碼見教材3.4.1參數(shù)化查詢01繞過后臺登錄修復(fù)(字符型注入)02博客程序源碼admin/check.php中代碼存在SQL注入漏洞,在該段代碼中存在SQL注入漏洞的地方是:其中,變量$username和$password是通過$_POST方式從前端獲取的,沒有經(jīng)過參數(shù)化處理。攻擊者可以通過構(gòu)造特定的輸入,比如在用戶名輸入框中輸入'or1=1--,使得SQL語句變?yōu)椋篠ELECT*FROMblog_adminWHEREusername=''

or1=1--'ANDpassword='e10adc3949ba59abbe56e057f20f883e'此時,SQL語句將會查詢所有用戶名,并忽略密碼驗證,攻擊者可以成功登錄系統(tǒng),甚至篡改數(shù)據(jù)庫。繞過后臺登錄修復(fù)(字符型注入)02修復(fù)SQL注入漏洞的方法是使用參數(shù)化查詢,將SQL語句中的變量通過占位符的方式傳入,而不是通過字符串拼接的方式。使用mysqli_prepare()函數(shù)創(chuàng)建一個預(yù)處理語句$stmt然后使用mysqli_stmt_bind_param()函數(shù)綁定參數(shù),其中"ss"表示參數(shù)類型都是字符串類型。最后使用mysqli_stmt_execute()函數(shù)執(zhí)行預(yù)處理語句,并使用mysqli_stmt_get_result()函數(shù)獲取查詢結(jié)果。將請求轉(zhuǎn)發(fā)至重發(fā)器(Repeater),先不修改用戶名密碼測試是否能夠成功登錄。響應(yīng)結(jié)果。繞過后臺登錄修復(fù)(字符型注入)02=1111'or1=1--在Burp中打開攔截請求,將攔截到的請求轉(zhuǎn)發(fā)至重發(fā)器,并構(gòu)造SQL注入語句,最后將發(fā)送請求并查看響應(yīng)。分析響應(yīng)可以看出同一個SQL注入已經(jīng)失效了,服務(wù)器響應(yīng)了`用戶名或密碼錯誤。說明構(gòu)造的SQL注入語句并未被數(shù)據(jù)庫執(zhí)行。文章頁面注入漏洞修復(fù)(數(shù)字型注入)03博客程序源碼apps/view.php中代碼存在SQL注入漏洞,在該段代碼中存在SQL注入漏洞的地方是:攻擊者可以通過在URL中添加SQL語句來修改原始查詢,注入惡意SQL語句。針對這一問題,可以采用以下兩種方案,完善博客程序源碼apps/view.php的代碼,修復(fù)存在SQL注入漏洞。http:///view.php?id=1;DELETEFROMblog_article;

文章頁面注入漏洞修復(fù)(數(shù)字型注入)031)使用mysqli_prepare()函數(shù)創(chuàng)建預(yù)處理語句,將SQL查詢語句作為參數(shù)傳遞給它,例如:$stmt=mysqli_prepare($conn,"SELECT*FROMblog_articleWHEREid=?");2)使用mysqli_stmt_bind_param()函數(shù)將參數(shù)綁定到預(yù)處理語句中。第一個參數(shù)是預(yù)處理語句的句柄,第二個參數(shù)是參數(shù)類型字符串,用于指定每個參數(shù)的類型,例如i表示整數(shù)類型,s表示字符串類型等。第三個參數(shù)是實際的參數(shù)值,例如:mysqli_stmt_bind_param($stmt,"i",$_GET['id']);3)使用mysqli_stmt_execute()函數(shù)執(zhí)行預(yù)處理語句;4)使用mysqli_stmt_get_result()函數(shù)獲取查詢結(jié)果集。使用預(yù)處理語句和綁定參數(shù)是一種防止SQL注入攻擊的有效方法,因為它會確保查詢參數(shù)被視為值而不是SQL代碼的一部分。預(yù)處理語句會先將SQL語句和參數(shù)分開處理,再發(fā)送到MySQL服務(wù)器,從而有效地減少了SQL注入的風(fēng)險。方案一:使用預(yù)處理語句和綁定參數(shù),將查詢語句和參數(shù)分離開來,從而避免使用用戶輸入來拼接SQL查詢語句,也避免了潛在的SQL注入攻擊。文章頁面注入漏洞修復(fù)(數(shù)字型注入)03首先使用了參數(shù)化查詢方式將$id參數(shù)傳遞給SQL語句。然后使用了prepare()方法準(zhǔn)備SQL語句,并使用bind_param()方法綁定參數(shù)值。最后使用execute()方法執(zhí)行SQL語句,將結(jié)果保存到$result3變量中。修改完成后再構(gòu)造如下SQL注入語句:方案二:使用參數(shù)化查詢的方式,將$id參數(shù)傳遞給SQL語句,而不是直接將其作為字符串拼接到SQL語句中。http://localhost/index.php?class=view&id=1%20and%201=1

文章頁面注入漏洞修復(fù)(數(shù)字型注入)03訪問該URL響應(yīng)再次構(gòu)造如下SQL注入語句http://localhost/index.php?class=view&id=1%20and%201=2

文章頁面注入漏洞修復(fù)(數(shù)字型注入)03訪問該URL響應(yīng)分析響應(yīng)可以看出同一個SQL注入已經(jīng)失效了,服務(wù)器在1=1和1=2都返回了相同響應(yīng)。說明構(gòu)造的SQL注入語句并未被數(shù)據(jù)庫執(zhí)行。數(shù)字型注入是指攻擊者在輸入框中輸入的字符串被直接拼接到SQL語句中,例如在登錄時,攻擊者輸入'or'1'='1,文章頁面注入(數(shù)字型注入)02攻擊者利用了SQL的邏輯運算符或注釋符號(如--或/**/),將原本的SQL語句改變?yōu)樽约核谕恼Z句,從而繞過了應(yīng)用程序的驗證和控制,獲取了非授權(quán)的信息或操作權(quán)限。數(shù)字型注入是指攻擊者在輸入框中輸入的數(shù)字被直接拼接到SQL語句中,例如在文章搜索時,攻擊者輸入1or1=1。SELECT*FROMusersWHEREusername=''

OR

'1'='1'

AND

password=''SELECT*FROMarticlesWHEREid=1OR1=1攻擊者利用了SQL的布爾邏輯運算符,將原本的SQL語句改變?yōu)樽约核谕恼Z句,從而繞過了應(yīng)用程序的驗證和控制,獲取了非授權(quán)的信息或操作權(quán)限。數(shù)字型注入通常發(fā)生在數(shù)字類型的查詢參數(shù)上,例如整數(shù)和浮點數(shù)。例如,一個網(wǎng)站可能有一個頁面,該頁面的URL包含一個數(shù)字參數(shù),用于選擇要顯示的文章。攻擊者可以通過向URL中添加一個額外的數(shù)字參數(shù)并在其中嵌入SQL代碼,來嘗試注入惡意代碼。/article.php?id=1攻擊者可以通過在id參數(shù)中注入SQL代碼來獲取其他文章的內(nèi)容。/article.php?id=1;SELECT*FROMarticlesWHEREid=2$id來自于用戶通過id參數(shù)提交的值,并且未經(jīng)過過濾和轉(zhuǎn)義。完整代碼見教材3.3.2apps/view.php文章頁面注入(數(shù)字型注入)02訪問http://localhost/index.php?class=view&id=1頁

面。文章頁面注入(數(shù)字型注入)02文章頁面注入(數(shù)字型注入)02嘗試SQL注入:http://localhost/index.php?class=view&id=1%20and%201=1,訪問頁面發(fā)現(xiàn)響應(yīng)正常,說明SQL語句成功執(zhí)行。再嘗試訪問http://localhost/index.php?class=view&id=1%20and%201=2,使查詢條件不成立查看響應(yīng)為異常頁面說明該處存在注入點。文章頁面注入(數(shù)字型注入)02博客程序源碼apps/search.php中代碼存在SQL注入漏洞,在該段代碼中存在SQL注入漏洞的地方是:其中$keywords是通過$_POST方式從前端獲取的,沒有經(jīng)過參數(shù)化處理。攻擊者可以通過構(gòu)造特定的輸入,比如在搜索框輸入框中輸入'and1=2--'%,使得SQL語句變?yōu)椋菏褂胢ysqli_prepare()函數(shù)來準(zhǔn)備查詢,然后使用mysqli_stmt_bind_param()函數(shù)來綁定參數(shù)。搜索框注入漏洞修復(fù)(搜索框注入)03SELECT*FROMblog_articleWHEREtitleLIKE'%'

AND1=2--'%'ORcategoryLIKE'%'AND1=2--'%'ORDERBYidDESC訪問http://localhost/index.php?class=search在搜索框中輸入'and1=1--'%進(jìn)行搜索,響應(yīng)頁面。搜索框注入漏洞修復(fù)(搜索框注入)03根據(jù)響應(yīng)結(jié)果可知整條注入語句都被當(dāng)做查詢條件了,并未作為SQL語句執(zhí)行。成功的修復(fù)了該SQL注入漏洞。課堂實踐一、任務(wù)名稱:SQL注入漏洞代碼審查與修復(fù)二、任務(wù)內(nèi)容:通過仔細(xì)審查代碼,查找可能存在的SQL注入漏洞并針對發(fā)現(xiàn)的SQL注入漏洞,修改代碼以修復(fù)漏洞。三、工具需求:VisualStudioCode、MySQLWorkbench

溫馨提示

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

評論

0/150

提交評論