XSS简介
XSS即跨站脚本攻击,通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS分类
常见的 XSS 攻击有三种:
- 反射型
- 存储型
- DOM-based 型
其中反射型、DOM-based 型可以归类为非持久型 XSS 攻击,存储型归类为持久型 XSS 攻击。
1、反射型
反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。
对于访问者而言是一次性的,具体表现在我们把我们的恶意脚本通过 URL 的方式传递给了服务器,而服务器则只是不加处理的把脚本“反射”回访问者的浏览器而使访问者的浏览器执行相应的脚本。反射型 XSS 的触发有后端的参与,要避免反射性 XSS,必须需要后端的协调,后端解析前端的数据时首先做相关的字串检测和转义处理。
此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
2、存储型
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。
存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
3、DOM-based 型
客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。
DoraBox平台XSS实战与分析
1、反射型XSS
分析:首先我们来看反射型XSS,进入reflect_xss.php中:
从下面的代码中,我们可以看到这里首先通过一个表单获取用户的输入,之后判断输入是否为空,如果不为空则通过回调函数调用vardump函数将输入的结果输出,在整个过程中未经过任何过滤处理,类似于怎么输入就怎么样输出一样~
利用:简单测试,弹个框:
payload:<svg/οnlοad=alert('你好帅')>
当然,反射型XSS的利用不仅仅是弹一个框,反射型XSS也可以用户窃取用户的cookie,因为这个平台没有用户登录,所以就不窃取cookie了,但是我们这里可以使用xsspt平台做一个简单的测试:
首先生成配置代码:
在最下面有使用方法:
之后插入以上payload:
成功截取到网页:
2、存储型XSS
存储型xss的数据流为:浏览器——》后端——》数据库——》后端——》浏览器
分析:首先,查看stored_xss.php文件分析一下~
用户输入的数据未经过滤直接拼接并且调用回调函数采用追加的方式写入到当前页面中:
利用:
之后查看源代码你可以发现好多“你好帅”呀,不过老哥也是真的帅~,哈哈哈
3、DOM型XSS
DOM型xss数据流向:浏览器——》前端
分析:
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
- (^| )代表开始
- ( |$)代表结束
以&或者$结尾的字符串,这个正则是寻找&+url参数名字=值+&,&可以不存在。
window.location.search.substr(1).match(reg);
- location是包含了相关的url的信息,它是windown的一部分。
- search是一个可以查询的属性,可以查询?之后的部分
- substr(1)是为了去掉第一个?
- match()是你要匹配的部分 后面可以是正则表达式。
- return unescpe(r[2]) 返回的值 一个数组。
这里是开始匹配,找到了返回对应url值,没找到返回null,后面的document.write 实际上就是DOM的写方法,把输入的内容写出来~
利用: