![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
区块链
文章平均质量分 79
区块链
bfengj
vegetable web dog
展开
-
security innovation 靶场刷题(下)(持续更新)
Heads or Tails function play(bool _heads) external payable ctf{ require(msg.value == cost, "Incorrect Transaction Value"); require(gameFunds >= cost.div(2), "Insufficient Funds in Game Contract"); bytes32 entropy = block原创 2021-04-25 20:48:22 · 1162 阅读 · 2 评论 -
security innovation 靶场刷题(上)
Donation感觉有点不太明白成为winner到底要干啥,但是withdrawDonationsFromTheSuckersWhoFellForIt()函数可以转走合约中的钱,因此应该就能是winner了。看了一下WP,原来这个靶场所有题目完成的标志是把钱转回。写了个攻击合约才发现需要auth,是这个靶场对每一题都有的auth。我想直接交互,但是我不知道为什么remix这里点不了了:(注:后来发现,是因为题目的那个给的都是小写,应该有一部分字母是大写,所以才不行。)考虑到要与合约直接交互,我又原创 2021-04-23 18:40:15 · 481 阅读 · 1 评论 -
MRCTF2021 ETH uncertainty
前言昨天前天遇到的区块链题目有有些远超我目前的能力范围了,因此做的非常难受,决定先扔了,循序渐进,不好高骛远。突然想到MRCTF2021的那2道区块链自己还没有去复现,昨天想着去复现,今天发现MRCTF的站关了。。。利用着大师傅的WP上面的记录,找到了目标合约,进行复现。不过这题本身是没有给源码的,是需要逆向的,奈何我源码都读了几遍了才知道。。。没办法就直接拿着源码来复现叭。这题的难点其实还是逆向,直接看源码的话就会简单许多。WP源码:pragma solidity ^0.4.17;interf原创 2021-04-21 21:15:23 · 652 阅读 · 3 评论 -
*ctf 2021 StArNDBOX
前言一道也是要手写opcode的题目,其实目前的理解感觉有些懵懂,但是至少对于题目的基本原理也是懂了,学到了很多。WP源码:pragma solidity ^0.5.11;library Math { function invMod(int256 _x, int256 _pp) internal pure returns (int) { int u3 = _x; int v3 = _pp; int u1 = 1; int v原创 2021-04-20 14:39:12 · 460 阅读 · 1 评论 -
balsn 2020 Election
前言开始刷历年的区块链ctf题目,遇到了这个考察storage的题目,学到了很多的东西。WP源码:pragma solidity =0.6.12;pragma experimental ABIEncoderV2;interface IERC223 { function name() external view returns (string memory); function symbol() external view returns (string memory);原创 2021-04-19 20:39:39 · 470 阅读 · 2 评论 -
Solidity 逆向分析入门学习
前言智能合约学到现在也学了差不多1周了,也接触了一些智能合约常见的攻击手段,跟着网上的文章也学习了很多。但是,学习的文章给的直接都是Solidity的源代码,但是:智能合约大多数代码不公开源码,公开字节码,所以需要使用逆向工具或者人工进行逆向分析。因此以后要强迫自己去逆向分析代码,提高自己的智能合约逆向分析能力。但是一开始看逆向得到的伪代码还是比较迷的,因此跟着网上的一些最基本的入门的文章学习了一下,大致的理解这些逆向得到的伪代码,先有1。只要有了1,接下来就是靠自己不断的学习,不断逆向来提高分原创 2021-04-18 19:51:15 · 1202 阅读 · 0 评论 -
Ethernaut 靶场刷题(下)
Gatekeeper Two又学到了新东西。源码:pragma solidity ^0.6.0;contract GatekeeperTwo { address public entrant; modifier gateOne() { require(msg.sender != tx.origin); _; } modifier gateTwo() { uint x; assembly { x := extcodesize(caller()) }原创 2021-04-16 19:13:00 · 1534 阅读 · 5 评论 -
2019 数字经济 jojo
知识点Airdrop Hunting(薅羊毛)WP源码:pragma solidity ^0.4.24;contract jojo { mapping(address => uint) public balanceOf; mapping(address => uint) public gift; address owner; constructor()public{ owner = msg.sender; } e原创 2021-04-14 23:50:32 · 242 阅读 · 0 评论 -
Solidity中Storage
插槽(slot)静态大小的变量(除 映射mapping 和动态数组之外的所有类型)都从位置 0 开始连续放置在 存储storage 中。如果可能的话,存储大小少于 32 字节的多个变量会被打包到一个 存储插槽storage slot 中。通俗的理解就相当于每个合约都有一个storage,静态大小的变量都会放在其中,从位置0开始,甚至可以举个不太恰当的例子,就是编程语言中的数组,每个数组元素可能就相当于静态变量,依次存在storage(类比数组)中,从索引0开始。但是和数组不同的是,solidity的静态原创 2021-04-14 20:51:00 · 2464 阅读 · 2 评论 -
0ctf 2018 ZeroLottery
知识点区块链的伪随机数问题。方法一:伪随机数攻击题目源码如下:pragma solidity ^0.4.21;contract ZeroLottery { struct SeedComponents { uint component1; uint component2; uint component3; uint component4; } uint private base = 8; addr原创 2021-04-13 16:14:09 · 472 阅读 · 2 评论 -
Ethernaut 靶场刷题(上)
前言看了一下ctfwiki上的,前面的知识点看起来还算不那么费劲,但是突然就是学个几天就开始上手比赛题属实太难了。。。所以先从简单的区块链靶场刷起,循序渐进,慢慢学习区块链的相关知识。靶场链接:The EthernautHello Ethernaut算是新手教程了,具体的前面的一些搭建,还有获取Rinkeby环境下的ETH的方式就不说了,靶场上也都说的比较清楚了。用help()可以得到一些常用的帮助,因为异步的问题,我们需要在函数前面加上await。contract可以查看合约对象:cont原创 2021-04-12 23:49:31 · 2604 阅读 · 1 评论 -
Solidity Uninitialized Storage Pointer
前言早上做题的时候遇到了这个存储指针未初始化导致的状态变量覆盖的问题,因此来学习一下。参考文章:警惕!Solidity缺陷易使合约状态失控Uninitialized Storage Pointer原理solidity中未初始化的storage pointer有点类似C语言中的空指针。在传统编程语言中(如C, C++),对空指针(Null Pointer)的访问,通常会引起程序的报错或崩溃。空指针的值等于零,但是语言和底层系统也同时保证内存中地址为 0 的位置是不能存放有意义的值。而在例如 J原创 2021-04-12 15:15:19 · 517 阅读 · 0 评论 -
bytectf 2019 bet
WP源码:pragma solidity ^0.4.24;contract bet { uint secret; address owner; mapping(address => uint) public balanceOf; mapping(address => uint) public gift; mapping(address => uint) public isbet; event SendFlag(st原创 2021-04-12 12:21:07 · 488 阅读 · 0 评论 -
bytectf 2019 hf
知识点整形下溢出Uninitialized Storage PointerWP源码:pragma solidity ^0.4.24;contract hf { address secret; uint count; address owner; mapping(address => uint) public balanceOf; mapping(address => uint) public gift; str原创 2021-04-12 10:55:35 · 543 阅读 · 1 评论 -
Solidity Integer Overflow and Underflow
前言实际上整形溢出并不仅仅是在智能合约中出现问题,在其他的地方也有出现。只不过我感觉我好像没咋遇到过。。。还是我太菜了。。学习参考:underflow-overflowInteger Overflow and UnderflowInteger Overflow整形溢出其实还是比较常见的,尤其是编程入门学的基本就是C语言,C语言就有这样的问题。但是自己主要还是一直在接触PHP和Python,因此对于整形溢出就没那么敏感了。一个简单的例子:pragma solidity <=0.9.0;原创 2021-04-11 23:47:46 · 548 阅读 · 2 评论 -
Solidity 重入攻击
前言上一篇博客中的babybank就是重入攻击的一道题,做之前学习了一下重入攻击,现在再来总结一下。漏洞介绍任何从合约 A 到合约 B 的交互以及任何从合约 A 到合约 B 的 以太币Ether 的转移,都会将控制权交给合约 B。 这使得合约 B 能够在交互结束前回调 A 中的代码。官方文档里讲的就比较难懂(对于我这样的小白来说),简单来说就是,就是因为:向以太坊合约账户进行转账,发送Ether的时候,会执行合约账户对应合约代码的回调函数(fallback)。在以太坊智能合约中,进行转账操作,一原创 2021-04-11 19:28:28 · 1080 阅读 · 2 评论 -
2019 强网杯 babybank
前言开始学习区块链的安全问题,先从这道比较简单的区块链题目入手,学习一波。WP源码:pragma solidity ^0.4.23;contract babybank { mapping(address => uint) public balance; mapping(address => uint) public level; address owner; uint secret; //Don't leak your teamtok原创 2021-04-11 17:04:17 · 866 阅读 · 1 评论 -
Solidity中 函数选择器及参数编码
学习文章应用二进制接口说明官方文档中的应用二进制接口部分内容。前面部分摘录自官方文档,主要是对后面参数编码进行学习和理解。函数选择器一个函数调用数据的前 4 字节,指定了要调用的函数。这就是某个函数签名的 Keccak 哈希的前 4 字节(高位在左的大端序) (译注:这里的“高位在左的大端序“,指最高位字节存储在最低位地址上的一种串行化编码方式,即高位字节在左)。 这种签名被定义为基础原型的规范表达,基础原型即是函数名称加上由括号括起来的参数类型列表,参数类型间由一个逗号分隔开,且没有空格。类型原创 2021-04-09 17:13:48 · 2049 阅读 · 0 评论