CTF实战9 XSS跨站脚本漏洞

依旧先拜祖师爷~

重要声明

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

有同学问咋最近不发小姐姐了~😭

众口难调唉😔~

好吧我们恢复发小姐姐~

(每天为你们挑小姐姐都得一个小时~)

我们调整一下心情~

开始学习新的知识~

下面我们开始~

sdfd

XSS产生的背景

Web 2.0出现以前,XSS跨站脚本攻击不是那么引人注目

但是在随着Web 2.0出现以后,配合流行的AJAX技术,XSS跨站脚本攻击的危害性达到了十分严重的地步

世界上第一个XSS跨站脚本蠕虫发生在MySpace网站,20小时内就传染了一百万个用户,最后导致该网站瘫痪

随着SNS社交网站、微博系统的出现,Web应用安全重心转移到用户账号安全上,XSS攻击成为当今最流行的一种攻击方式,同时也是Web应用面临的主要威胁

sdfd

XSS攻击事件一

在2005年10月初,世界上第一个XSS蠕虫Sammy出现了,它利用著名网络社区MySpace.com的系统漏洞,以XSS的方式进行传播的Sammy蠕虫的作者在社区个人资料中插入XSS攻击脚本

当其他MySpace.com用户查看他的资料时,XSS攻击脚本就会运行,自动把Sammy的作者加为好友,同时Sammy本身也会被复制到浏览者的个人资料里面进行传播

不到20个小时,就有超过100万MySpace.com用户受到感染,造成网站一度瘫痪

MySpace.com为此不得不禁止所有用户在个人资料中加入任何脚本程序

2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。大量用户自动发送诸如:“郭美美事件的一些未注意到的细节”,“建党大业中穿帮的地方”,“让女人心动的100句诗歌”,“3D肉蒲团高清普通话版种子”,“这是传说中的神仙眷侣啊”,“惊爆!范冰冰艳照真流出了”等等微博和私信,并自动关注一位名为hellosamy的用户

sdfd

XSS攻击事件二

2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。大量用户自动发送诸如

"郭美美事件的一些未注意到的细节"

"建党大业中穿帮的地方"

"让女人心动的100句诗歌"

"3D肉蒲团高清普通话版种子"

"这是传说中的神仙眷侣啊"

"惊爆!范冰冰艳照真流出了"

等等微博和私信,并自动关注一位名为hellosamy的用户

首先,黑客通过对新浪微博的分析测试发现新浪名人堂部分由于代码过滤不严,导致XSS漏洞,并可以通过构造脚本的方式植入恶意代码

通过分析发现,在新浪名人堂部分中,当提交时,新浪会对该字符串进行处理,而由于应用程序没有对参数g做充足的过滤,且将参数值直接显示在页面中,相当于在页面中嵌入了一个来自于2kt.cnJS脚本

JS脚本是黑客可以控制的文件,使得黑客可以构造任意JS脚本嵌入到的页面中,且通过AJAX技术完全实现异步提交数据的功能,进而黑客通过构造特定的JS代码实现了受此XSS蠕虫攻击的客户自动发微博、添加关注和发私信等操作

然后,黑客为了使该XSS蠕虫代码可以大范围的感染传播,会通过发私信或发微博的方式诱惑用户去点击存在跨站代码的链接,尤其是针对V标认证的用户,因为此类用户拥有大量的关注者,所以如果此类用户中毒,必然可以实现蠕虫的大范围、快速的传播

最后,当大量的加V认证账户和其他普通用户中毒后,这些用户就会通过发微博和发私信的方式将该XSS蠕虫向其他用户进行传播,进而导致了该XSS蠕虫的大范围、快速的传播与感染

sdfd

XSS概述

XSS又叫CSS (Cross Site Script) ,跨站脚本攻击

它指的是恶意攻击者往Web页面里插入恶意HTML代码,当用户浏览该页面时,嵌入Web页面的HTML代码会被执行,从而达到恶意用户的特殊目的

XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性

XSS攻击中,一般有三个角色参与

攻击者

目标服务器

受害者的浏览器

sdfd

XSS的危害

突破域限制

修改HTML代码

XSS蠕虫攻击

命令执行

获取客户端信息

结合CSRF攻击

获取系统管理后台权限

盗取账号

DDOS攻击

我们可以根据XSS工具的特性将XSS分为这么几种

sdfd

反射型XSS

<反射型XSS>也称为<非持久型XSS>,其特征是直接在URL中输入恶意代码

这种XSS攻击的隐蔽性较差,一般的浏览器都可以识别并拦截

sdfd

存储型XSS

<存储型XSS>也称为<持久性XSS>,这种攻击的特征是恶意代码是存储在数据库或者服务器上

一般存储型XSS的隐蔽性比较高,浏览器一般不会察觉和拦截,所以危害也是最大的

那么XSS一般会出现在什么地方?

XSS可能出现的地方

一般可以分为如下几种

HTML文档

包括了

标签

属性

Javascript

css

或者还可能出现在以下地方

多媒体、网页插件

**Flash
**

Word

**PDF
**

Siverlight

Applet

甚至在一些内嵌了浏览器的软件中,也可能会存在XSS

CS客户端软件

这里就没有分类了,就这么一种CS客户端软件,像大家熟悉的Steam这种类型的客户端软件

那么怎么挖掘XSS漏洞呢?

sdfd

挖掘XSS漏洞

一般挖掘的时候要在能输入东西的地方都进行XSS输入测试

一般常见的如留言模块

如果是反射型的XSS,就要注意URL中的参数

而如果是存储型的XSS,就该注意文本框及其他任意可以填写内容的地方

分割图~

下面我们演示一下两种常见的XSS的区别

sdfd

反射型XSS简单演示

假如我们有这么一个网站,它会将我们的搜索内容都原封不动的返回显示在网页里面,我们就可以使用反射型XSS来攻击了

这里我们用OWASP中的WebGoat来演示这种攻击

上图可以看出有个搜索框,我们输入什么就会返回什么

那这样就满足了反射型XSS的特征,我们可以这样进行攻击

那我们试试输入这句恶意代码看看

<script>alert("XSS");</script>

这就是一个简单的演示

sdfd

存储型XSS简单演示

我们假设有这么一个网站,是让人去留言的,系统会把留言存储在服务器上

我们还是用OWASP来演示

这里有个留言系统,我们留个言看看

我们测试了一下发现可以完整的把我们的留言保留在系统中

于是我们可以这样测试存储型XSS

输入

<script language="javascript" type="text/javascript">alert("Hatsune Say Store XSS");</script>

之后留言

然后我们点开这个XSS留言的链接

马上就会跳出一个窗口

然后现在这两种XSS就大概演示到这里

当然,XSS攻击博大精深,现实中一般不会有我们上面介绍的这么简单,其他还有Flash XSSDom XSS等等

这里只是抛砖引玉给大家一个对XSS的初步理解~

感谢支持~~~

摸摸大~

祝大家周末愉快~

本文完

下期内容:CSRF跨站请求伪造漏洞

本文分享自微信公众号 - 玄魂工作室(xuanhun521)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )