Thomas_Xu's Blog

A junior studying blockchain security. Here are some learning records.

Delegatecall

Solidity之DelegateCall author:Thomas_Xu 在Solidity中,如果只是为了代码复用,我们会把公共代码抽出来,部署到一个library中,后面就可以像调用C库、Java库一样使用了。但是library中不允许定义任何storage类型的变量,这就意味着library不能修改合约的状态。如果需要修改合约状态,我们需要部署一个新的合约,这就涉及到合约调用合约的......

ethernaut 题解 01-06

Ethernaut靶场刷题记录(1-6) author:Thomas_Xu 01 FallBack这道题是比较简单的,合约的逻辑有问题导致出现漏洞我们先来了解一下receive和fallback的区别: receive(): 一个合约只能有一个receive函数,该函数不能有参数和返回值,需设置为external,payable;fallback(): 一个合约只能有一个rec......

拒绝服务漏洞

合约中的拒绝服务漏洞: author:Thomas_Xu 何为DosDoS 是DenialOfService,拒绝服务的缩写[3],从字面上来理解,就是用户所需要的服务请求无法被系统处理。打个比方来形容DoS,火车站是为大家提供乘车服务的,如果想要DoS火车站的话,方法有很多,可以占用过道不上车,堵住售票点不付钱,阻挠列车员或者司机不让开车,甚至用破坏铁轨等更加极端的手段来影响车站服务的正常......

Call注入漏洞

Call注入漏洞刷题实践 author:Thomas_Xu 写在前面写本文是为了总结一下博主在这两天中做一个靶场题目时遇到的一些问题,以及对call注入的一些见解。 Call函数首先我们先了解一下call函数:合约之间的调用有2种方式: 底层的call方式和 new 合约的方式solidity 提供了 call()、delegatecall()、callcode() 三个函数来实现合约直接的......

OverflowAttack

溢出攻击 author:Thomas_Xu 在介绍溢出攻击前,让我们先来了解一下solidity中溢出和下溢。 溢出 假设我们有一个 uint8, 只能存储8 bit数据。这意味着我们能存储的最大数字就是二进制 11111111 (或者说十进制的 2^8 - 1 = 255). 来看看下面的代码。最后 number 将会是什么值? 12uint8 number = 255;......

Front-Running

抢先交易攻击(Front-Running) author:Thomas_Xu 漏洞概述 简单来说,Front-Running 是指在一笔正常交易等待打包的过程中,抢跑机器人通过设置更高 Gas 费用抢先完成攻击交易,以此攫取用户利益的攻击行为。而 Mempool(交易池) 是一组已经广播到网络中并等待被打包进区块的以太坊交易,它是 Front-Running 可以实施的前提,抢跑机器人通......

主流DES——Uniswap简介

主流 DEX—Uniswap介绍 author:Thomas_Xu 引入以太坊 1.0 的严重限制让简便的 Uniswap 脱颖而出,但以太坊 2.0 和 L2 链下系统将使更复杂的市场蓬勃发展。“有个商业设想。开发一个AMM。不管谁来询价,我随时都能报出一个价格,我的定价算法会用 x * y = k。差不多就这些。想投资吗?”你会躲得远远的。其实,刚才描述的就是 Uniswap。Unisw......

ReentryAttack

重入攻击分析 author:Thomas_Xu 漏洞概述在以太坊中,智能合约能够调用其他外部合约的代码,由于智能合约可以调用外部合约或者发送以太币,这些操作需要合约提交外部的调用,所以这些合约外部的调用就可以被攻击者利用造成攻击劫持,使得被攻击合约在任意位置重新执行(回调),绕过原代码中的限制条件,从而发生重入攻击。重入攻击本质上与编程里的递归调用类似,所以当合约将以太币发送到未知地址时就可......