第十篇 XSS漏洞学习和使用技巧
XSS漏洞
XSS攻击全称为跨站脚本攻击,允许恶意用户将将代码植入到web网站里,供其他用户访问,当其他用户访问到恶意代码的网友就会产生xss攻击
危害
- 盗取用户账号,比如普通用户账号、管理员账号、银行用户账号等
- 控制企业数据,包括读取、篡改、添加、删除企业数据,盗取企业核心数据
- 非法转账
- 强制发送电子邮件
- 网站挂马
- 控制受害者机器向其他网站发起攻击
漏洞类型
- 反射型
非持久化,需要用户去点击链接才会触发xss代码
正常访问页面:http://www.xss-labs.com/level1.php?name=admin
进行xss注入:http://www.xss-labs.com/level1.php?name=
- 存储型
持久化,代码是存储在服务器中,比如个人信息或发表文章等地方,加入代码,如果过滤不严,那么这些代码将存储到服务器中,用户只要访问该页面就会触发代码执行
- Dom型
是一个平台和语言都中立的接口,可以是程序和脚本能够动态访问和更新文档的内容、结构以及样式,是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞
常用注入关键词
script、on、src、data、href、"
靶场练习
靶场地址:https://github.com/do0dl3/xss-labs
leve2: "> 括号闭合
输入:http://www.xss-labs.com/level2.php?keyword= 发现页面正常显示
增加 "> 作为闭合
level3:input-onclick,onfocus事件触发
正常情况:
构建onfocus事件触发
http://www.xss-labs.com/level3.php?keyword=' onfocus=javascript:alert('xss') >
在使用onfocus的时候,因为input需要重新获取焦点,才能触发弹窗
同时,我们查看源码,也发现<,>字符被htmlspecialchars函数进行替换了
level4:事件触发弹窗
测试注入,正常显示
仔细观察发现输入框对<,>进行了删除,可以尝试用事件触发的方式
level5: a标签注入
尝试注入
从输入框中发现script变成了scr_ipt,尝试使用事件注入
发现也对onfocus进行了转换,通过构建a标签来执行:http://www.xss-labs.com/level5.php?keyword="> xss,需要对链接进行点击才能触发弹窗
level6: 大小写绕过
经过测试,发现都对script和事件触发都做了和level5一样的处理,尝试使用a标签的方式,发现也做了处理
尝试进行大小写绕过:http://www.xss-labs.com/level6.php?keyword="> xss
level7: 双写绕过
发现都对script和href进行了替换,同时尝试大小写绕过也一样被替换
构造双写:http://www.xss-labs.com/level7.php?keyword=" oonnfocus=javasscriptcript:alert('xss') >
level8: html编码绕过
常见编码
1. URL编码:将不安全的字符使用URL方式传输; 比如%20(空格)
2. html编码:防止特殊字符比如<>对页面造成影响,一般以&开头,分号结果.
分为十进制编码和十六进制编码
3. javascript编码: 可以识别8进制/16进制和Unicode编码
分为:三个八进制数字、两个十六进制数字、四个十六进制数字,如果不够个数,前面补0
4. base64编码: 一般需要配合data协议使用
尝试大小写,双写,发现都会被替换成下划线
尝试对html进行实体编码,找到一个比较好的工具:https://www.qqxiuzi.cn/bianma/zifushiti.php
分析页面,直接将input的输入填充到href里面,所以我们只需要对javascript进行实体编码就可以了:javascript:alert('xss')
level9: http绕过
测试发现提示链接不合法,应该是对链接做了校验
在添加http之后,发现链接添加成功,同时也对常用注入关键进行了替换
同时也发现,校验判断的是http:// 是否存在,所以可以采用level8的方式,进行编码,并将http:// 放到后面, 输入
javascript:alert('xss') // http://
level10: 利用隐藏标签
尝试攻击:http://www.xss-labs.com/level10.php?keyword=
发现页面正常返回,但是没有出现弹框,分析控制台查看source,发现对<,>做了替换
发现有三个隐藏的input标签,尝试对其进行赋值:http://www.xss-labs.com/level10.php?keyword=keyword&t_link=t_link&t_history=t_history&t_sort=t_sort, 发现t_sort赋值成功了
将t_sort值改为:" type="text" onmouseover="alert('xss'),当鼠标移动到name='t_sort'的时候,就会发生弹窗
level11: 还原双引号
输入:http://www.xss-labs.com/level11.php?keyword=,
同样发现<,>也是被替换了,尝试和level10一样发起攻击,发现有四个隐藏标签:http://www.xss-labs.com/level11.php?keyword=keyword&t_link=t_link&t_history=t_history&t_sort=t_sort&t_ref=t_ref, 同样也只是有t_sort进行了赋值
在修改:t_sort=" type="text" onmouseover="alert('xss') 发现页面并没有发生任何变化,查看源码发现 " 被替换了
直接在通过控制台对将替换过的双引号进行还原,发现成功攻击了
level12: ua注入
和上面两关一样,也是<,>被替换
也是有4个隐藏标签,但是只有t_sort赋值成功,同样对t_sort进行值修改:" type="text" onmouseover="alert('xss') ,发现引号也是被替换了
采用level11的方式,发现也是可以攻击的
发现t_ua这个标签,尝试修改这个值,看是否存在攻击点:" type="text" onmouseover="alert('xss')"
发现也是可以实现攻击的
level13: cookie攻击
进行对cookie攻击:
level14: iframe攻击
发现进入level14的页面,发现页面加载出来了一个新的页面,应该是iframe导致的
ifame攻击主要用于嵌入第三方钓鱼网站
level15: src变量攻击
level15的页面十分干净,发现从level14跳过来自带了src变量:http://www.xss-labs.com/level15.php?src=1.gif
可以利用level1.php的直接攻击:src="level1.php?name="
level16: 回车符%0a攻击
输入:http://www.xss-labs.com/level16.php?keyword=