【web安全】Nodejs原型链污染分析
Nodejs原型链污染分析
什么是js原型?
可以将js原型理解为其他OOP语言中的类,但还是有细微区别。
1. function F(){...}
2. var f = new F();
分析:
1.创建一个func F,同时创立了一个F对象(该对象默认是接着Object的原型链,可以理解为Object的实例对象),并将F的构造器指向了function F(),同时设置内部属性prototype指向了对象F本身。
2. 当对对象F或叫函数F进行实例化时,会创建 一个实例对象,同时该实例对象默认加一个__proto__属性,指向F对象。
什么是js原型链?
弄明白了js原型,那js原型链就应该很清楚了。。。(狗头保命:毕竟不可能说大实话“原型链就是原型组成的链子吧!”
原型链污染是个什么东东?
首先思考:foo.__proto__指向的是Foo类的prototype。那么,如果我们修改了foo.__proto__中的值,是不是就可以修改Foo类呢?

如图,先创建一个对象a,并实例化赋值给test1。再创建一个b对象,把test1的__proto__指向b对象。但似乎没什么变化呀???原型链污染是假的?

查看test1的原型,确实已经变为b了啊,为啥没有b的属性y呢?其实因为这个函数相当于是一个构造函数,里面this.y只在它对应的实例化对象中才会有。直接改链,但这个函数又没执行,所以才会导致最后显示没有y属性,只要将y属性添加到b对象中即可

如图,在b原型对象中添加一个z属性,test1中便可以使用到该属性,从而达到污染原型链的目的。
原型链污染怎么利用呢?
说到底就是因为修改了__proto__属性使得实例对象的原型链发生了变化。所以我们可以看看哪些操作会修改__proto__属性,而操作属性一般还可以用数组的方式,如: test1['proto'] = xxx。所以最可能造成原型链污染的和操作数组的函数分不开联系。
需要注意的有merge,clone等函数
原型链污染在ctf中的利用
https://blog.happysec.cn/index/view/328.html
参考P神大作
小结
- js原型链的数据分析
- express框架支持根据Content-Type来解析请求Body,所以可以很方便的设置payload
【web安全】Nodejs原型链污染分析的更多相关文章
- redpwnctf-web-blueprint-javascript 原型链污染学习总结
前几天看了redpwn的一道web题,node.js的web,涉及知识点是javascript 原型链污染,以前没咋接触过js,并且这个洞貌似也比较新,因此记录一下学习过程 1.本机node.js环境 ...
- 初探JavaScript原型链污染
18年p师傅在知识星球出了一些代码审计题目,其中就有一道难度为hard的js题目(Thejs)为原型链污染攻击,而当时我因为太忙了(其实是太菜了,流下了没技术的泪水)并没有认真看过,后续在p师傅写出w ...
- 原型链污染(Node.js污染,javasrcipt原型链污染的)
学习链接: https://www.jianshu.com/p/6e623e9debe3 关于NJS https://xz.aliyun.com/t/7184 相关题是 GYCTF ez_expr ...
- javascript 原型链污染
原理①javascript中构造函数就相当于类,并且可以将其实例化 ②javascript的每一个函数都有一个prototype属性,用来指向该构造函数的原型同样的javascript的每一个实例对象 ...
- JavaScript原型链及其污染
JavaScript原型链及其污染 一.什么是原型链? 1.JavaScript中,我们如果要define一个类,需要以define"构造函数"的方式来define: functi ...
- 图解JavaScript中的原型链
转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof o ...
- Nodejs-原型链污染
原型链污染 javascript 原型链 在javascript中,继承的整个过程就称为该类的原型链. 每个对象的都有一个指向他的原型(prototype)的内部链接,这个原型对象又有它自己的原型,一 ...
- 从零开始学 Web 之 JS 高级(二)原型链,原型的继承
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术
目录 一. 概述 二. 原型链基础知识 三. Worker类的原型链加工 四. 实例的生成 五. 最后一个问题 六. 一些心得 示例代码托管在:http://www.github.com/dashno ...
随机推荐
- cpu负载
查看cpu负载,我们经常会使用top,或者是uptime命令 但是这只能看到cpu的总体的负载情况.如果我们想看cpu每个核心的负载情况是看不到的. 所以我们可以用mpstat命令 服务器一共32核心 ...
- centos6.5-rsync+inotify
一.目的 通过监控192.168.3.10的目录,实现实时同步. 实验环境 centos1 192.168.3.10 centos2 192.168.3.11 二.配置 cen ...
- Python_string.Template的使用
Template是python string提供的一个字符串模板功能.主要用于文本处理 from string import Template s = Template('$who 在 $do') t ...
- Python的内存管理和垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- SYCOJ1018神奇的幻方
题目-神奇的幻方 (shiyancang.cn) 模拟就对了 因为每一个状态由前一个状态决定,所以只需要记录即可 #include<bits/stdc++.h> using namespa ...
- #pragma pack() -----设置默认对齐数
#pragma pack() -----设置默认对齐数 预处理命令#pragma:程序如下 则根据修改的对齐数来算:则需要占据内存的大小是14 如果不进行设置,则按照编译器默认的对齐数来算:则需要占 ...
- Autofac实现拦截器和切面编程
Autofac.Annotation框架是我用.netcore写的一个注解式DI框架,基于Autofac参考 Spring注解方式所有容器的注册和装配,切面,拦截器等都是依赖标签来完成. 开源地址:h ...
- MyCms 开源自媒体系统后台 角色管理&管理员管理操作说明
角色管理 功能说明 一.添加角色基本信息 填写角色名称.简要描述(一般以角色功能.职位等信息来命名) 二.角色授权 点击右侧的"授权"按钮,进行对角色授权,选择需要授权的功能模块后 ...
- gin中映射查询字符串或表单参数
package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { r := gin. ...
- 【webpack4.0】---webpack的基本使用(三)
一.webpack-dev-server 1.安装 cnpm install webpack-dev-server -D 2.作用 开启一个web服务,监听文件的变化并自动刷新网页,做到实时预 ...