Ax_ax
- 关注
什么是XSS/XSS原理:
攻击者嵌入恶意脚本代码到用户会访问到的页面中,用户访问该页面的时候,就引起恶意脚本代码的执行,从而达到恶意攻击用户的目的。攻击者可以使用户在浏览器中执行其预定义的恶意脚本,变量接受数据的时候,数据可以写成js脚本代码,进行回显操作。
本质
属于前端漏洞,产生在浏览器和js代码中的漏洞
XSS类型
反射型XSS(非持续型XSS),储存型XSS(持续型XSS),DOM XSS
具体区别
反射型:
数据提交过去时,会在代码执行之后直接反馈回来
发包x=zzx=>x.php=>回包
存储型:
数据提交过去时,会在代码执行之后储存到数据库的某个表里,然后反馈回来
发包x=zzx=>x.php=>写到数据库某个表=>x.php=>回显
DOM型:
发包x=zzx=>本地浏览器静态前端代码=>x.php
反射型和储存型属于后端语言进行数据处理,而DOM型是用js代码进行处理
三者原理
反射型XSS:应用或API没有对用户输入数据进行验证或没进行转义然后作为HTML的输出的一部分,能够使得攻击者在受害者的浏览器上执行任意HTML和JavaScript。
存储型XSS:应用或API存储未格式化的用户输入,且该输入之后会被其他用户或管理员浏览到。
DOM XSS:动态包含攻击者可控制数据到页面中的JavaScript框架, 单页应用,API易受DOM XSS。
涉及函数类:常见的输出类函数
如何检测
方法一: 查看代码,查找关键的变量, 客户端将数据传送给Web 服务端一般通过三种方式 Querystring, Form表单,以及cookie. 例如在ASP的程序中,通过Request对象获取客户端的变量。 假如变量没有经过htmlEncode处理, 那么这个变量就存在一个XSS漏洞
方法二:xss跨站漏洞测试语句, 在网页中的Textbox或者其他能输入数据的地方,输入测试语句, 看能不能弹出对话框,能弹出的话说明存在XSS漏洞, 在URL中查看有那些变量通过URL把值传给Web服务器, 把这些变量的值退换成测试语句。 然后看是否能执行
方法三: 自动化测试XSS漏洞
可能存在XSS漏洞点
用户能够输入提交数据的地方,文本框,url,请求头等等
危害
如劫持用户会话,插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫,甚至破坏网站、修改路由器配置信息等。
XSS实质上就是JS脚本,任何JS脚本能实现的功能,XSS也能实现能做到的Cookie劫持、构造GET和POST请求、XSS钓鱼、识别用户浏览器、识别用户安装的软件等
防范修复
前端采用大型框架Angular,Vue,React等等。
用session代替cookie。
对于用户输入的数据要严格过滤
写入数据库的数据,一定要保证合理过滤。
对于所有输出的地方,一定要做好过滤工作,比如采用模版渲染等等。
使用Token
使用HttpOnly
什么是HttpOnly
如果在cookie中设置了HTTPonly属性,那么通过js脚本将无法读取到cookie信息,这样能有效防止XSS攻击。
绕过httponly
浏览器未保存账号密码:需要XSS产生登录地址,利用表单劫持
浏览器保存了账号密码:产生后台的XSS,储存型XSS,如留言等,利用浏览器读取账号密码
如何绕过防护
修改编码格式
加密解密算法
结合其他漏洞绕过
大小写
onerror函数
配合平台,例如xssfuzzer.com生成语句
工具:Xwaf,XSStrike
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)