WEB漏洞—XSS跨站之原理分类及攻击手法

WEB漏洞—XSS跨站之原理分类及攻击手法
Yatming的博客WEB漏洞—XSS跨站之原理分类及攻击手法
跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意javaScript代码,当用户浏览该页之时,嵌入其中Web里面的javaScript代码会被执行,从而达到恶意攻击用户的目的
xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制。
攻击者往Web页面里插入恶意html标签或者javascript代码。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。
总结:前端用户提交的脚本代码被其他用户浏览器执行产生预期外的执行后果。(让自己提交的前端脚本代码被别人运行)。
缺陷
1、耗时间
2、有一定几率不成功
3、没有相应的软件来完成自动化攻击
4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底
5、是一种被动的攻击手法
6、对website有http-only、crossdomian.xml没有用
产生层面
①产生层面一般都是在前端,JavaScript代码能干什么,执行之后就会达到相应的效果。
函数类
①比如说php中的echo print这些脚本的输出函数。
危害影响
①通过JavaScript代码来形成威胁。
浏览器内核版本等
利用这个漏洞需要浏览器版本和内核没有过滤XSS攻击
三类:反射型、存储型、DOM型
反射性XSS:一次性XSS,与服务器交互
具体过程:发包 x=xiaodi => x.php => 回包(可以看到这个虽然和服务器进行了交互,但是并不是持久的,也就是说,需要特定的条件(比如钓鱼诱导别人连接),触发才会执行)
存储型XSS:持久性XSS,与服务器交互
具体过程:发包 x=xiaodi => x.php => 写到数据库某个表 => x.php => 回显(存储型和反射型的区别就是,存储型多了一个写入到数据库中的操作,这个就说明,这种方法是持久的,只要成功,一劳永逸)
DOM型XSS:一次性XSS,不与服务器交互
具体过程:发包 x=xiaodi = > 本地浏览器静态前端代码 = > x.php(这种就是针对前端的代码进行操作的,这种方式必须是开发者把执行动作交给了前端代码来执行,有点类似于WAF绕过的章节将过滤代码写在了前端的js当中,如果没有这个条件,鸡肋。。。。)
随意留言板搭建:
安装:
直接访问留言板首页会自动进入安装页面
管理员默认帐号admin 密码 admin888
后台地址://你的域名/index.php?c=adminlogin
网站路径不要有中文,最好只套一个文件夹
0x01:反射型XSS的攻击原理
反射型XSS,是最常用,使用最广的一种方式。它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
既然是需要用户点击才能触发的跨站,那么这就要考验你的忽悠水平了,就像前段时间论坛出现的XSS攻击,就是通过转账,然后被攻击者查看消息从而触发的一种反射型XSS攻击
再如:
http://searchb.dangdang.com/?key=f',true,1);alert(1);//
这个经常逛乌云的应该都不陌生,这就是一个典型的反射型XSS,需要诱使用户去点击该链接,xss代码并不存储在服务端。所以攻击并不能持续。
常用测试方法:
对整个输入(特别强调的是,整个HTTP请求都是输入,数据库取来的数据其实也是输入。HTTP请求包括GET、POST参数,COOKIE,URL,头部的REFERER等等)中每个地方都可以如下操作,
\1. 自己构造一个唯一的串,例如:myxsstestxxxx
\2. 将某个输入项(比如某个参数)替换为上面的串
\3. 查看HTTP相应中是否有这个串,并记录下来
\4. 根据HTML上下文决定,用哪种类型串来尝试,尝试攻击串,然后重新提交请求
\5. 如果能够找到相应的攻击串说明漏洞是存在的 这里的关键在于第四步,因为服务器端可能会做一些限制,比如encode或者长度限制,测试的时候需要想办法看看是否能绕过限制。
0x02:存储型XSS的攻击原理
存储型就是攻击脚本被存储到了数据库或者文件中,服务器端(可能是别的应用或者别的页面)在读取了存储的内容后回显了,就是存储型。这种情况用户可能直接打开正常的页面就会看到被注入了
原理其实也很简单
XSS代码被提交给网站–>网站把XSS代码存储进数据库—>当该页面再次被请求时,服务器发送已经被植入XSS代码的数据给客户端—>客户端执行XSS代码
比较常见的例子是在留言板上插入XSS代码,前提当然是留言内容过滤不善
想内容中添加[/code][/code]
这样就会弹出对话框,当然只要是可以添加内容的地方,你都可以试试XSS,比如说QQ空间的装扮里面,有一个自定义模块,你可以选择图片,然后添加如下代码
javascript:alert(‘XSS’)”
当然,其可以执行的前提是服务端代码是这样写的
A=get[a]
利用方法还有很多,比如现在兴起的XSS平台,新建一个项目,你就可以做很多事情
0x03:XSS BASED DOM
DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。
DOM—based XSS攻击源于DOM相关的属性和方法,被插入用于XSS攻击的脚本。一个典型的例子如下:
HTTP请求http://www.Xss.com/hello.html?name=test使用以下的脚本打印出登录用户test的名字,即
1 | <SCRIPT> |
0x04: XSS的防范办法
上面简单说了一下各种XSS的原理,以及最简单的利用方法,当然一些高级的XSS利用技巧,这里不会涉及,授人以鱼不如授人以渔嘛。还靠各位去琢磨了。下面我们来简单说一下XSS的防范。
现在的XSS如此流行,原因何在。我想大家应该都知道,就是在输入的时候没有做严格的过滤,而在输出的时候,也没有进行检查,转义,替换等
所以防范的方法就是,不信任任何用户的输入,对每个用户的输入都做严格检查,过滤,在输出的时候,对某些特殊字符进行转义,替换等
随意留言板测试
尝试用xss,发现失败,用网上给的绕过文档,《XSS绕过技术》
只要刷新页面就有这个弹窗,成功!!!
上面是一个普通的弹窗,那么如果我改成一个恶意的代码呢?说明一下XSS平台。
如上图所示,创建成功!
如果是获取cookie,点击那个默认模块就行,下一步即可
复制这个代码,插入
由于这个源码的问题,有拦截,所以我这里用那个封神台的一个靶场演示吧
插入恶意代码
可以看到已经成功了
什么是cookie
Cookie 并不是它的原意“甜饼”的意思, 而是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能, 而这一切都不必使用复杂的CGI等程序 。
举例来说, 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存)
cookie和session理论:
—Cookie:用户凭据:通过凭据可以判断对方身份信息,存储本地浏览器,存活时间较长,一般为小中型网站。(1.对方有漏洞2.对方浏览器不会阻止脚本的运行3.对方浏览器要保存cookie 4.对方管理员要触发XSS)
—session 会话,存储于服务器,存活时间较短,一般为大型网站。
涉及资源
1 | https://xss8.cc/xss.php?do=login |