初识XSS

Source

概述

XSS本来应缩写为CSS(Cross Site Scripting),由于与CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。

恶意攻击者利用web页面的漏洞,插入一些恶意代码,通常是JavaScript编写的恶意代码(当然其他如VB,java等其他的脚本都有可能被插入)当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的,盗取用户的cookie信息。

xss漏洞的验证

我们可使用一段简单的js代码,验证和检验漏洞的存在

<script>alert(/xss/)</script>

解析

<script> 标签用于定义客户端脚本
alert()函数的作用是弹出消息对话框,并且alert消息对话框通常用于一些对用户的提示信息。
这段的意思就是弹出一个消息提示框内容是/xss/

我们可以在测试界面提交上面的代码,如果我们提交代码被当做js语句运行,就说明可以执行其他的js代码,以此验证了xss漏洞的存在

这里利用DVWA靶场的low级别关卡演示

在点击select查询之后,我们就可以发现在url中出现了GET传参

我们就可以直接正在GET传参里进行语句注入,成功就说明存在xss漏洞,可以进行其他语句的注入

XSS类型

反射性xss

反射型xss也称为非持久性的xss漏洞,当用户访问一个带有xss攻击代码的url请求时,服务端接收到数据后将带有xss代码的网页响应给客户端,然后客户端点击这个网页或者是链接它才会响应攻击,这就叫做反射性xss漏洞,反射性xss是一次性的,点击一次发生一次所以称为非持久性的xss

存储型xss

存储型xss又称持久性xss,当攻击者提交一段XSS代码后,攻击脚本被服务器端接受并存放在目标服务器的数据库或文件中,具有很高的隐蔽性。当攻击者再次访问某个页面时,这段XSS代码被程序读出来给浏览器,造成XSS跨站攻击,着就是存储型XSS。

事例

这里利用DVWA靶场实现

当我们在存储型注入的留言框实现注入之后我们,回显信息

当我们复制其url,再次访问时,就会直接执行

DOM型xss

DOM概述

第一次接触DOM这个名词,需要先了解DOM是什么意思

当网页被加载时,浏览器会创建页面的文档对象模型简称为“DOM”,它定义了文档的访问标准HTML js可以对树中的文档对象进行修改,而改变页面的元素,DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。

DOM原理

攻击者在URL中插入XSS代码,前端页面直接从URL中获取XSS代码并且输出到页面,导致XSS代码的执行,攻击者将带有XSS代码的URL发送给用户,用户打开后受到XSS攻击。有点类似于反射性xss,但与其的区别是DOM类型不经过后端的处理,它是直接在前段执行的

事例

这里利用pikachu的靶场环境来进行事例

在输入框随便输入一个数字,发现知识回显了what do you see,是一个链接但是点进去也是404

尝试注入常用代码,结果发现完全不起作用,回显依旧没什么区别

因为是DOM既然是在前面进行执行,尝试查看源码,看到了一个a href标签

a herf标签主要是用来指定超链接的目标url这里之所以只回显what do you see,是因为把超链接的名字设置为了这串英文,然后我们注入的语句应该就被其他语句联合写入了a href标签

所以经过查看WP,得知这里是要构造闭合,使我们注入的语句能够独立出来

但是具体怎么构造闭合呢,构造双引号是不行的,在刚在a标签的上面其实有一段提示和解法

在源码中,它的语句其实是"<a href='"+str+"'>what do you see?</a>"

应该是将输入的值传入str然后添加两个双引号进行闭合作为what do you see的超链接

那我们构造的闭合语句就应该是先把前面的href用单引号给闭合掉

"< a href='' "+str+"'>what do you see?</a>"

然后再继续将后面的双引号给闭合掉

" < a href=' "" '+str+ >'>what do you see?</a> "

这样就可以使得我们注入的语句成为一个独立的存在

因为涉及到闭合,还有超链接我们这里还是使用提示的语句,注入进去

'><img src="#" onmouseover="alert('xss')">
 ' onclick="alert('xss')">

onclick

主要的作用是当被点击时会执行代码,刚好跟这里的超链接合得来

onmouseover

这里提供了两种方式,onmouseover可以使用onclick的方式,但是onclick不能用onmouseover方式因为onclick不属于图片标签

注入成功