概述
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不属于图片标签
注入成功