iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 24
5
Security

資事體大 毒擋一面 - 資安防護深入淺出系列 第 24

[Day24] 攻擊行為-反射式跨網站指令碼 Reflected XSS

天氣變涼了,大家要多注意保暖唷,小茶我有獨家保暖的絕招,p.s. 小朋友不可以學喔,葛格有練過。
http://ithelp.ithome.com.tw/upload/images/20170108/20103559W8qOAFF6Kz.png

Reflected XSS

跨網站指令碼(Cross-site scripting,XSS)攻擊通常指利用網頁開發時留下的漏洞,攻擊者將惡意程式碼注入到網頁上,並將網頁使用釣魚郵件或用社群網站等媒介散佈,使得其他點擊連結的使用者在觀看網頁時就會受到影響這些惡意程式碼的攻擊,通常用於 HTML/JavaScript 或者其他使用者端的腳本語言。Reflected XSS 是其中一種,當使用者點擊一個經過設計的連結,就有可能被執行特定的 Script。

以下為簡單示範:

測試環境是在 asp.net framework 4.5.2 下,因為預設(ValidateRequest)會檢查這些可能有害的漏洞,所以要先關閉這種檢查。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication_XSS_test.WebForm1" validateRequest="False"%>

然後在 Web.config 中的 <system.web> 加入

<httpRuntime requestValidationMode="2.0"/>

XSS-1

因為 Querystring 這種傳值方法會在 url 上顯示,攻擊者可以看到網頁的變數內容,當我們在 textbox 輸入"dangerous"並且按下 Submit 後,可以看到在 url 中出現變數 id=dangerous。
XSS-2

攻擊者當然也可以輸入想執行的 Script,像是輸入

<script> alert('You have been hacked'); </script>

則會執行 Script 內容。

這種 url 很容易被認出,攻擊者也可以利用 urlencode 將 Script 內容加密,亦會顯示一樣的結果。

%3Cscript%3Ealert(%27You%20have%20been%20hacked%27)%3B%3C%2Fscript%3E

Online Encoder http://meyerweb.com/eric/tools/dencoder/

執行結果如下圖:
XSS-3

漏洞防禦:

將使用者所提供的內容進行過濾,像是 ASP.NET 的 Server.HtmlEncode()、PHP的htmlentities()或是htmlspecialchars()等,使用者也可以關閉瀏覽器的 JavaScript 的選項,並且定期更新,避免遭受攻擊。

Reflected XSS 是一種很常見的網路攻擊方式,過去有相當多個知名大型網站曾發現這類漏洞或遭受到此類型的攻擊,像是 Facebook、Google、Twitter 等等。在 OWASP Top 10 與 Common Vulnerabilities and Exposures(CVE)中,XSS 一直都是常客,可見其在使用安全性的影響程度之大。

希望有興趣的讀者也能夠點個追蹤,有任何問題或有想多了解的地方也可以回覆在文章底下唷,謝謝你們XDDDD!

參考來源:
OWASP https://www.owasp.org/index.php/Main_Page
CVE https://cve.mitre.org/
維基百科 https://en.wikipedia.org/wiki/Cross-site_scripting


上一篇
[Day23] 攻擊行為-緩衝區溢位 Buffer Overflow
下一篇
[Day25] 攻擊行為-FTP 彈跳式攻擊(FTP Bounce Attack)
系列文
資事體大 毒擋一面 - 資安防護深入淺出31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
椅恩啾
iT邦新手 5 級 ‧ 2017-05-27 12:00:29

小茶大大好!

想請教一下,文中提到:

跨網站指令碼(Cross-site scripting,XSS)攻擊通常指利用網頁開發時留下的漏洞,攻擊者將惡意程式碼注入到網頁上,並將網頁使用釣魚郵件或用社群網站等媒介散佈,使得其他點擊連結的使用者在觀看網頁時就會受到影響這些惡意程式碼的攻擊,通常用於 HTML/JavaScript 或者其他使用者端的腳本語言。Reflected XSS 是其中一種,當使用者點擊一個經過設計的連結,就有可能被執行特定的 Script。

小弟剛學網頁,想了解攻擊者是如何將惡意程式碼注入到網頁上,然後散佈給其它使用者的?
網頁不是都從server端讀取到client端的瀏覽器上,那XSS是可以直接修改到server上的code嗎?

祝大大端午連假愉快!

小茶 iT邦新手 4 級 ‧ 2017-06-05 10:21:15 檢舉

Hi 椅恩啾,

感謝椅恩啾大大的觀看/images/emoticon/emoticon34.gif
抱歉我一段時間沒上來啦~~~(欠揍/images/emoticon/emoticon05.gif
XSS 是不會修改到 server 上的 code 唷~
而是透過釣魚方式(Phishing)將設計過的 URL 傳送給受害者,使受害者在點擊後直接執行。

有許多網頁的設計都會從 URL 中讀取內容所需的數值
如範例中的網址
localhost:59318/WebForm1.aspx?id=dangerous
從程式碼 Page_Load 中的 id = Request.Querystring["id"] as string; 以及 label1 = id;
我們可以得知 label1 會讀取 URL 中 id 的數值並以 label 顯示。

若在 URL 中我們放入了一段可執行的代碼,

localhost:59318/WebForm1.aspx?id=<script> alert('You have been hacked'); </script>
且網頁在讀取時亦沒檢查輸入值是否帶有 script 標頭時,點擊 URL 後會直接跳出一個警告視窗,內容就是 "You have been hacked"。
所以在 XSS 攻擊下是不會修改到 server 端的 code,但在做網頁時要記得加入檢查及過濾輸入值的機制呦。

關於如何防範可以參考以下這篇:
OWASP TOP 10 之如何防禦 XSS 攻擊 https://kknews.cc/zh-tw/tech/j8bx8p.html
有任何問題都歡迎隨時提問討論唷~

椅恩啾 iT邦新手 5 級 ‧ 2017-06-05 11:03:33 檢舉

感謝小茶大大的解說!

原來是直接丟URL的方式啊,看來以後點人家給的連接都要小心點了!

非常感謝你,受益良多!
/images/emoticon/emoticon42.gif

我要留言

立即登入留言