页面直接弹出了“1“”的窗口,可以看到,我们插入的语句已经被页面给执行了。这就是最基本的反射型的XSS漏洞,这种漏洞数据流向是:前端–>后端–>前端。
3.XSS危害
XSS跨脚本攻击主要的危害如下:
XSS分类
XSS有部分书籍将它划分为两类——反射型和持久型。
反射型
也称为非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广泛的一种,主要用于恶意脚本附加到URL地址的参数中。一般出现在输入框、URL参数处。
持久型
持久型跨站脚本也可以说是存储型跨站脚本,比反射型XSS更具威胁性,并且可能影响到Web服务器自身安全。一般出现在网站的留言、评论、博客日志等于用户交互处。而另一部分书籍将XSS分为三种类型——反射型、存储型以及DOM型,这也是本篇文章重点讲解的分类方式。
1.反射型
反射型又称为非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广泛的一种,主要用于恶意脚本附加到URL地址的参数中。它需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面、输入框、URL参数处。反射型XSS大多数是用来盗取用户的Cookie信息。其攻击流程如下图所示:(该图片源自谢公子文章)
下图是专门训练一些WEB漏洞的练习页面,我们可以输入自己的名字,输入之后会把我们的名字显示出来。例如我们输入了一个“张三”,这个时候弹出来了一个“123”,在那边显示了一个张三,但是script标签没有出来,因为这个标签被执行了。
示例:
这就是最基本的反射型的XSS漏洞,这种漏洞数据流向是:前端–>后端–>前端。其代码案例如前面所述:
//前端页面 index.html
XSS测试1 <body>
//后端页面 xss.php
<?php
$name = $_POST['name'];
echo $name;
?>
当用户提交数据,输入 < script>alert(‘hack’)< /script> 代码会提交给后台,并弹出hack页面,这就表示我们的恶意语句被页面执行了。
2.存储型
存储型XSS又称为持久型跨站脚本,比反射型XSS更具威胁性,并且可能影响到Web服务器自身安全。它的代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。存储型XSS一般出现在、评论、博客日志等于用户交互处,这种XSS比较危险,容易造成蠕虫、盗窃cookie等。其攻击流程如下图所示:(该图片源自谢公子文章)
在存储型XSS中,可以看到这个URL上面并没有代码,但是依然弹出了一个“1”。它是发现个人资料页的时候有一个XSS漏洞,在个性签名的位置填入了一个XSS标签,弹出了一个“1”,把这个地址发给别人,别人看到这个地址并没有什么代码以为这个页面是安全的,结果一打开就插入了这个XSS代码。
存储型XSS的攻击危害比较大,因为它的页面当中是看不到这个Script的代码,别人防不胜防。只要管理员没有发现,下一个用户或者下一个用户一直接发它,而反射型需要用户主动点击的。
示例:
假设现在存在一个 index2.html 代码,用户提交ID和用户名并存储至数据库中。
XSS测试2 <body>
欢迎大家阅读CSDN Eastmount的博客,一起进步,一起加油喔!
后台的 xss2.php 将执行数据库存储操作,本地MySQL数据库创建一个名为 XSSDB的数据库,并插入一张XSS表,如下图所示。
xss2.php代码如下所示:
<?php
//获取提交的表单值
$id=$_POST["id"];
$name=$_POST["name"];
echo $id,'
';echo $name,'
';
//连接数据库
//因为PHP版本是7.3的,因此用mysqli_connect()而不是用mysql_connect()
$con = mysqli_connect("localhost","root","123456", "xssdb");
if (!$con)
{
die('Could not connect database: ' . mysqli_error());
}
//插入数据表
$sql = "insert into xss (id,name) values ('{$id}','{$name}');";
echo $sql;
$result