一、浏览器解析网页的过程

浏览器收到数据后先进行词法分析,然后拿着词法分析出来的合法符号进行语法匹配,匹配到了合法的语句就就添加到解析树,没有就保存,然后看下一个词法,如果最后还是无法匹配,就抛出异常(说语法错误),然后成功的完成了第一步解析,生成Dom树然后再对CSS元素进行渲染,最后执行javascript(浏览器脚本)
图片1.png

二、什么是DOM树

我们以百度的首页为介绍
1.jpg
F12审查元素的代码就是DOM树,DOM树的结构大体如下
图片2.png
简单讲就是html代码

三、XSS简介
言归正传,什么是XSS呢。XSS我个人的理解是HTML代码注入。
说到注入就联想到了SQL注入的条件

  • 第一个是用户能够控制输入
  • 第二个是原本程序要执行的代码,拼接了用户输入的数据

那么XSS主要拼接的是什么?
SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML)

四、XSS的危害

  1. 盗取Cookie(用的最频繁的)
  2. 获取内网ip
  3. 获取浏览器保存的明文密码
  4. 截取网页屏幕
  5. 网页上的键盘记录

五、XSS的类型

  1. 反射型XSS (你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击)
  2. 存储型XSS (你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发)
  3. DOM型XSS (比较复杂,会在后边的文章进行介绍)

六、怎么检测是否存在XSS?
一般是想办法让浏览器弹窗(alert) 最经典的弹窗语句:

<script>alert(1)</script>    

一般证明XSS是否存在,就是在正常页面传参然后构建参数让他弹窗就是存在XSS了
图片3.png

七、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)//

test.jpg

特别提供:
靶场详解:

Last modification:May 20th, 2020 at 01:38 pm