网络安全技术 ·

以欺骗者角度分析蜜罐合约(下)


上文中我们分析了蜜罐合约。更重要的内容在本文呈现——如何以攻击者以及防御者角度对蜜罐合约进行渗透或防御。
 

现在回到这个题目,看看我们应该如何成功攻破。

拿到合约后:

简单解读一下该合约,该用户若想获得flag,那么他必须满足两个条件:

第一个为记录值必须为true第二个为余额必须为0.

满足为true意味着要调用。
 

而调用了这个合约之后用户的余额则变为1000.

所以我们如何将这1000的余额花掉?

我们在broke.sol函数中能发现转账函数:

 但是该函数拥有修饰函数lock。  

而该函数使得该余额需要存储1年才能进行转账,所以该方法跳过。

第二个方法为使用withdraw函数:

而该函数只能onlyOwner调用。

modifier onlyOwner{ if (msg.sender != owner) revert(); _; }。

那么这里需要改变owner的身份。

这里是个坑点。

这个函数看似能改变,当调用了之后会发现owner并不会改变。这是由于继承机制的问题。(蜜罐的精髓)

所以真正的方案是什么?

我们这是需要逆向整个合约。

https://ethervm.io/decompile/ropsten/0xffd1e29ab7ea57836ce43c1089230fb29fd5b27e

既然上述的几种方法我们无法成功,那么我们需要通过逆向来查找是否有其他的函数了辅助我们进行。

其实在合约逆向后很容易能发现approve函数,而熟悉这个函数的用户都知道。ERC20中存在此类函数意味着拥有transferfrom类型的函数。

而我们并没有看到transferfrom函数。而逆向成为我们唯一的切入点,下文中我们详细分析一下如何进行更有深度的逆向操作。

作者:Pinging   原创文章

参与评论