当前位置: 代码迷 >> 综合 >> 简单易懂的XSS(跨站脚本攻击)
  详细解决方案

简单易懂的XSS(跨站脚本攻击)

热度:23   发布时间:2024-03-10 01:02:40.0

跨站脚本(简称为XSS或跨站脚本或跨站脚本攻击)是针对Web应用程序的安全漏洞攻击,允许用户插入恶意的脚本,从而当用户浏览网页时,插入的脚本就会执行。从而达到攻击的目的。

1.反射型XSS

反射型XSS又叫非持久性XSS,反射型XSS注入的恶意代码不会保存在服务器端,需要欺骗用户去点击恶意链接才能攻击成功。一般通过XSS来窃取用户的cookie。
反射型XSS攻击流程:
在这里插入图片描述

2.存储型XSS

存储型XSS又叫持久型XSS,攻击脚本会永久存储在目标服务器中。例如在个人信息或者留言板之类的地方插入恶意脚本,用户访问这些带有恶意脚本的页面时会触发恶意脚本中的代码。
存储型XSS攻击流程:
在这里插入图片描述

3.DOM型XSS

DOM型XSS也属于反射型XSS的一种,是通过修改页面的DOM节点形成的XSS。

DOM节点:
在这里插入图片描述
能触发DOM型XSS的属性

document.referer
window.name
location
innerHTML
document.write
eval

小结

在三种类型的XSS漏洞中,存储型的XSS危害最大。因为他存储在服务器端,所以不需要我们和被攻击者有任何接触,只要被攻击者访问了该页面就会遭受攻击。而反射型和DOM型的XSS则需要我们去诱使用户点击我们植入了恶意脚本的URL,比如利用社会工程学或者利用在其他网页挂马的方式。

反射型XSS

页面源码:

<div id="xssr_main"><p class="xssr_title">Which NBA player do you like?</p><form method="get"><input class="xssr_in" type="text" maxlength="20" name="message" /><input class="xssr_submit" type="submit" name="submit" value="submit" /></form><?php echo $html;?></div></div><!-- /.page-content --></div>
</div><!-- /.main-content --><?php
include_once $PIKA_ROOT_DIR.'footer.php';?>

这里有一个用户提交的页面,用户可以在此提交数据,数据提交之后会交给后台处理。但是站点在前端对输入的长度进行了限制,我们须在控制台上修改输入的长度。
在这里插入图片描述

之后,我们可以在输入框中提交数据: ,看看有什么反应。
在这里插入图片描述
在这里插入图片描述
页面直接弹出了hello的页面,可以看到我们插入的语句已经被页面给执行了。

存储型XSS

页面源码:

<div class="main-content"><div class="main-content-inner"><div class="breadcrumbs ace-save-state" id="breadcrumbs"><ul class="breadcrumb"><li><i class="ace-icon fa fa-home home-icon"></i><a href="xss.php">xss</a></li><li class="active">存储型xss</li></ul><!-- /.breadcrumb --><a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)"data-content="无用提示:这个留言板的框框是可以拉长和拉宽的,还行不,大兄弟!">点一下提示~</a></div><div class="page-content"><div id="xsss_main"><p class="xsss_title">我是一个留言板:</p><form method="post"><textarea class="xsss_in" name="message"></textarea><br /><input class="xsss_submit" type="submit" name="submit" value="submit" /></form><div id="show_message"><br /><br /><p class="line">留言列表:</p><?php echo $html;$query="select * from message";$result=execute($link, $query);while($data=mysqli_fetch_assoc($result)){
    echo "<p class='con'>{
      $data['content']}</p><a href='xss_stored.php?id={
      $data['id']}'>删除</a>";}echo $html;?></div></div></div><!-- /.page-content --></div>
</div><!-- /.main-content --><?php
include_once $PIKA_ROOT_DIR.'footer.php';
?>

这里有一个留言板提交的页面,数据提交给后端之后,后端会将数据存储在数据库中。然后当其他用户访问这个页面的留言时,后端调出该数据,显示给用户,XSS代码就被执行了。

我们在留言框中提交数据: 。
在这里插入图片描述
再刷新下查看反应。
在这里插入图片描述
这时恶意代码就插入到数据库中了。

DOM型XSS

<div class="main-content"><div class="main-content-inner"><div class="breadcrumbs ace-save-state" id="breadcrumbs"><ul class="breadcrumb"><li><i class="ace-icon fa fa-home home-icon"></i><a href="xss.php">xss</a></li><li class="active">DOM型xss</li></ul><!-- /.breadcrumb --><a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)"data-content="先到这里把什么是dom搞明白了在说http://www.w3school.com.cn/htmldom/">点一下提示~</a></div><div class="page-content"><div id="xssd_main"><script>function domxss(){
    var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";}//试试:'><img src="#" onmouseover="alert('xss')">//试试:' οnclick="alert('xss')">,闭合掉就行</script><!--<a href="" onclick=('xss')>--><input id="text" name="text" type="text"  value="" /><input id="button" type="button" value="click me!" onclick="domxss()" /><div id="dom"></div></div></div><!-- /.page-content --></div>
</div><!-- /.main-content --><?php
include_once $PIKA_ROOT_DIR.'footer.php';
?>

从what do you see?中,我们需要对代码进行闭合操作。如,’>。

在这里插入图片描述
点击click me!。
在这里插入图片描述
发现弹出hello
在这里插入图片描述
这里发现,我们插入的语句已经被页面给执行了。
这个就是DOM型XSS漏洞

  相关解决方案