💕💕💕 博主昵称:摆烂阳💕💕💕
🥰博主主页跳转链接
👩💻博主研究方向:web渗透测试 、python编程
📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导
————————————————
目录
一、原理
恶意攻击者在web页面中会插入一些恶意的javascript代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。
二、出现的原因
程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害,和sql注入类似,但是sql注入是在后端运行,而XSS是在前端运行
三、xss的分类
1、反射性
简介:
反射型xss攻击( Reflected XSS)又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。
插入代码 -> 执行到后端 - > 后端发送到前端 -> 浏览器解析
2、存储型XSS 或持久型 XSS(高危)
特征:
存储型XSS是指应用程序直接将攻击者提交的恶意代码存储到服务端保存,然后永久显示在其他用户的页面上。
插入代码 - > 执行到后端 -> 存储到数据库 - > 调用数据 -> 后端发送到前端 -> 浏览器解析
可能出现的位置
1、用户注册
2、留言板
3、上传文件的文件名处
4、管理员可见的报错信息
5、在线聊天框
6、客服
7、问题反馈区
8、邮件信箱
理论上见框就插
3、DOM XSS
简介:
通过JavaScript,可以重构整个HTML文档,就是说可以添加,移除等等,对页面的某个东西进行操作时,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口就是DOM,所以在DOM型的xss漏洞利用中,DOM可以看成是一个访问HTML的标准程序接口。
特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作!)
插入代码 - > 也可能会发送后端 -> 返回响应 -> js代码处理 -> 浏览器解析
四、xss的检测方法
1、工具扫描
可以使用APPscan、AWVS等工具进行扫描
2、手工测试
Burpsuite、firefox(hackbar)、XSSER XSSF
使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。
(1)在目标站点上找到输入点,比如查询接口,留言板等;
(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;
(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
五、xss的危害
1、首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。
2、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
3、“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。
4、挂马(水坑攻击)
5、有局限性的键盘记录
别人在你的网站插入一张照片或者一直有弹窗对自己的影响有多大是可想而知的
六、xss的防范手法
**XSS防御的总体思路是:对输入进行
过滤
,对输出进行
编码
**
过滤:
根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义:
所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义()
1、用户注册
2、留言板
3、上传文件的文件名处
4、管理员可见的报错信息
5、在线聊天框
6、客服
7、问题反馈区
8、邮件信箱
理论上,见框就插。
七、JavaScript的使用
1、语法格式
<script>[Javascript代码]</script>
例如:
<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body><script type="text/javascript">alert('第一个javascript程序');</script></body></html>
1、xss常用的js标签
alert
alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window.location
window.location对象用于获得当前页面的地址(URL) ,并把浏览器重定向到新的页面
ocation.href
返回当前显示的文档的完整URL
onload
一张页面或一幅图像完成加载
onerror
在加载文档或图像时发生错误
onchange
HTML 元素改变
onclick
用户点击 HTML 元素
onmouseover
鼠标指针移动到指定的元素上时发生
onmouseout
用户从一个 HTML 元素上移开鼠标时发生
onkeydown
用户按下键盘按键
八、靶场演示
1、dedecms系统
首先在存在注入的地方输入payload
后台管理员查看信息
xss平台成功获取信息
2、xss订单系统
首先在订单页面中找到没有限制的输入点(具体要求)设置payload
后台管理员访问订单信息
Xss平台成功获取信息
九、xss的修复建议
1.在cookie中设置了HttpOnly属性,那么通过JavaScript脚本将无法读取到cookie信息,这样能一定程度上防止XSS攻击。
2.假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的cookie中的变量,HTTP请求头部中的变量等。
3.不仅验证数据的类型,还要验证其格式、长度、范围和内容
4.过滤“<” 、“>” 将用户输入放入引号间,基本实现数据与代码隔离;过滤双引号防止用户跨越许可的标记,添加自定义标记;过滤TAB和空格,防止关键字被拆分;过滤script关键字;过滤&#,防止HTML属性绕过检查。在客户端和服务器端同时做数据的验证与过滤。
5.对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
本章小结
XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。换句话说,JavaScript能做到什么效果,XSS的胃里就有多大。这完全不是危言耸听。javascript可以用来获取用户的cookie,弹出窗口,那么存在XSS漏洞的网站,XSS就可以用来盗取用户Cookie,废掉页面,导航到恶意网站!更高端的XSS代码完全可以进行监控你的键盘操作,模仿Windows注销界面,诱导你输入开机密码!而攻击者需要做的仅仅是向你的代码中注入Javascript代码!
本文是本人以前笔记,博主主页跳转链接如果有哪里不对的话欢迎各位大佬指出问题,本人也是初学python,希望可以和各位朋友一起学习进步。
点击跳转到博主python专栏:
如果有喜欢web安全的朋友,请在web渗透专栏中进行查看,点击跳转到博主web渗透专栏
版权归原作者 摆烂阳 所有, 如有侵权,请联系我们删除。