pikachu之DOM型xss xss-x

408 阅读5分钟

image.png

www.w3school.com.cn/js/js_htmld…

DOM 是一个前端的操作接口,存前端的操作 DOM型的操作 全部都是在前端完成的,没有和服务器进行post,get等交互

返回pikachu,我们zai DOM里面输入22 给我们返回了 what do you see? 这一句 image.png

一头雾水,那我们看看前端代码

image.png DOM不与服务器进行交互所以,DOM的输出就是 在

<div id ="dom"></div>

检测是否存在漏洞

#'onclick="alert('xss')">

为什么要这样写? 为了闭合语句。

<!--<a href="" onclick=('xss')>-->

只要弹出了xxx 说明存在DOM型的xss漏洞 image.png

这一串输入既不在URL里面也不会被后台存储下来。那刷新一下这个东西就没了,那这个漏洞它算是漏洞吗?

或者说这个这种场景下的动物性的伤害有用吗?

那其实呢,在我们这个例子确实是比较鸡肋的,但是不能不说他是一个问题啊。只能说这个地方出现的是一个比较低微的一个DOM型例子。那通过这个例子呢,我们要讲的就是说让大家去明白造成DOM型的XSS的原因是什么啊,原因是什么,它的特点是什么啊

它的原因其实就是前端的输入被DOM给获取到了,也是被动进行的操作,然后呢,通过DOM又在前端输出了整个过程跟反射型或者是存储型比起来,他是不经过后台进行交互的啊,就是这个意思。OK,大家要把这个动机的原理搞清楚啊,搞清楚那是不是这样说的话,DOM的漏洞就没有用了,那其实也不是啊,也不是,呃,因为前端的写法。千奇百怪啊,场景也非常复杂,谁都不知道程序员会怎么去写这个前端的这个DOM的操作。那么接下来我们就来看一个另外的DOM型的参数,这个案例来看一下吧。这种情况下的DOM的参数是怎么来利用的?

image.png 他定了一个方向,那这个函数呢?它首先去用Windows.location.search这么一个类的一个方法。这个方法是干嘛呢?它会去获取浏览器里面的参数哈,它会把URL里面传参的这个参数内容给换下来,然后呢,对她就进行一个这个URL的一个解码,然后用一个字符串。然后获取到这个对应的内容。这一段实际上就是从这个框里面去获取到输入的这个完整的内容。然后呢,把这个输入的内容呢,赋值给XSS这么一个变量啊。然后他就把这个xss呢跟我们刚看到的那个DOM的XSS是一样啊,他把他的写到了这个a标签里面,写到了a标签里面。那这种情况跟我们刚刚的不同之处在于呢,它的输入实际上是从浏览器的URL里面去获取的。啊,想到什么了嘛,那这个场景出现了就跟我们反射性的XSS是很像的。

也就是说形成这个漏洞的输入点其实是在我们的URL里面的参数里面的参数里面,OK,那么我们也来构造一下对应的闭合

因为输入也是在A标签里面,所以我们还是一样的输入刚才的闭合弹窗代码

#'onclick="alert('xss')">

image.png

实际上它就会把提交的这个内容赋值给这个a标签,我们点一下这个a标签,然后我们可以看到在这边我们点一下这个a标签,实际上就会去执行这个风险了。那么这个风险呢

它会把这个a标签里面的内容去写到这个DIV里面去啊,我们我们来看一下。让往事都随风吧。这么一个a标签,他的href后面实际上就跟着一个onclick的一个属性,也就是我们刚刚输入的一个属性啊,

比如说我们点一下它就会弹窗,从那这种情况呢,也是一种DOM型的xss啊,它唯一的区别就在于说他这个输入是从他这个DOM的是从浏览器里面来获取的。那其实这个就跟DOM反射型一样啊。

那么你只需要把这一段URL啊,把这一段URL发送给发送给这个需要攻击的用户,他只需要打开这个链接啊,打开这个链接,那么我们构造的这一段恶意的JavaScript代码就会被插入到用户的页面里面去啊。这个就跟反射性的刹车是一样的。

那这个比起我们刚刚讲的这个这个基础的DOM型XSS呢,这个危害就高了很多啊,危害就高了很多。所以有些人说DOM型XSS实际上就是一个鸡肋啊。但实际上也不尽然啊,因为前端的写法呢,千奇百怪,也没法确认这个DOM型XSS值是他的输入点,到底是从哪里获取的啊?如果是从url里面来获取的参数,那就意味着我们是可以通过URL来注入对应的恶意的JS代码。OK,那么相信通过这两个案例的一个讲解跟比较啊,大家应该能够理解什么是DOM型的xss

那DOM型XSS,实际上是不涉及到后端代码的啊,它所有的这个输入输出都是在前端操作的啊,都是在前端操作的,这个大家一定要理解。