1. 程式人生 > >20145236《網絡對抗》Exp9 web安全基礎實踐

20145236《網絡對抗》Exp9 web安全基礎實踐

文本框 options 頁面 http username inf 命令 完整 protocol

20145236《網絡對抗》Exp9 web安全基礎實踐

一、基礎問題回答:

  1. SQL註入攻擊原理,如何防禦
    • SQL Injection:就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
    • 利用現有應用程序,將(惡意)的SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
    • 對用戶的輸入進行校驗,可以通過正則表達式,或限制長度,對單引號和雙"-"進行轉換等。應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝,把異常信息存放在獨立的表中。
  2. XSS攻擊的原理,如何防禦
    • XSS(cross-site scripting跨域腳本攻擊)攻擊是最常見的Web攻擊,其重點是“跨域”和“客戶端執行”。有人將XSS攻擊分為三種,分別是:Reflected XSS(基於反射的XSS攻擊)、 Stored XSS(基於存儲的XSS攻擊)、 DOM-based or local XSS(基於DOM或本地的XSS攻擊)
    • 過程 :攻擊者發現XSS漏洞——構造代碼——發送給受害人——受害人打開——攻擊者獲取受害人的cookie——完成攻擊
    • 預防措施
      • 反射型:前端在顯示服務端數據時候,不僅是標簽內容需要過濾、轉義,就連屬性值也都可能需要。 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。
      • 存儲型: 首要是服務端要進行過濾,因為前端的校驗可以被繞過。當服務端不校驗時候,前端要以各種方式過濾裏面可能的惡意腳本,例如script標簽,將特殊字符轉換成HTML編碼。
  3. CSRF攻擊原理,如何防禦
    • CSRF(Cross-site request forgery)跨站請求偽造,由於目標站無token/referer限制,導致攻擊者可以用戶的身份完成操作達到各種目的。根據HTTP請求方式,CSRF利用方式可分為兩種, GET類型的CSRF和post類型的CSRF
    • 過程:攻擊者發現CSRF漏洞——構造代碼——發送給受害人——受害人打開——受害人執行代碼——完成攻擊
    • 目前主流的做法是使用Token抵禦CSRF攻擊

二、實踐過程記錄

開啟webgoat

  1. 在在終端中輸入java -jar webgoat-container-7.0.1-war-exec.jar開啟webgoat,直到出現INFO: Starting ProtocolHandler ["http-bio-8080"]
  2. 打開瀏覽器,在瀏覽器中輸入localhost:8080/WebGoat進入webgoat。(註意"WebGoat"大小寫敏感),進入webgoat(用戶名和密碼默認便可)

(一)SQL註入

Numeric SQL Injection

  • 這一步中用到了burpsuite做代理。
  • 該題並沒有文本框讓我們直接進行輸入操作,我們只能通過滑動文本框選擇地點,sql語句的生成代碼可能是寫在web頁面的源碼中,也可能是在後臺服務中進行,但是無論是哪一種,表單都需要將搜集到的信息寫進數據包中通過網絡傳輸給後臺,這就給了我們篡改的機會
  • 我們先隨便選擇一個地點並進行查詢,根據其反饋的sql語句來看,我們需要修改的就是station部分,之後我們就需要用到另一個工具burp-suite,通過將burp-suite設置瀏覽器的代理服務器,作為中間服務器,這樣我們就可以截獲從瀏覽器中發送出去的所有數據包,並將其中內容修改成我們想要的樣子
  • 打開burp-suiteproxyoptions選項中添加新的代理(默認為8080,不過被apache2占用了)
  • 修改了瀏覽器的代理服務器之後,隨便選擇一個城市就會發現burp-suite中已經抓到了我們剛剛發送出去的數據包

Log Spoofing

  • 題意是要我們使用管理員admin身份完成登錄,其實就只是要根本的目的是將管理員admin登錄成功這一條記錄寫進日誌中
  • 首先我們進行嘗試,無論我們輸入什麽username,日誌都顯示登錄失敗
  • 這次我嘗試對輸入的username做出一些改變輸入guest ok來查看反饋結果
  • 這樣我們就有一個思路如果我們輸入任意用戶名之後,接上我們想要寫進日誌裏的記錄是不是就達到了我們的目的,於是我們在考慮換行符的編碼的情況下可以這樣構造這樣一條語句guest%0aLogin Succeeded for username:admin最後結果顯示欺騙成功

String SQL Injection

  • 通過輸入查詢的語句使得整張表得以顯示,在其中輸入‘ or 1=1;--
  • 此時註入的SQL語句為SELECT * FROM user_data WHERE last_name = ‘‘ or 1=1;--‘,即查詢表中所有信息

Stage 3 Numeric SQL Injection

  • 這個實驗要求我們以larry的身份登錄,實現對Neville的profile信息的瀏覽,首先跟上一次實驗的方式一樣登陸上去,這樣點擊ViewProfile是無效的
  • 在代理中將行為從Login改為ViewProfile
  • 將ID改為Neville的ID,並讓將其置於首位112 or 1=1 order by salary desc--
  • 成功看見了Neville的信息。

Blind Numeric SQL Injection

  • 按照題目的意思是,我們可以驗證已經輸入的數字是否合法,例如101,因此我們可以構造條件1 AND 條件2,觀察最終結果是否合法來判斷條件2是否為真
  • 例如我們可以構造101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 5236 );來驗證其設定的pin值是否大於5236,按照這個原理,我們可以不斷的縮小所要搜尋的pin的值,直到找到該pin值
  • 不過我不是很理解的是,為何不通過直接輸入數字觀察結果為valid或者invalid來判斷該數字大於還是小於pin值,通過二分法同樣可以一步一步逼近設定的pin值,並不知道為何還需要註入

Blind String SQL Injection

  • 基本思路類似於之前的盲數字註入,只是猜測的對象變成了字符所對應的ascii碼,從根本上來說其實還是一種對數字的猜測
  • 構造101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), x, y) = ‘h‘ );來測試出我們需要的字符串到底是啥
  • 因為這個測試次數較之上一個實驗要多,所以完全依靠手工輸入的工作量太大,使用burp-suite中的intruder中的payloads來進行爆破,一一測試所有可能性

(二)XSS攻擊

Phishing with XSS 跨站腳本釣魚攻擊

  • 在菜單欄中依次選擇Cross-site scriptingphishing with xss,這個攻擊類似於上一個練習的一個進階版,不僅能插入script標簽還能插入其他標簽構成完整的web代碼(如下)

    </form>
    <script>
        function hello(){
            alert("hello,5319");
        }
    </script>
    <form>
        <br><br><h2>please input your stu_number and pwd</h2><br><br>
        stu_number:
        <br><input type="text" name="stunumber"><br>
        password:
        <br><input type="password" name="pwd"><br>
        <input type="submit" name="submit" value="login" onclick="hello()">
    
    </form>
  • 偽造網頁,把獲取的用戶名和密碼傳給WebGoat/capture
  • name="login" value="login" onclick="hack()點擊login後,執行hack(),獲取用戶名密碼,並彈窗Had this been a real attack... Your credentials were just stolen.User Name ="你的用戶名 " Password = "你的密碼"

Stored XSS Attacks 存儲型XSS攻擊

  • 基於存儲的xss攻擊,把攻擊者的數據存儲在服務器端,攻擊將伴隨著攻擊數據一直存在。
  • 在Message裏輸入<script>alert("It‘s 5236!");</script>
  • .出現超鏈接,點擊會彈出:It‘s 5236!
  • 可以利用填入的腳本來盜取信息。
  • 攻擊代碼存儲在服務器端,每次加載就會執行。

Reflected XSS Attacks

  • 基於反射的xss攻擊
  • 在輸入框中註入<SCRIPT>alert(document.cookie);</SCRIPT>得到cookies
  • 也可以輸入指定的URL值,這裏的效果為彈出方框http://www.targetserver.com/search.asp?input=<script>alert("hello20145236");</script>

(三)XSCF攻擊

CSRF(Cross Site Request Forgery)

  • 在message裏輸入<img src=‘attack?Screen=280&menu=900&transferFunds=100000‘ width=‘1‘ height=‘1‘>這其中,280是我網頁的scr,900是我的網頁的menu,100000是轉錢數額
  • 點擊submit,方才的代碼就會被執行

CSRF Prompt By-Pass

  • 與上個實驗類似,同樣是通過郵件的方式進行惡意請求,這裏添加了請求確認的要求,所以需要兩個iframe模塊,輸入如下:

    <iframe src="attack?Screen=自己的src&menu=自己的menu&transferFunds=5000"> </iframe>
    <iframe src="attack?Screen=自己的src&menu=自己的menu&transferFunds=CONFIRM"> </iframe>

三、實驗總結與體會

這一次的實驗用到了webgoat,在其中做了關於SQL註入、XSS攻擊和CSRF攻擊,由於是全英文的網頁所以對英文能力也有一定的考驗==,在上一次的web基礎實驗中我對SQL註入、XSS攻擊的理解只是表面的理解,實現的功能也很簡單,這些知識點在這一次的實驗中得到了很直觀的學習,並且這一次的實驗也警示我們,做網站編程的時候一定要對用戶輸入的信息做一個合法性的判斷,不然會非常危險。

20145236《網絡對抗》Exp9 web安全基礎實踐