Exp9 Web安全基礎

Exp9 Web安全基礎

20154305 齊帥

1、實驗要求

本實踐的目標理解經常使用網絡攻擊技術的基本原理。

Webgoat實踐下相關實驗:

【目錄】

【第一部分 WebGoat 8.0】

  • 1.WebGot

  • 2.BurpSuite

  • 3.Injection Flaws

  • 4.Cross-Site Scripting

【第二部分 WebGoat 7.1】

  • 1.Injection Flaws

    1.1 Numeric Injection
    
      1.2 LAB:SQL Injection
    
      1.3 String SQL Injection
    
      1.4 Log Spoofing
    
      1.5 Database Backdoors
    
      1.6 Blind Numeric SQL Injection
  • 2.Cross-Site Scripting (XSS)

    2.1 Phishing with XSS
    
      2.2 Stored XSS Attacks
    
      2.3 Reflected XSS Attacks
  • 3.Cross Site Request Forgery(CSRF)

  • 4.CSRF Prompt By-Pass

2、實踐過程

【第一部分】

1.安裝WebGoat 8.0

WebGoat是由著名的OWASP負責維護的一個漏洞百出的J2EE Web應用程序,這些漏洞並不是程序中的bug,而是故意設計用來說授Web應用程序安全課程的。這個應用程序提供了一個逼真的教學環境,爲用戶完成課程提供了有關的線索。
由於WebGoat是基於java開發的軟件,因此須要JDK環境,還須要下載一個WebGoat.jar包.

至於下載這個WebGoat.jar包真的費了很久時間,由於網上找到的下載連接都被牆了,這個連接你能夠試一下,最後費了九牛二虎之力翻了一下牆,下載好的jar包和JDK我放在了百度雲。

看一眼哈,我真的FQ了,如今但是嚴打的狀況,我免費FQ也不容易啊~

FQ軟件叫藍燈,還挺靠譜的,哈哈哈~

jar包下載好了之後放到kali裏面,鍵入java -jar *.jar 等着就可啦,*爲文件名。

打開火狐,鍵入127.0.0.1:8080/WebGoat (注意大小寫),註冊一個用戶就能夠啦~

sad,是全英文的,我真的頭大了~還須要依靠翻譯軟件理解不是人話的東西。。。javascript

2.Injection Flaws

這個題就是你輸入姓名會獲得相關信息

如上,用萬能公式弄一下就獲得了全部人的信息啦~注意這個是字符串注入。

下一題是輸入用戶ID獲得信息,一樣輸入一個永真式,數字注入,獲得全部人的信息。

SQL注入進階:

本題要求經過Smith的信息聯合獲得Dave的密碼,根據提示信息能夠獲得存儲用戶密碼的表名爲 user_system_data,列爲password。

先鍵入Smith' order by 7--,以下,能夠獲得正確的反饋信息

鍵入Smith' order by 8--,獲得錯誤反饋,說明列數爲7。

根據以上信息,鍵入Smith' union select null,null,null,null,null,null,null from user_system_data --聯合查詢判斷數據回顯位置。

鍵入Smith' union select null,user_name,password,null,null,null,null from user_system_data -- 獲取Dave的密碼。

輸入Dave的密碼,正確~

3.BurpSuite

BurpSuite是用於攻擊web應用程序的集成平臺。它包含了許多工具,併爲這些工具設計了許多接口,以促進加快攻擊應用程序的過程。全部的工具都共享一個能處理並顯示HTTP消息,持久性,認證,代理,日誌,警報的一個強大的可擴展的框架。
經過代理服務器能夠截獲http報文進行修改。

kali本身帶這個東西,程序裏面搜索一下就好了,開啓。

配置本機BurpSuite,在Proxy->Option中選擇add添加項:

設置瀏覽器,進行代理:

4.Cross-Site Scripting

這個題就是要你打開兩個相同的網頁,而後插入一段JS代碼,顯示cookie,比較兩個值是否相同:

通過比較,兩個值是相同的,因此輸入yes,經過~!

此題第一步是要求你在一個購物車支付界面面找到優惠券的代碼,給你本身打折

如上,咱們查看網頁源代碼,找到判斷優惠券的函數。

找到優惠券具體函數:

查看優惠券的值:PLATINUM

在支付界面輸入優惠券代碼,完成第一步:

第二步,要求全單免費,直接把值改爲0呀,哈哈哈。

能夠看到真的不要錢了,完成。很神奇~

【第二部分】

由於第一部分WebGoat8.0版本題型進行了更新,再加上個人三腳貓英語真的作不來了,我認輸,so,我下載了一個WebGoat 7.1版本,進行試驗php

1. Injection Flaws

1.1 Numeric Injection

要求可以顯示全部地方的天氣,與8.0版本不一樣,這個是下拉框的,因此不能直接在網頁注入,須要修改網頁代碼。

搜索 Columbia,找到value,修改value=「101 or 1=1」,注入一個永真式,成功!java

1.2 LAB:SQL Injection

Stage 1:String SQL Injection

此題經過注入實現免密碼登陸,根據老師課上的演示,直接修改長度限制,而後進行注入

密碼欄輸入' or 1=1 --mysql

成功!git

Stage 3:Numeric SQL Injection

用員工帳號登錄,進入員工頁面後再經過SQL注入來查看老闆的帳戶信息。

用上一步的方法進入員工帳號:github

修改網頁源代碼,把其中的value值改成101 or 1=1 order by salary desc --,此方法很巧妙,按照工資高低排序web

點擊viewprofile按鍵
sql

成功!數據庫

1.3 String SQL Injection

SQL注入查看全部人的信息,簡單的萬能注入:瀏覽器

成功!

1.4 Log Spoofing

此題目的是經過注入惡意字符串,按照規則僞造出一條日誌:

在username輸入:zh%0d%0aLogin Succeeded for username: admin


成功!

1.5 Database Backdoors

此題的要求是修改後臺數據庫數據給本身漲工資,而後在數據庫中給本身造一個後門,把全部用戶的郵箱換成本身的。

在輸入userid的地方輸入 101; update employee set salary=20154305

成功!

建後門:在輸入框注入以下語句101;creat TRIGGER lxmBackDoor BEFORE insert on employee FOR EACH ROW BEGIN update employee SET email='20154305@besti.edu.cn' WHERE userid = NEW.userid

成功!

1.6 Blind Numeric SQL Injection

盲注,就是結果只有真和假,須要本身構合適的注入語句去暴力猜想:

輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 4000 );

根據返回結果可知,pin值小於4000.

修改值,根據返回結果逐步求精:

pin值大於2000.

繼續。。。

其實 BurpSuite 提供了暴力破解工具,可是我這個好像有點問題,抓不到包

最後結果是2364,固然不是一個一個試的啦~~

成功!

2. Cross-Site Scripting (XSS)

2.1 Phishing with XSS

此題要咱們在搜索框中輸入XSS攻擊代碼,利用XSS能夠在已存在的頁面中進一步添加元素的特色。咱們先建立一個form,讓受害人在咱們建立的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼,而且將這些信息發送給http://localhost:8080/WebGoat/catcher?PROPERTY=yes

輸入用戶名和密碼:

成功!

2.2 Stored XSS Attacks

此題用戶A能夠任意輸入,而後用戶B點擊用戶A的留言,觸發XSS

title能夠任意輸入,Message輸入消息,能夠嵌入一段js代碼,用戶點擊後便可觸發,例如輸入:<script>alert("Welcome Qsss");</script>

成功!

2.3 Reflected XSS Attacks

此題是一個反射型XSS攻擊

在enter your three digit access code:處輸入 <script>alert("Qsss attack succeed!");</script>

成功!

3. Cross Site Request Forgery(CSRF)

此題是要寫一個URL誘使其餘用戶點擊,從而觸發CSRF攻擊,咱們能夠以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件

在Message裏輸入惡意代碼:<iframe src="attack?Screen=282&amp;menu=900&amp;transferFunds=6666"></iframe>

點擊提交,會出現這個消息,點擊這個消息

成功!

4. CSRF Prompt By-Pass (不懂-_-)

此題包括了兩個請求,一是轉帳請求,二是確認轉帳成功請求,即須要額外傳遞兩個參數給服務器(transferFunds=4000,transferFunds=CONFIRM)

此題參照了學姐的步驟,可是沒有出現進入轉帳的請求界面,參考答案給了一段代碼,可是出來的是這個結果,有點濛濛的~~

至此,實驗結束~~

3、漏洞原理及預防

1.SQL注入

- 原理

就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
具體來講,它是利用現有應用程序,將(惡意)的SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。

- 防護

(1)檢查變量數據類型和格式

若是你的SQL語句是相似where id={$id}這種形式,數據庫裏全部的id都是數字,那麼就應該在SQL被執行前,檢查確保變量id是int類型;若是是接受郵箱,那就應該檢查並嚴格確保變量必定是郵箱的格式,其餘的類型好比日期、時間等也是一個道理。總結起來:只要是有固定格式的變量,在SQL語句執行前,應該嚴格按照固定格式去檢查,確保變量是咱們預想的格式,這樣很大程度上能夠避免SQL注入攻擊。

(2)過濾特殊符號

對於沒法肯定固定格式的變量,必定要進行特殊符號過濾或轉義處理。以PHP爲例,一般是採用addslashes函數,它會在指定的預約義字符前添加反斜槓轉義,這些預約義的字符是:單引號 (') 雙引號 (") 反斜槓 () NULL。
(3)綁定變量,使用預編譯語句
MySQL的mysqli驅動提供了預編譯語句的支持,不一樣的程序語言,都分別有使用預編譯語句的方法。這樣作的好處就是,若是我輸入密碼:'or 1='1,那他也只會被看成密碼來處理,不會和sql語句其餘結構關聯

2.XSS攻擊

- 原理

惡意攻擊者往Web頁面裏插入惡意腳本代碼,而程序對於用戶輸入內容未過濾,當用戶瀏覽該頁之時,嵌入其中Web裏面的腳本代碼會被執行,從而達到惡意攻擊用戶的特殊目的。

- 防護

一種方法是在表單提交或者url參數傳遞前,對須要的參數進行過濾
在輸入方面對全部用戶提交內容進行可靠的輸入驗證,提交內容包括URL、查詢關鍵字、http頭、post數據等
在輸出方面,在用戶輸內容中使用 <XMP> 標籤,標籤內的內容不會解釋,直接顯示。
嚴格執行字符輸入字數控制,由於XSS代碼每每不少,因此要對字符數進行控制

3.CSRF

- 原理

跨站請求僞造,攻擊者盜用了你的身份,以你的名義發送惡意請求。
CSRF可以作的事情包括:以你名義發送郵件,發消息,盜取你的帳號,甚至於購買商品,虛擬貨幣轉帳
形成的問題包括:我的隱私泄露以及財產安全。

- 防護

(1)驗證碼
能夠在某些敏感操做過程當中,加入驗證碼,以確認用戶身份
(2)Token
CSRF能攻擊成功,根本緣由是:操做所帶的參數均被攻擊者猜想到。既然知道根本緣由,咱們就對症下藥,利用Token。當向服務器傳參數時,帶上Token。這個Token是一個隨機值,而且由服務器和用戶同時持有。當用戶提交表單時帶上Token值,服務器就能驗證表單和session中的Token是否一致。

4、實驗總結與感想

WebGoat8.0連接, WebGoat 7.1連接JDK連接藍燈FQ連接

本次實驗也是最後一個實驗,我以爲是這些實驗裏面最難的最難的最難的,首先由於頁(我)面(的)是(英)英(語)文(太)的(爛),增長了實驗的難度,徹底靠翻譯軟件在生活,其次個人這個WebGoat版本比較新,沒有了參考系,只能本身在那裏刻苦鑽研。最終我仍是臣服了,換了一個WebGoat版本,從新再來吧。

作了這麼多的網絡攻防實驗,真的收穫不少,都是能看到實際效果的危險、漏洞、後門、病毒,網絡安全真的須要咱們重視起來,同時也加強了個人安全防範意識,自從作了那個後門的實驗之後我就把我電腦攝像頭粘起來了,同時這門課也激發了我對網絡安全這方面的興趣,往後的學習工做生活中也會更加關注這方面的信息和事件。

授之以魚不如授之以漁~

相關文章
相關標籤/搜索