XSS1-原理分类及攻击手法

XSS跨站之原理分类及攻击手法

XSS跨站漏洞产生的原理

往浏览器页面中插入恶意的HTML代码,比如说js、css、html标签等,当用户浏览该页面时,嵌入其中的恶意代码会执行,达到攻击用户的目的,比如说获取用户浏览器信息等。

XSS漏洞攻击的危害

  • 盗取各类用户[账号,如机器登录帐号、用户网银帐号、各类管理员帐号
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  • 盗窃企业重要的具有商业价值的资料
  • 非法转账
  • 强制发送电子邮件
  • 网站挂马
  • 控制受害者机器向其它网站发起攻击(重定向语句)
  • 窃取cookie的sessionid,冒充登录。

XSS攻击利用到最大就需要自己有台服务器用于窃取信息,还要利用一点社工,骗取别人点击恶意的链接。

XSS跨站漏洞执行的代码是js代码,产生层面是前端,有关的函数是一些输出函数(alert、print等)

XSS跨站漏洞分类:反射,存储,DOM

跨站测试代码:

1
2
#' onclick="alert(2)">
<script>alert(1)</script>

使用后端来运行代码(反射型和存储型),得手动分析来测试是什么问题

XSS漏洞的分类

1.DOM型(不经过服务器,前端js代码的利用):

DOM型是针对前端代码的(有的页面跳转不是在url执行,是在HTML中执行),可以直接从源代码中发现存在XSS漏洞

DOM树

image

本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:

Alice给Bob发送一个恶意构造了Web的URL。

Bob点击并查看了这个URL。

恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。

具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。

Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。

2.反射型:

反射型XSS有get和post型,攻击产生一次,攻击的语句不会存储到对方的服务器

这种漏洞和类型A有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。

其攻击过程如下:

Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。

Charly发现Bob的站点包含反射性的XSS漏洞。

Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。

Alice在登录到Bob的站点后,浏览Charly提供的URL。

嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。

3.存储型(长久型,危害最大):

存储型XSS,输入一行攻击脚本后,每次刷新页面都会攻击,攻击语句存储到对方的服务器了

该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。其攻击过程如下:

Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。

Charly注意到Bob的站点具有类型C的XSS漏洞。

Charly发布一个热点信息,吸引其它用户纷纷阅读。

Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。

类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级Web应用。

1
2
3
4
5
6
7
8
反射型
发包 x=qyw=>x.php=>回显

存储型
发包 x=qyw=>x.php=>写到数据库某个表=>x.php=>回显

DOM型
发包 x=qyw=>本地浏览器静态前端代码=>x.php=>回显

绕过<script>过滤

有的网站存在<script>过滤

在html中,onload关键字就是一个事件,其它的所有标签都没有这个属性,但是Body标签的有的。但是有一定的局限性,如果onload事件在你的代码之前已经被处理了,就不会触发了

1
<BODY onload="alert('XSS')">

不过还有Onerror事件处理,图片没有指定也就是出错了,就会触发onerror事件,引发XSS漏洞,没有用<script>标签

1
<IMG SRC="" onerror="alert('XSS')">

cookie session 用户凭据,通过凭据可以判断对方的身份信息

cookie 存储在本地,存活事件较长 小中型

session 会话 存储在服务器,存活时间较短 大型

session更安全,但是会占用服务器的资源,且实现起来较为麻烦

靶场实践

反射型xss(get)

image

存储型xss,每次刷新的时候都会弹窗

image