确认过眼神,地址不是对的人—— 权限验证错误 | 漏洞分析连载之五

记一次内部系统渗透测试:小漏洞组合拳 前言 这篇文章主要说的是我在这次内部测试的任务中,如何一步步获取应用系统最高权限,总的来说,是各种小漏洞的组合拳。因是内部系统,所以打码稍微严重些。 正文 在兴(suo)致(ran)盎(wu)然(wei)的某一工作日,突然接到领导的指示,要对内部的运维平台进行渗透测试。 在收到消息的第二天,我精(wan)神(ban)抖(wu)擞(nai)的开始了我的工作。要到测试地址后,我一看,卧槽,果然不出所料,只有一个登陆框。 对于这种系统,我在心里告诉自己,不要慌,办法总比困难多,随便找两个低危漏洞 阅读详情

引子:横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中。

—— 《题西林壁》苏轼

上回说到 :

底层函数调用险象环生,

外部功能慎用防患未然,

真假难辨黑客诡计多端,

完善规则杜绝内忧外患。

没看过的请戳:合约安全漏洞连载之四

本回咱们聊聊:

地址恢复功亏一篑,

身份判断轻虑浅谋。

逻辑补全自圆其说,

原理辨析帷幄运筹。

智能合约作为以太坊上各种加密数字货币的基础,承载着巨大的经济利益。放眼以太坊的繁忙景象,日交易频率在50-75万次之间,而五月和二月更有两日交易次数高达100万次。合约的调用在整个以太坊生态系统犹如战场上穿梭的子弹,不计其数。可见其地位举足轻重,功能五花八门,但万变不离其宗的是,每个合约都有一个共性,会继承一个地址对象,也就是说合约的基础是地址。回顾前四期漏洞分析,我们了解攻击者使出了浑身解数从合约的各个部分试图不劳而获,而从合约的地址漏洞入手,釜底抽薪自然也会成为攻击手段之一。

下面我们就来聊聊,与地址有关的tx.origin变量和ecrecover()函数相关漏洞。

 

 

一言以蔽之

Solidity作为以太坊的官方语言,将地址定为20个字节,160位。所有合约都有一个地址对象,也可以对其他地址的代码进行调用。地址类型的成员有我们上一期讲到的call()和delegatecall(),这两个函数相关的漏洞请见右方链接:偷天换日合约易主,地址变脸移花接木——底层函数误用漏洞 | 漏洞分析连载之四 。不同的合约地址代表了不同的合约,也代表了他们所拥有的权限。所以合约地址就相当于合约的“身份证”。

本期相关两个名词专业的解释是, tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址。ecrecover()是内嵌的函数,可以用来恢复签名公钥,传值正确的情况下,可以利用这个函数来验证地址。

通俗来说,tx.origin是整个交易过程最初的那个合约拥有者。当这个合约A直接调用合约B的时候,拥有者也是中间人没错,都是合约A。

但是当中间多出了一个合约C之后,合约A调用合约C,合约C调用合约B,这时中间人是C,但是tx.origin是合约A。

利用tx.origin的漏洞可以比喻为:

小明未满十八岁,但对手中的游戏爱不释手,但是游戏方为了限制未成年人的游戏时间,只有身份证号验证已满十八周岁的玩家才能无限制畅玩。于是小明使用长辈的身份证号进行防沉迷验证。这样,本来是游戏方对小明身份的验证,变成了对其长辈身份的验证,验证结果予以通过,给予小明他不应有的权限和利益。

至于ecrecover函数的问题,上面说到传值正确的情况下,使用是没有问题的,但普遍存在的问题是,传值如果异常,没有进行相应的判定和排除。

我们来具体分析案例进行代码层面的剖析。

深度分析

 

1. tx.origin使用错误

漏洞分析

tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址。在智能合约中使用此变量进行身份验证会使合约容易受到类似网络钓鱼的攻击。有关进一步阅读,请参阅StackExchangeQuestion, PeterVenesses博客和Solidity-tx.origin攻击。

对如下案例合约进行分析:

该合约有三个函数:constructor构造函数,指定合约owner;fallback函数,通过添加payable关键字以便接收用户转账;withdrawAll函数,对tx.origin进行判断,如果tx.origin是owner,则将合约地址所拥有的ether发送到_recipient中。

现在,一个攻击者创建了下列合约:

攻击者诱使原合约(Phishable.sol)的owner发送ether到攻击合约(POC.sol)地址,然后调用攻击合约的fallback函数,执行attack()函数,此时phOwner == msg.sender,将会调用原合约的withdrawAll()函数,程序执行进入原合约,此时msg.sender是攻击合约的地址,tx.origin是最初发起交易的地址,即原合约的owner,require(tx.origin == owner);条件满足,_recipient.transfer(this.balance);可以执行,即将原合约地址里的ether转给攻击者。

漏洞修复

tx.origin不应该用于智能合约的授权。这并不是说永远不应该使用tx.origin变量。它在智能合约中确实有一些合法的用例。例如,如果想要拒绝外部合约调用当前合约,他们可以通过require(tx.origin == msg.sender)实现。这可以防止使用中间合约来调用当前合约[2]。

参考链接:https://blog.sigmaprime.io/solidity-security.html#tx-origin

 

2.ecrecover 未作0地址判断

 

漏洞分析

keccak256() 和 ecrecover()都是内嵌的函数,keccak256() 可以用于计算公钥的签名,ecrecover()可以用来恢复签名公钥。传值正确的情况下,可以利用这两个函数来验证地址。

我们来看一个案例合约:

这个合约看似正常,但思索再三,如果ecrecover传入错误参数(例如_v = 29,),函数返回0地址。如果合约函数传入的校验地址也为零地址,那么将通过断言,导致合约逻辑错误。

 

函数transferProxy中,如果传入的参数_from为0,那么ecrecover函数因为输入参数错误而返回0值之后,if判断将通过,从而导致合约漏洞[2]。

 

函数decode()传入经过签名后的数据,用于验证返回地址是否是之前用于签名的私钥对应的公钥地址[3]。以太坊提供了web3.eth.sign方法来对数据生成数字签名。上面的签名数据可以通过下面的js代码获得:

 

js代码运行结果如下:

漏洞修复

对0x0地址做过滤,例如:

参考资料

transferProxy-keccak256

approveProxy-keccak256

高枕无忧居安思危

细心的朋友会发现,我们这一期并没有相应的事件回顾,那是因为早在2016年6月25日就有用户在github上向Solidity官方反应存在tx.origin的概念混淆,并建议移除tx.origin这个变量。

事关地址权限验证,而且theDAO事件风波未平(发生于6月17日),大量的讨论者参与了进来。究竟应不应该停止使用这个变量呢?我们在漏洞修复的环节中已经提到,如果想要拒绝外部合约调用当前合约,可以通过require(tx.origin ==msg.sender)实现。这可以防止使用中间合约来调用当前合约,这可以防止外部函数调用时产生的风险,我们在上一期已经讨论过相关的漏洞,详情请见右方链接:偷天换日合约易主,地址变脸移花接木——底层函数误用漏洞 | 漏洞分析连载之四 。

于是,有用户新提出了一个使用tx.origin产生警告的建议。

官方警惕性非常高,及时处理了这个问题,于是这个漏洞暂时还没有被利用于恶性攻击的历史事件。

 

那是不是可以说,这个漏洞并不重要呢?

目前合约的发展趋势正在发生变化,重心渐渐向以太坊游戏倾斜。以太坊游戏以娱乐和休闲为外衣,对数字货币的交易进行了整合和包装。但是游戏智能合约的漏洞依然层出不穷,不但有新型的非合约漏洞,而且还存在已经报道出的一些漏洞。更有甚者,故意暴露出看似明显的合约或机制缺陷,引诱投机倒把的玩家或者黑客,但暗中附加套路,玩起了“螳螂捕蝉黄雀在后”。这种新型的诈骗合约我们称为“蜜罐”。一些已知的缺陷通过黑客的修饰摇身一变,成为新型的骗局合约,例如近期有相关安全公司报道的名为QUESTION (中文含义:问题)的游戏合约,利用的是etherscan.io的缺陷,明修栈道,暗度陈仓,卷走玩家的钱财。

面币思过

 

无论是地址验证的欺骗,还是蜜罐合约的引诱,不怀好意的人总是瞄准了深陷币圈投资者的口袋。成都链安团队提醒玩家和投资者们提高安全意识,以及对智能合约的了解程度,切不可盲目跟风。我们从这个早期漏洞可以受到的启发是,要辨析一些容易混淆的原理之后,才能认清某些不易察觉的陷阱和漏洞,提高警惕,理智投资,稳健操作,会当凌绝顶,一览众山小。

DappBrowser,是一款安全、易用、优质的Dapp导航产品,志在为用户提供深度优化的Dapp交易和管理体验。目前已经支持云斗龙等优质的Dapp,可以直接在手机端运行,不需要下载或在PC端安装插件。新版本增加交易所搬砖神器,合约安全检测功能 。下载链接

也可以扫码下载:

本文引用:

[1] Solidity Security https://blog.sigmaprime.io/solidity-security.html#tx-origin

[2]  ERC20 Token 合约安全风险问题汇总transferProxy-keccak256

[3]  ERC20 Token 合约安全风险问题汇总approveProxy-keccak256

Mythos漏洞挖掘原理:从符号执行到系统级因果推演 漏洞挖掘正从传统模糊测试和静态分析,迈向基于系统建模与因果推理的智能范式。其核心原理在于将软件视为可导航的状态空间,结合符号执行、图神经网络与多层约束求解,实现对内存破坏、逻辑绕过等漏洞的精准定位与利用生成。这种能力不仅提升发现效率,更重构了DevSecOps中‘检测-验证-响应’的技术价值链条,在云原生、嵌入式及开源供应链等复杂场景中展现出强适应性。Mythos作为该范式的代表性实践,标志着AI安全工具已从辅助分析升级为具备自主路径规划与武器化输出能力的系统级引擎。 阅读详情

相关推荐

SSRF漏洞全解析:原理、挖掘、利用与防御实战指南

服务端请求伪造(SSRF)是一种常见的Web安全漏洞,其核心原理在于应用程序过度信任用户输入,并利用服务器作为代理发起非预期的网络请求。从技术价值看,SSRF能够绕过防火墙限制,直接攻击内网服务或访问云元数据,常被用作渗透测试中穿透内外网边界的关键跳板。在应用场景上,它常出现在图片处理、网页抓取、Webhook回调及云服务集成等功能中。本文聚焦于SSRF的实战利用,深入探讨了如何通过黑盒测试、代码审计识别漏洞,并详细解析了利用file、gopher等协议攻击内网服务及绕过常见防御的进阶手法,旨在帮助安全从业

congdi7904的博客 446

白帽黑客进阶:从漏洞猎人思维到安全架构师思维的实战方法论

在网络安全领域,漏洞挖掘是识别和修复系统缺陷的核心技术活动。其基本原理在于通过模拟攻击者行为,发现软件或系统中因设计、编码或配置不当而产生的安全弱点。掌握系统化的漏洞挖掘方法论,对于构建主动防御体系、提升整体安全水位具有关键价值。无论是进行渗透测试、参与众测(SRC),还是实施企业安全评估,一套从攻击面测绘、风险建模到深入测试的框架都至关重要。本文聚焦于如何实现从依赖工具和已知漏洞的“猎人”式点状攻击,向理解系统架构、业务逻辑和风险根源的“建筑师”式体系化思维转变。通过融入业务逻辑漏洞挖掘和风险建模等热词,

weixin_30329623的博客 359

CentOS 8服务器初始配置:防火墙→用户→时间→工具四步安全基线

Linux服务器初始化是构建安全、可观测、可维护系统环境的第一道关口。其核心在于建立基础运行契约:通过firewalld定义网络访问边界,利用sudo与wheel组实现最小权限执行链,借助chronyd+国内NTP源保障精准时间戳以支撑日志审计,再预置jq、vim-enhanced、epel-release等关键工具链支撑自动化交付。这一流程直指等保合规与生产可用的底层要求,覆盖从虚拟机开机到业务上线前的全部刚性配置动作,尤其适用于CentOS 8最小化安装后的标准化加固与DevOps快速交付场景。

jardownload的博客 683

智能合约验证签名

以太坊(ethereum)中使用了ECDSA签名算法,该算法基于椭圆曲线实现。 同时,智能合约编程语言solidity 也提供了签名和验证签名的操作:1、签名签名使用web3.eth.sign(),比如利用web3.js:var account = web3.eth.accounts[0]; var sha3Msg = web3.sha3("blockchain"); var signedData

code_segment的博客 9588

红队面试:从工具使用到攻击者思维的进阶指南

网络安全渗透测试的核心在于理解攻击者思维,而非单纯掌握工具。其原理是模拟真实攻击者的行为模式,通过系统性的侦察、漏洞利用、横向移动和对抗防御,评估目标系统的安全性。这种思维模式的技术价值在于能够发现更深层次、更复杂的风险,帮助企业构建主动防御体系。在红队评估、渗透测试等应用场景中,具备攻击者思维的专家能更有效地识别攻击面、规划攻击链并规避检测。本文聚焦于红队面试,深入探讨如何从“工具小子”进阶为“渗透专家”,其中信息收集与横向移动是构建系统性攻击能力的关键环节。

chenshixi3325的博客 429

ENVI中Landsat8大气校正法实现地表温度精准反演

本文详细介绍了在ENVI软件中,利用大气校正法对Landsat8热红外数据进行地表温度反演的完整流程。该方法通过辐射定标、大气参数获取、发射率估算及温度转换四个核心步骤,精准剔除大气干扰,还原地表真实温度,是城市热岛效应监测、农业旱情分析等应用的关键技术。

weixin_29292535的博客 150

ecrecover介绍

以太坊ecrecover

wtySama的博客 1222

2024.6.10丨基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释指南

本文详细介绍了基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释方法,涵盖工具安装、参数优化、数据库选择及实战案例解析。通过DIAMOND的快速比对和VFDB的全面毒力因子数据,显著提升微生物基因组研究效率,适用于临床检测、食品安全监测等多个场景。

weixin_33712987的博客 376

045.Solidity入门——32验证签名

Solidity——验证签名

qq_35369459的博客 1207

2.1 SRv6 TE Policy

SRv6 TE Policy是在SRv6技术基础上发展的一种新的隧道引流技术。SRv6 TE Policy路径表示为指定路径的段列表(Segment List),称为SID列表(Segment ID List)。每个SID列表是从源到目的地的端到端路径,并指示网络中的设备遵循指定的路径,而不是遵循IGP计算的最短路径。如果数据包被导入SRv6 TE Policy中,SID列表由头端添加到数据包上,网络的其余设备执行SID列表中嵌入的指令。

m0_70976024的博客 1237

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片

转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。

qq_32273059的博客 1580

确认过眼神,地址不是对的人 | 成都链安漏洞分析连载第五期 —— 权限验证错误

针对区块链安全问题,成都链安科技团队每一周都将出智能合约安全漏洞解析连载,希望能帮助程序员写出更加安全牢固的合约,防患于未然。   引子:横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中。   —— 《题西林壁》苏轼   上回说到   底层函数调用险象环生 外部功能慎用防患未然 真假难辨黑客诡计多端 完善规则杜绝内忧外患   本回   地址恢复功亏一篑 ...

链安科技的博客 558

金蝶云星空初级实施认证考题

Q4.[单选题] (1.5分) 总账中的多账簿账表主要是基于什么进行查看的Q47.[多选题] (2.5分) 销售订单的收款计划页签勾选预收之后,预收控制环节可以控制哪些节点?

m0_51994557的博客 3121

智能合约安全漏洞解析连载——优快云区块链大本营出品

史上杀伤力最大的溢出型漏洞到底是什么?看这一篇就够了 | 第1期 4月发生的BEC事件以及SMT事件已经沉淀一段时间了,具体的情况也被多方媒体所报道,相关的漏洞根源问题也有很多大神团队的分析和指正。近日,有安全团队将各种已经发生或可能发生的类似溢出漏洞原理进行整理,再次将全方位的原理分析与大家分享,让大家对溢出型漏洞有全面的认识。 “冰封”合约背后的老牌劲敌——拒绝服务漏洞 | 第2期 目前区块...

区块链大本营 5611

创建XCP的CanApe工程

创建XCP的CanApe工程

weixin_44173919的博客 2891

PICO640红外探测器配置模块verilog

Ulis pico 640红外探测器配置模块

Go Forward Forever! 2032

安全连载——优快云区块链大本营出品

史上杀伤力最大的溢出型漏洞到底是什么?看这一篇就够了 | 第1期 4月发生的BEC事件以及SMT事件已经沉淀一段时间了,具体的情况也被多方媒体所报道,相关的漏洞根源问题也有很多大神团队的分析和指正。近日,有安全团队将各种已经发生或可能发生的类似溢出漏洞原理进行整理,再次将全方位的原理分析与大家分享,让大家对溢出型漏洞有全面的认识。 “冰封”合约背后的老牌劲敌——拒绝服务漏洞 | 第2期 目前区块...

优快云 人工智能 1133

SAP-ABAP:SAP采购业务核心表关联关系详解

MM(核心)、FI(财务)、SD(计划协议):PR → PO → GR → MIRO → FI过账。

baidu_35680696的博客 930

红蓝对抗计算机血性决斗场:是人创造出来的东西就会有漏洞

《红蓝对抗:数字战场上的永恒攻防》摘要: 在这场虚拟"血性决斗场"中,红蓝双方围绕计算机安全展开五回合激烈交锋。缓冲区溢出攻防揭示了内存管理的原罪,权限提升对抗展示了系统隔离的脆弱性,侧信道攻击暴露了硬件微架构的固有缺陷,零日利用证明了漏洞挖掘的必然性,最终指向社会工程这一终极人性漏洞。对决证明:任何人为创造的系统都存在缺陷,安全本质是一场永无止境的动态博弈。从内存管理到硬件设计,从权限模型到供应链安全,攻防双方在技术对抗中不断突破认知边界,最终达成共识——在数字世界中,绝对安全只是幻想

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 155

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

从零开始掌握0day漏洞挖掘:知识体系、工具链与实战方法论

软件安全的核心在于理解漏洞的本质与挖掘原理。漏洞是程序中的缺陷,源于编码逻辑、内存管理或系统交互中的疏忽。其技术价值在于,通过主动发现并分析这些缺陷,安全从业者能从根本上提升对软件威胁的认知与防御能力,推动更健壮的系统设计。这一过程广泛应用于软件开发生命周期的安全测试、渗透评估以及高级威胁研究等场景。掌握漏洞挖掘,尤其是针对高危的0day漏洞,需要构建涵盖编程语言、系统原理和汇编基础的知识体系,并熟练运用静态分析、动态调试与模糊测试等工具链。本文以C/C++内存破坏类漏洞和栈溢出为例,系统阐述了从环境搭建、

aibi9196的博客 387

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

红蓝对决:一场基于内核提权、零日漏洞与金融级攻防的血性技术决斗

攻击者的创造力 vs 防御者的系统性思维。从 SLAB 分配器到 SGX Enclave,从 Spectre 到 CRYSTALS-Kyber,每一个知识点都是真实战场上的生死线。原创不易,若您觉得本文有深度、有血性、有技术含量👍是对我最大的鼓励!💾以备日后查阅攻防要点!🌟关注我,获取更多硬核安全技术解析!☕打赏一杯咖啡,支持我继续深挖技术深渊!记住:真正的黑客精神,不在破坏,而在理解;不在炫耀,而在守护。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 172

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

2023LitCTF部分web题解

千里之行,始于足下。这次我就重点记一下一些没做出来的或者学到东西的题目;

Rick66Ashley的博客 1047

实用影响分析:从技术变更到业务代价的因果链建模

在软件工程与系统演进中,‘影响分析’并非抽象评估,而是连接技术动作与真实业务结果的关键因果链。其核心在于将代码、配置或架构变更,映射为可计量的财务损耗、时间延迟、人力负荷或稳定性衰减——即‘practical impact’。这一过程需穿透显性调用、隐性流程与商业约束三层网络,并依托可观测指标、可归因链路与可对冲方案实现工程化落地。广泛应用于金融核心升级、政务平台迭代、电商大促保障等高可靠性场景,是DevOps成熟度、变更风控能力与跨职能协同水平的集中体现。

weixin_30631587的博客 392

Ubuntu 14.04 手动部署 LAMP:理解 Web 服务底层原理的实践课

LAMP(Linux + Apache + MySQL + PHP)是 Web 服务最基础的技术栈,其核心在于进程协作、文件权限与配置联动三大机制。Apache 以模块方式嵌入 PHP 解释器,MySQL 通过 Unix Socket 或 TCP 与 PHP 建立连接,而 Linux 文件系统权限模型则决定了脚本能否读写资源。掌握这些原理,不仅能精准排查 500 错误、PHP 不执行、数据库拒绝连接等典型问题,更能为 Docker 容器化、CI/CD 部署及安全加固打下坚实基础。本文聚焦 Ubuntu 14

weixin_33912453的博客 364
上一篇: 偷天换日合约易主,地址变脸移花接木——底层函数误用漏洞 | 漏洞分析连载之四
下一篇: 游戏skr而止,漏洞周而复始 —— 游戏合约漏洞全面汇总 | 漏洞分析连载之六
Inconsolabl
博客等级 码龄15年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值