1、13.XSS跨站脚本漏洞 SANGFOR安全服务团队 目录 XSS跨站脚本概念 XSS跨站脚本分类 检测XSS漏洞 漏洞利用 漏洞防御 XSS跨站脚本概念 什么是XSS跨站脚本漏洞? XSS跨站脚本(Cross-Site Scripting,XSS)自1996年诞生以来,如今已经历十多年的演化。由 于和另一种网页技术-层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故 把原本的CSS简称为XSS。在各种WEB应用安全漏洞中,XSS跨站脚本攻击漏洞一直被OWASP( Open Web Application Security Project)组织评为十
2、大应用安全中的其中之一。【参考OWASP TOP 10:2007年A2 / 2010年A2 / 2013年A3】 XSS最大的特点就是能注入恶意的HTML/JavaScript代码到用户浏览的网页上,是因WEB应用程 序对用户输入过滤不足而产生的,当用户浏览这些网页时,就会执行其中的恶意代码。由于HTML代 码和客户端JavaScript脚本能在受害者主机上的浏览器任意执行,这样等同于完全控制了WEB客户端 的逻辑,在这个基础上,黑客可以轻易地发起Cookie窃取,会话劫持,钓鱼欺骗等各种各样的攻击。 通常情况下,我们既可以把XSS理解成一种WEB应用安全漏洞,也可以理解成一种攻击手段。 XS
3、S攻击流程 1. 正常服务器信息 2. 服务器存储恶意代码 3. 用户浏览网页 4. 服务器将恶意代码返回给用户 5. 客户端浏览器执行恶意代码 攻击者 普通用户客户端 Web服务器 在论坛发帖子: 免费获取Q币! 恶意代码 重要通知 Re:沙发! Re:地板? Re:地下室沙发 Re:地下室地板-_-! Re:免费获取Q币! 内容: 恶意代码 Re:谁又发垃圾广告啦? 2 1 34 5 简单的例子 XSS TEST 搜索关键词 : 恶意脚本形式 利用XSS弹警告框: alert(xss) 获取cookie值: alert(document.cookie) 嵌入其他网站: XSS输入也可能是H
4、TML代码段,如使网页不停刷新: XSS危害简单概括 网络钓鱼,包括盗取各类用户账号 窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作 劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账,强制发表日志,发送 电子邮件等 强制弹出广告页面,刷流量等 网页挂马 进行恶意操作,例如任意篡改页面信息,删除文章等 进行大量的客户端攻击,如DDOS攻击 获取客户端信息,例如用户的浏览历史,真实ip,开放端口等 控制受害者机器向其他网站发起攻击 结合其他漏洞进一步扩大攻击 11 提升用户权限,包括进一步渗透网站 12 传播XSS跨站脚本蠕虫等 13 。 XSS跨站脚
5、本分类 反射型XSS 反射型XSS 反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。当用户访问 一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据 发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。 例子: 在这段代码中,程序接收username值后再输出,如果提交xss1.php?username=test,那么程序将输 出test,如果攻击者输入username=alert(xss),将会造成反射型XSS漏洞。 反射型XSS 仅仅弹个框? 攻击场景: 假如 test1是网站 的用户,此时正在登录的状态中。 攻击者
6、发现 此段代码可以窃取用户的cookie。 攻击者将带有反射型XSS漏洞的URL通过站内信息发送给用户test1,使用各种诱导的方式让用户 test1去打开链接。 如果用户test1打开了带有XSS漏洞的URL,那么就会把自己的cookie发送到攻击者中。 攻击者接受到用户test1的会话cookie,就可以直接利用cookie以test1的身份登录 网站 中。 以上步骤,通过使用反射型XSS漏洞可以以test1的身份登录网站,这就是其危害。 存储型XSS 存储型XSS 存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本。允许用户存 储数据的WEB应用程序都可能会出现存储型X
7、SS漏洞,当攻击者提交一段XSS代码后,被 服务器端接收并存储,当再次访问页面时,这段XSS代码被程序读取响应给浏览器,造成 XSS跨站攻击,这就是存储型XSS。 在测试是否存在XSS时,首先要确定输入点与输出点,例如:我们要在留言内容上测 试XSS漏洞,首先就要去寻找留言内容输出(显示)的地方是在标签内还是标签属性内, 或者在其他地方,如果输出的数据在属性内,那么XSS是不会被执行的。 存储型XSS 攻击场景: 1. 在留言板处使用XSS代码。alert(document.cookie) 存储型XSS 攻击场景: 2. 重新加载留言处页面时,代码被执行。 DOM XSS DOM的全称为Doc
8、ument Object Model,即文档对象模型,DOM通常用于代表在 HTML、XHTML和XML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档 的内容、结构和样式。 通过JavaScript可以重构整个HTML页面,而要重构页面或者页面中的某个对象, JavaScript就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化 表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每个成 分都是一个节点。 DOM XSS DOM的规定如下: 整个文档是一个文档节点 每个HTML标签是一个元素节点 包含在HTML元素中的文本是文本节点 每一个
9、HTML属性是一个属性节点 节点与节点之间都有等级关系 DOM XSS 传统类型的XSS漏洞(反射型或存储型)一般出现在服务器端代码中,而DOM XSS 是基于DOM文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。 DOM XSS取决于输出位置,并不取决于输出环境,因此也可以说DOM XSS既有可 能是反射型的,也有可能是存储型的,简单去理解就是因为他输出点在DOM。 DOM XSS var text = document.getElementById(“text“); var print = document.getElementById(“print“); print.inn
10、erHTML = text.value; 检测XSS漏洞 检测XSS漏洞 手工检测 使用手工检测WEB应用程序是否存在XSS漏洞时,最重要的是考虑哪里有输入、输入的数 据在什么地方输出。 1.可得知输出的位置 输入一些敏感字符,例如”、(、)等,在提交请求后查看HTML源代码,看这 些输入的字符是否被转义。 2.无法得知输出位置 很多WEB应用程序源代码是不对外公开的,这时在测试XSS时就有可能无法得知输入数据 到底在哪里显示。比如,测试留言本,留言之后要经过审核才显示,这时候就无法得知输 入的数据在后台管理页面是何种状态。 通常可以采用”/XSS来测试。 检测XSS漏洞 全自动检测 Apps
11、can AWVS BurpSuite 检测XSS漏洞 注意: 思路为,提交正常数据,使用firebug,chrome的调试等工具跟踪提交数据的标签,如 果显示区域不在HTML属性内,则可以直接使用XSS代码注入。如果说不能得知内容输出 的具体位置,则可以使用模糊测试。 存储型XSS也好,反射型XSS也罢。xss的本质问题就是让对方浏览器执行你插 入的JavaScript! 漏洞利用 漏洞利用 窃取Cookie 演示。 Cookie替换工具 Chrome CookieHacker Firefox TamperData Burpsuite 漏洞利用 XSS盲打 平台:xssplatform、xssing等。 姓名: 建议: 前台 (攻击者可见) 后台 (管理员可见) 姓名建议 test 软件标题字太小 test软件标题字太小 攻击者最初是看不见后台是什么样子的!故而叫盲打! 方法:不管3721,见到框框就输入代码! 漏洞防御 漏洞防御 输入与输出中的过滤 黑名单与白名单 WEB安全编码规范 HttpOnly cookie 思考 要点: 1.各种脚本代码,你可以不会写,但至少要看得懂! 参考( 2.XSS漏洞的检测方式! 参考(http:/drops.wooyun.org/tips/1955)