> web安全 >

xss攻击介绍

来源:网络 文章列表 2019-06-28 8
xss攻击可以分成两种类型:1非持久型攻击2持久型攻击。xss攻击类型还可以这样成3类。反射型:经过后端,不经过数据库;存储型:经过后端,经过数据库;DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。

网络攻击的种类很多,比如常见的有cc攻击,mysql宽字节注入,xss跨站攻击等等,今天我们的主体就是xss跨站脚本攻击介绍!

 

XSS跨站脚本攻击

一、什么是XSS?

百度百科的解释: XSS又叫CSS  (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。

 

二、XSS分类

xss攻击可以分成两种类型:

1、非持久型攻击
2、持久型攻击

非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。

xss攻击类型还可以这样成3类

反射型:经过后端,不经过数据库

存储型:经过后端,经过数据库

DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。

 

三、xss攻击原理

1)xss反射型攻击

新建一个xss.php文件并加入以下代码:

\\XSS反射演示
<form action="" method="get">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss = @$_GET['xss'];
if($xss!==null){
    echo $xss;
}

这段代码中首先包含一个表单,用于向页面自己发送 GET 请求,带一个名为xss的参数。 然后 PHP 会读取该参数,如果不为空,则直接打印出来,这里不存在任何过滤。也就是说,如果xss中存在 HTML 结构性的内容,打印之后会直接解释为 HTML 元素。

部署好这个文件,访问http://localhost/xss.php,直接输入一个js代码,比如<script>alert('hack')</script>,


之后点击test:

我们输入的HTML代码被执行了。用Firebug查看,我们输出的内容直接插入到了页面中,解释为<script>标签。

反射型 XSS 的数据流向是:浏览器 -> 后端 -> 浏览器。

 

2)存储型

把xss.php内容改为(同时数据库中需要配置相应的表):

\\存储XSS演示
<form action="" method="post">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss=@$_POST['xss'];
mysql_connect("localhost","root","123");
mysql_select_db("xss");
if($xss!==null){
    $sql="insert into temp(id,payload) values('1','$xss')";
    $result=mysql_query($sql);
    echo $result;
}

用户输入的内容还是没有过滤,但是不直接显示在页面中,而是插入到了数据库。

新建show.php,内容为:

mysql_connect("localhost","root","root");
mysql_select_db("xss");
$sql="select payload from temp where id=1";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
   echo $row['payload'];
}

该代码从数据库读取了之前插入的内容,并将其显示出来。

先创建一个数据库xss,创建temp表

然后访问xss.php,像之前一样输入 HTML 代码

点击test,点击之后却发现没有任何动静,但事实上,我们的数据已经插入到了数据库中。

当我们访问show.php查询这个值的时候,代码就会被执行。

存储型 XSS 的执行位置通常不同于输入位置。我们可以看出,存储行 XSS 的数据流向是:

浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器。

 

3)dom-xss

把xss.php内容改为

<?php
error_reporting(0); //禁用错误报告
$name = $_GET["name"];
?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript">
var text = document.getElementById("text"); 
var print = document.getElementById("print");
print.innerHTML = text.value; // 获取 text的值,并且输出在print内。这里是导致xss的主要原因。
</script>

DOM-XSS 的数据流向是:URL-->浏览器 

总结: 在易用上,存储型XSS > DOM - XSS > 反射型 XSS。

注:反射型xss和dom-xss都需要在url加入js代码才能够触发。

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论

友情链接