一、浏览器解析网页的过程
浏览器收到数据后先进行词法分析,然后拿着词法分析出来的合法符号进行语法匹配,匹配到了合法的语句就就添加到解析树,没有就保存,然后看下一个词法,如果最后还是无法匹配,就抛出异常(说语法错误),然后成功的完成了第一步解析,生成Dom树然后再对CSS元素进行渲染,最后执行javascript(浏览器脚本)
二、什么是DOM树
我们以百度的首页为介绍
F12审查元素的代码就是DOM树,DOM树的结构大体如下
简单讲就是html代码
三、XSS简介
言归正传,什么是XSS呢。XSS我个人的理解是HTML代码注入。
说到注入就联想到了SQL注入的条件
- 第一个是用户能够控制输入
- 第二个是原本程序要执行的代码,拼接了用户输入的数据
那么XSS主要拼接的是什么?
SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML)
四、XSS的危害
- 盗取Cookie(用的最频繁的)
- 获取内网ip
- 获取浏览器保存的明文密码
- 截取网页屏幕
- 网页上的键盘记录
五、XSS的类型
- 反射型XSS (你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击)
- 存储型XSS (你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发)
- DOM型XSS (比较复杂,会在后边的文章进行介绍)
六、怎么检测是否存在XSS?
一般是想办法让浏览器弹窗(alert) 最经典的弹窗语句:
<script>alert(1)</script>
一般证明XSS是否存在,就是在正常页面传参然后构建参数让他弹窗就是存在XSS了
七、XSS的原理和特性
xss真的执行恶意代码的实际上是JS语句,那么我们一般需要构建<script></script> (这个是定义Js的标签)
但是也是有其他方法可以执行的,比如:
javascript:alert(1) 经典代码
<a href=javascript:alert(1)>test</a>
八、XSS的靶场操作
1.分析源码
function escape(input) {
// tags stripping mechanism from ExtJS library
// Ext.util.Format.stripTags
var stripTagsRE = /<\/?[^>]+>/gi;
input = input.replace(stripTagsRE, '');
return '<article>' + input + '</article>';
}
可以看到加了一个正则,来过滤了形如<xxx>的内容,可以使用注释符号//来绕过,借助onload事件来执行代码
<body onload=prompt(1)//
特别提供:
靶场详解: