freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

DVP黑客松大赛韩国站智能合约题Writeup 1: Monicas Bank
FreeBuf_330598 2019-10-25 12:19:52 154969

Monica's Bank

本文由长亭科技区块链安全负责人于晓航撰写


# 0x00 概况

这题是几种Solidity常见经典漏洞的组合,如果对Solidity熟悉的话会相对简单。

# 0x01 思路

transferBalance函数里,由于整数溢出require并没啥用,只需要随意transfer任意小余额到其他地址就可以获得大量balance。

然后可以buy 1个credit,这里的随机数是完全可预测的,只需要把随机数那段代码复制到攻击合约里就好了。

最后一步是重入攻击,跟hint里说的一样,这个类似DAO的加强版攻击。大概意思是只需要重入1次就好,而不是多次重入,这样可以触发creditOf[] -= amount的整数溢出。

在DAO攻击中,目标函数和攻击合约的fallback都被调用了很多次,直到gas耗尽,调用链底层抛出异常,由于.call.value特点是返回false而非继续向上抛出异常,所以这整个交易不会被revert,然后.call.value之后的代码们只会被执行1次。

在‘加强版’攻击里,由于我们主动结束第二次fallback,.call.value之后的代码会被执行2次,从而触发整数下溢,达成目标。

# 0x02 解密Flag

触发SendFlag后,后台脚本会把加密flag数据放在交易里发送给攻击者的地址,即tx.origin。

数据是用tx.origin的公钥加密的,因此可以用私钥,和提供的解密脚本来解密。

# 0x03 POC

1.png

然后用解密脚本来获得flag。

# 0x04 彩蛋

2.png

# CTF # 区块链 # 智能合约 # DVP
本文为 FreeBuf_330598 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
DVP去中心化漏洞平台
FreeBuf_330598 LV.1
这家伙太懒了,还未填写个人描述!
  • 8 文章数
  • 0 关注者
物资捐赠公示​!DVP社区与所有抗疫勇士同在!
2020-03-31
DVP疫情防控保卫战!捐赠物资为疫区加油!
2020-02-10
DVP国际社区领袖计划再升级,全新月榜激励重磅启动
2019-11-15