一、XSS原理与分类
原理
XSS攻击全程跨站脚本攻击。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
与SQL注入类似,XSS也是利用提交恶意信息来实现攻击,但是XSS一般提交的是JavaScript脚本,运行在Web端,就是用户的浏览器。SQL注入提交的SQL命令在后台的数据库服务器执行。
XSS分类
- 反射型XSS:危害较低,只要当用户访问了包含了恶意脚本的URL,才会被触发;反射性的攻击不会写入网站的数据库,是一次性的攻击。
- 存储型XSS:该类 XSS 会把攻击代码保存到数据库,当用户访问显示该数据内容的页面,就会被攻击。
- 基于DOM的XSS:通过修改页面的 DOM 节点形成 XSS,DOM型攻击既可能是反射型,也可能是存储型。
二、攻击实战
1.反射型XSS(low级别)
第一步、登录DVWA,选择XSS反射性攻击,选择攻击级别低。
第二步、进行脚本注入攻击
在输入框中输入:
<script>alert(document.cookie)</script>
执行该脚本,会输出用户的cookie,就是会输出用户的密码,我们就可以进行登录账户
说明在Low级别的攻击中,该账户没有进行任何防御
2.反射型XSS(medium级别)
第一步、修改攻击级别为medium
第二步、进行脚本注入攻击
在输入框中输入:
<script>alert(document.cookie)</script>
我们发现在输入框下放进行了输出,说明在medium级别中,对敏感的JS脚本进行了过滤或者转义
分析源代码,我们发现代码$name = str_replace( '<script>', '',$_GET[ 'name’] ) ,使用str_replace函数把提交内容中的<script>替换了空值
在PHP中,我们学习过格式严格区分大小写,而该函数只匹配小写的script,并没有匹配大写字母,我们尝试将script替换成大写,<SCRIPT>alert(document.cookie)</SCRIPT>,在执行这条脚本,我们成功拿到用户的cookie值
3.XSS存储型(low级别)
第一步、选择XSS存储攻击,设置攻击级别为低(low),此页面是一个留言板,随意输入内容,可以直接显示在当前页面。
第二步、进行脚本注入攻击
在输入框中,我们先随意输入,然后执行该脚本攻击
<script>alert(document.cookie)</script>
输入脚本攻击语句之后,我们成功拿到cookie值,说明在低级别中,没有进行任何防护。
4.XSS存储型(medium级别)
第一步、进入靶场,修改攻击级别
第二步、进行脚本攻击
在输入框进行测试,测试在低级别的脚本攻击
<script>alert(document.cookie)</script>
查看源代码,进行分析 ,我们发现在源代码中使用了htmlspecialchars函数。在xss输入框进行脚本攻击已经不可以实现。
我们发现在name提示框中只是进行简单的小写替换,我们可以尝试替换成大写的,在此进行脚本攻击。
<SCRIPT>alert(document.cookie)</SCRIPT>
但是在name框中进行了字符限制,在这里只进行了前端页面的设置,我们通过开启代理进行绕过,在kali环境中,我们可以使用burpsuite进行绕过。
5.DOMXSS(low级别)
第一步、进行选择DOMxss靶场,选择攻击级别低
第二步、进行脚本攻击
在页面进行右键选择,查看源代码,发现选择框的内容使用了document.write的方式是输出,说明XSS为DOM类型。
我们可以尝试直接在URL进行脚本攻击
<script>alert(document.cookie)</script>
XSS的DOM的跨站脚本攻击(medium),可以参考以上的方式进行爆破。