1. 程式人生 > >20155204《網絡對抗》Exp9 Web安全基礎實踐

20155204《網絡對抗》Exp9 Web安全基礎實踐

click lse itl 員工 但是 dmi 瀏覽器中 contain 怎麽

20155204《網絡對抗》Exp9 Web安全基礎實踐

一、基礎問題回答

SQL註入攻擊原理,如何防禦?

原理:

  • SQL註入即是指web應用程序對用戶輸入數據的合法性沒有判斷,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息。

防禦:

  • 1.普通用戶與系統管理員用戶的權限要有嚴格的區分。如果一個普通用戶在使用查詢語句中嵌入另一個Drop Table語句,那麽是否允許執行呢?由於Drop語句關系到數據庫的基本對象,故要操作這個語句用戶必須有相關的權限。在權限設計中,對於終端用戶,即應用軟件的使用者,沒有必要給他們數據庫對象的建立、刪除等權限。那麽即使在他們使用SQL語句中帶有嵌入式的惡意代碼,由於其用戶權限的限制,這些代碼也將無法被執行。故應用程序在設計的時候,最好把系統管理員的用戶與普通用戶區分開來。如此可以最大限度的減少註入式攻擊對數據庫帶來的危害。
  • 2.強迫使用參數化語句。如果在編寫SQL語句的時候,用戶輸入的變量不是直接嵌入到SQL語句。而是通過參數來傳遞這個變量的話,那麽就可以有效的防治SQL註入式攻擊。也就是說,用戶的輸入絕對不能夠直接被嵌入到SQL語句中。與此相反,用戶的輸入的內容必須進行過濾,或者使用參數化的語句來傳遞用戶輸入的變量。參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中。采用這種措施,可以杜絕大部分的SQL註入式攻擊。不過可惜的是,現在支持參數化語句的數據庫引擎並不多。不過數據庫工程師在開發產品的時候要盡量采用參數化語句。
  • 3.加強對用戶輸入的驗證。、在SQLServer數據庫中,有比較多的用戶輸入內容驗證工具,可以幫助管理員來對付SQL註入式攻擊。測試字符串變量的內容,只接受所需的值。拒絕包含二進制數據、轉義序列和註釋字符的輸入內容。這有助於防止腳本註入,防止某些緩沖區溢出攻擊。測試用戶輸入內容的大小和數據類型,強制執行適當的限制與轉換。這即有助於防止有意造成的緩沖區溢出,對於防治註入式攻擊有比較明顯的效果。

2.XSS攻擊的原理,如何防禦?

原理:

  • XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼(如,HTML代碼和客戶端腳本)植入到提供給其它用戶使用的頁面中,攻擊者可以利用XSS漏洞旁路掉訪問控制。

防禦

- 1.使用XSSFilter。輸入過濾,對用戶提交的數據進行有效性驗證,僅接受指定長度範圍內並符合我們期望格式的的內容提交,阻止或者忽略除此外的其他任何數據。比如:電話號碼必須是數字和中劃線組成,而且要設定長度上限。過濾一些些常見的敏感字符,例如:```< > ‘ “ & # \ javascript expression  "onclick="  "onfocus"```;過濾或移除特殊的Html標簽, 例如: ```<script>, <iframe> ,  &lt; for <, &gt; for >, &quot for```;過濾JavaScript 事件的標簽,例如``` "onclick=", "onfocus" ```等等。輸出編碼,當需要將一個字符串輸出到Web網頁時,同時又不確定這個字符串中是否包括XSS特殊字符(如< > &‘”等),為了確保輸出內容的完整性和正確性,可以使用編碼(HTMLEncode)進行處理。
- 2.DOM型的XSS攻擊防禦。把變量輸出到頁面時要做好相關的編碼轉義工作,如要輸出到 <script>中,可以進行JS編碼;要輸出到HTML內容或屬性,則進行HTML編碼處理。根據不同的語境采用不同的編碼處理方式。
- 3.HttpOnly Cookie將重要的cookie標記為http only,   這樣的話當瀏覽器向Web服務器發起請求的時就會帶上cookie字段,但是在腳本中卻不能訪問這個cookie,這樣就避免了XSS攻擊利用JavaScript的document.cookie獲取cookie:

3.CSRF攻擊原理,如何防禦?

原理:

- CSRF跨站請求偽造,也被稱為“oneclickattack”或者sessionriding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用,通過偽裝來自受信任用戶的請求來利用受信任的網站。是一種依賴web瀏覽器的、被混淆過的代理人攻擊。

防禦:

- 通過 referer、token 或者 驗證碼來檢測用戶提交。
- 盡量不要在頁面的鏈接中暴露用戶隱私信息。
- 對於用戶修改刪除等操作最好都使用post 操作 。
- 避免全站通用的cookie,嚴格設置cookie的域。

二、實踐總結與體會

這是最後一個實驗了,基於這個webgoat的實驗平臺做了很多實驗,按著步驟來,也不算難操作,難在理解每一句指令,每一個攻擊方式,每一個漏洞,這也是我們做這麽多實驗的目的吧,直觀的先認識到,怎麽樣會成功,然後再推敲,是怎麽成功的。網絡對抗的實驗確實是最有趣的,也是我做過最能調動人學習興趣的實驗。

三、實踐過程記錄

1.開啟webgoat

  • 通過java -jar webgoat-container-7.0.1-war-exec.jar打開webgoat。(這個實際安裝真的好費事。。最後還是選擇了老師的kali)

  • 在kali瀏覽器中輸入localhost:8080/WebGoat,用默認賬戶密碼登錄webgoat。
    技術分享圖片

2.XSS:Phishing with XSS 跨站腳本釣魚攻擊

如果一個未經驗證的用戶輸入一個 HTTP 響應時, XSS 很有可能發生,利用它就可以進行釣魚攻擊,在一個頁面內添加一個偽官方網頁就可以騙取用戶的賬號和口令。註意這裏強調的是在 HTTP 響應時攻擊,而不是請求,要知道如果是請求的話,那麽就相當於是自己黑自己,多沒意思,可如果是響應的話就意味著,別人發送請求,而你響應他虛假的頁面,這樣就可以用來對其進行欺騙。

  • 先準備一個代碼
    ```














This feature requires account login:





Enter Username:



Enter Password:













- 然後在webgoat找到xss攻擊打開Phishing with XSS,將這段代碼輸入到輸入框中,點擊search出現如下登錄框:
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230250235-1868497484.png)

- 在登錄框中輸入用戶名、密碼:

- 點擊登錄後跳出彈框,其中包含用戶輸入的用戶名、密碼。攻擊成功!
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230257163-183396322.png)

### 3.XSS:Stored XSS Attacks 存儲型XSS攻擊
- 簡單來說明一下存儲型XSS的攻擊基本流程:比如在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,並且提交。網站後臺程序將留言內容存儲在數據中。然後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了之前黑客的留言內容,並且直接插入在html頁面中,這就可能導致了:黑客留言的腳本本身應該作為內容顯示在留言板的,然後此時可能黑客的留言腳本被瀏覽器解釋執行了。然後黑客就可以:通過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息;重定向網站到一個釣魚網站;重新更改頁面內容,假裝讓客戶輸入用戶名,密碼,然後提交到黑客的服務器等等。

- 打開Stored XSS Attacks
- 在Message框中輸入<script>alert("你想加在彈框裏的內容");</script>
- 點擊提交就可以看到彈窗了。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230359666-2086177604.png)


### 4.XSS:Reflected XSS Attacks 反射型XSS攻擊

- 反射型XSS,非持久化,需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。

- 在第二個code框中輸入```<script>alert("20155204wh");</script>```
- 點擊purchase後攻擊成功。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230422678-678387519.png)


### 5.Cross Site Request Forgery(CSRF)

- CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。
- 註意留心頁面右邊Parameters中的src和menu值
- 在title框中輸入學號,message框中輸入代碼:<img src=‘attack?Screen=src值&menu=menu值&transferFunds=轉賬數額‘ width=‘1‘ height=‘1‘>
- 點提交按鈕,再點擊生成的連接,即可看到結果。

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230612184-1760972856.png)



### 6.CSRF Prompt By-Pass

- 跟上一個一樣的操作,留意頁面右邊Parameters中的src和menu值,並在title框中輸入學號,message框中輸入代碼:

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉賬數額">
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM">


- 還是點擊學號鏈接,跳轉到攻擊成功的頁面。

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230622705-1580751470.png)

### 7.SQL:Numeric SQL Injection
- 這裏開始的都是SQL攻擊,所謂SQL註入式攻擊,就是輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL註入式攻擊。
- 我們在kali中打開```BurpSuite```這個軟件。
- 選擇Proxy->Options->Add添加一個端口,修改端口號為5204,並選中這個端口。
- 然後配置Firefox,```preference-->advanced-->network-->connection-->settings```,設置代理服務器和端口,要與剛剛BurpSuite中綁定的一致。
- 設置好代理後回到題目頁面,點擊Go,然後進入BurpSuite中依次選擇Proxy->Intercept,可以看到已經抓到了包。

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230653833-547779522.png)

- 然後右鍵這個包,把它send to repeater,再進入repeater頁標簽,選擇Params將其中station的值改為101 or 1=1,點擊Go運行,查看右側代碼可以看到包中的SQL語句為

SELECT * FROM weather_data WHERE station = 101 or 1=1

- 回到Proxy中點擊Intercept is on 改為 off 停止抓包,回到火狐發現已經成功。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230710713-1077607454.png)

### 8.SQL:Command Injection
- 還是用BurpSuite抓包。
- 在webgoat中點擊view,BurpSuite的proxy已經抓到了包,同樣send到repeater,在其中的Params選項中先運行一次,查看數據都提交的位置。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230722288-1228035494.png)

- 然後修改HelpFile的值為```AccessControlMatrix.help"&&ifconfig"```,點擊GO發現執行了ifconfig語句。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230732912-924984692.png)

- 回到webgoat發現攻擊成功。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230749978-1607675256.jpg)

### 8.SQL:Log Spoofing
- 在User Name文本框中輸入```%0d%0aLogin succeeded !admin```可以欺騙登錄。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230758728-1555840619.png)

### 9.LAB:SQL Injection(Stage 1:String SQL Injection)
- 使用Firefox瀏覽器上方的插件firebug,可以修改當前頁面的源碼。
- 利用firebug對長度maxlength值進行擴大(原本是8),然後使用用戶Neville進行登錄,在密碼欄中再次輸入‘ or 1=1 --,點擊登錄就OK。這裏firebug要一直開著,不然改過的網頁源碼就無效了。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230812262-489408161.png)


### 9.LAB:SQL Injection(Stage 3:Numeric SQL Injection)
- 還是用上一個的辦法登錄。
- 還是用firebug修改viewprofile部分的代碼,找到一行用員工id作為索引來傳送數據的代碼,雙擊這行代碼就可以出現value的值,因為我們想要用員工的賬戶瀏覽老板信息,而大多數企業公司裏老板的工資應該是最高的,所以我們就把其中的value值由101改為101 or 1=1 order by salary desc --,這樣老板的信息就會被排到第一個讓我們看到。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230816861-842379057.png)

### 10.String SQL Injection

- 構造永真式‘or 1=‘1,輸入第一個分號用來閉合原輸入語句的前一個分號,而第二個分號用來閉合原輸入語句的後一個分號,使這條語句被強行拆分成為兩條語句。然後我們就可以看到全部信息了。
![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230827042-930917038.png)

### 11.Database Backdoors

- 輸入語句```101; update employee set salary=8888888```成功將該用戶的工資變成8888888,攻擊成功:

![](https://images2018.cnblogs.com/blog/1071529/201805/1071529-20180529230846407-2120488470.png)

- 下一步,輸入語句

101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
```
使得表中一旦添加新用戶那麽就在用戶表裏將新用戶的郵箱改為我設置的郵箱。

技術分享圖片

12.Blind Numeric SQL Injection

  • 不得不承認,偷了個懶,直接參考同學的博客得到2364是可用的,輸入攻擊成功。
    技術分享圖片

20155204《網絡對抗》Exp9 Web安全基礎實踐