网络安全从入门到精通 (第六章-1) XSS的原理分析与解剖
本文内容:
- 什么是XSS?
- XSS类型
- XSS主要拼接是什么?
- XSS判断是否存在方法
- XSS能做什么
- 如何打XSS
- XSS主流防御方法
- XSS常见场景
- XSS绕过方法
1,什么是XSS?
XSS:HTML代码注入。
HTML代码注入:
用户的输入会被当做HTML等前端代码执行。
并不止是HTML代码,是前端的所有语言,如:JS、HTML、CSS。
两个关键条件:
1.用户能够控制输入。
2.原本程序要执行的代码,拼接了用户输入的数据。
2,XSS主要拼接的是什么?
SQL注入拼接的是操作数据库的SQL语句。
SQL注入用户的输入会被当做SQL语句执行。
XSS拼接的是网页HTML代码。
XSS主要就是调用js。
3,XSS判断是否存在方法:
业内一般把弹窗函数作为一个存在XSS的认定。
最经典的判断方法:<script>alert(1)</script>
一般证明XSS存在,就是在正常页面传参,然后构建函数让它弹窗,就是存在XSS了。
弹窗证明具有XSS,不弹窗也不能证明不具有XSS,只是一种判断方法。
为什么通过弹窗判断XSS?
因为XSS攻击如果需要达到真正的利用,需要调用JS。
4,XSS能够做什么?
盗取COOKIE(使用最频繁)[打哪偷那]
获取内网IP
获取浏览器保存的明文密码
截取网页屏幕
网页上键盘记录
5,如何打XSS:
首先:因为达到各种各样的效果需要比较 复杂的代码,所以XSS平台应运而生。
XSS平台:
xsspt.com(开放注册)
XSS9.com(填写邀请码)
XSS平台大大方便了XSS攻击,只需要引入一个平台外部链接就可以实现功能了。
打XSS:
我们写入的代码,要当做JS执行
在进行sql注入时,我们使用了0x标示,告诉数据库这个是十六进制。
在进行XSS注入时,我们也需要使用标示,告诉浏览器这个是JS代码,而不是HTML之类的。
触发JS方法有三种:
1.标签:<script>alert(1)</script>
2.伪协议:<a href=javascript:alert(1)>test</a>
3.事件型:
事件也是可以执行JS的。
在HTML里面有一些标签它拥有事件
事件:当满足了条件就可以触发。
例如:
onerror=alert(1)在加载文档或图像时,发生错误。<img src='a' onerror=alert(1)/>
常用的有:onerror(失败加载执行)、onload(成功加载执行)、oninput(有输入框、输入的时候触发),onfocus获取焦点
注意:
第一种方法用的最多,被拦截的可能性最大。
第二种方法触发的几率比较小,比较鸡肋,特殊的时候才能使用。
第三种方法常用的
6,XSS防御方法:
1.过滤尖括号,单引号、双引号。
2.实体化编码。
7,XSS类型:
反射型:XSS:提交的数据成功实现XSS,但是仅仅对本次访问有有效,非持久性攻击。
存储型:XSS:提交的数据成功实现XSS,存入数据库每次访问有效,持久性攻击。
DOM型:XSS:原本不存在XSS,经过JS处理之后产生了XSS。
反射型XSS经过js处理变成放射Dom型Xss。
存储型XSS经过js处理变成存储Dom型Xss。
8,XSS常见场景:
重灾区:评论区、留言区、个人信息、订单信息等。
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等。
9,XSS绕过方法:
改变大小写:<ScRipt>ALeRt(“XSS”);</sCRipT>
关闭标签:“><script>alert(“Hi”);</script>
使用hex编码绕过。
绕过magic_quotes_gpc。
对标签属性值进行转码。
事件型。