DLNU25ctf考核wp
考核wp[toc] Pigeon合约这个题需要我们满足:盗走合约余额,并且使我们所有。 逻辑关键点在于task函数、flyway函数以及promotion函数,我们需要通过调用task函数积累任务点数,任务点数可以晋升。再加上你随时可以飞走,而晋升是需要扣掉你的余额的,但是飞走可以让你带走余额。所以我们可以先成为鸽子,薅空投可以获得4余额,然后调用2次task函数,一次4,两次8 ,然后飞走,晋升中级鸽子;再调用task,一次4 三次12,可以晋升到高级鸽子。这样可以无损晋升。 合约突破点在晋升时,我们的名字拥有一次重命名的机会,而名字是通过codename = keccak256(abi.encodePacked("code",...
R3CTF_blockchain
R3CTF_blockchain这个合约 Vault 是一个基于 ERC4626 标准的简化版代币化金库(Tokenized Vault),可以接受一个特定的 LING 代币的存款,发行代表份额的 vLING...
Chainlink 价格预言机
Chainlink...
Typora 笔记
Typora 笔记[TOC] PS:除文字外,符号最好是英文状态下输入,中文状态下的符号无法转义。 部分操作可以通过快捷指令设置。 目录:[TOC] 或者 [toc] 1. 标题 标题:一个#加空格。(可以多级标题) 123456# 标题## 标题### 标题#### 标题##### 标题###### 标题 2. 引用 引用:”>”加空格。(可以多级引用,重复上述操作即可) PS:使用多行引用时,上一行引用需要有内容。(如果没有会清除引用符号) 引用 3. 字体字体::一对”**”是斜体;两对是加粗;三对是斜体加粗。(选中文本按 “Ctrl”加”B”也可以实现加粗;选中文本按”Ctrl”加”I”可以实现斜体) 小赵 小赵 小赵 4. 列表 有序列表:数字加”.”加空格加文本。(回车可以有序向下延伸) 123 123 123 123 无序列表:一个”+”加空格加文本。(回车可以向下延伸) 123 123 5. 删除线:两对波浪线”~”。我宣布个事儿 6. 高亮:两对等于号”=”。...
VScode快捷键
VS code 快捷键: alt + shift + f 格式化代码 alt + shift + a 单块注释 alt + 鼠标左键,多出光标同时操作 ctrl + shift + L 重命名变量 alt + shift + P 打开 VScode 的命令面板 ctrl + shift + V 打开 markdown 预览(需要装插件) alt + Z 自动换行 alt + <- 快速回到上次编辑的位置 alt + -> 快速回到下次编辑的位置 基本编辑 复制行向下:Shift + Alt + ↓ 复制行向上:Shift + Alt + ↑ 移动行向下:Alt + ↓ 移动行向上:Alt + ↑ 删除行:Ctrl + Shift + K 插入行下方:Ctrl + Enter 插入行上方:Ctrl + Shift + Enter 跳到行首/行尾:Home / End 跳到文件开头/结尾:Ctrl + Home / Ctrl + End 注释/取消注释当前行:Ctrl + / 块注释:Shift + Alt +...
基础漏洞目录
基础漏洞 重入漏洞(Reentrancy) 访问权限漏洞 不可预期的 Ether 类型转换遇到的问题 私有变量访问 合约插槽(slot)布局,数组,动态数组,映射实际存储插槽位置 整数溢出(Overflow) 坏随机数(Bad Random) tx.origin 钓鱼 EOA 检测绕过 拒绝服务攻击(DoS) 未检查的低级调用 Create2 合约地址预测 薅羊毛攻击 delegatecall 修改状态变量,状态变量布局发生变化出现非预期错误(合约插槽冲突) 函数选择器冲突漏洞(可升级合约、Proxy 合约) ==学漏洞的同时,记得练 Foundry 命令以及 Foundry Test(单元,集成,Fuzzing),Script 脚本== 推荐链接: wtf solidity 104 合约安全:https://www.wtf.academy/docs/solidity-104/ Ethernaut...
倒带时间
倒带时间这题主要考察的就是delegatecall数据存储,即委托调用目标合约时需要将数据类型存储顺序一一对应,这题的不同点是需要注意常数不占用数据存储槽,是直接十六进制编码。还有就是注意动态数组的声明和赋值方式。具体步骤就是先调用setZDriveowner函数把合约owner变成我们,再就是更改时间,只需要同名函数和参数即可,因为目标合约的time都是public关键字修饰,所以可以直接赋值。 目标合约: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128//...
心想事成
心想事成考察的主要是关于wish_made(address)这个映射的变化从而让三元运算符给出不同的值,然后完成题目的要求通过这个题目。需要注意的是我们调用的地址需要时EOA的地址不是攻击合约的地址。(其中这个是按照正常逻辑来的,更高深的一点就是按照我们的staiticall绕过漏洞) 目标合约: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface Wish_Maker { function wish_amount() external view returns (uint256);}contract Make_a_wish { address public owner; ...
关于合约使用`assembly`操作`calldata`以及`low-level call`接受数据的弊端
关于合约使用assembly操作calldata以及low-level call接受数据的弊端:[TOC] 大部分合约的编写完全可以通过solidity完成,但是内联汇编是Solidity的一个重要补充,它让你更深入地理解底层操作和合约优化。合约在使用 assembly 操作 calldata 或使用 低级调用(call, delegatecall 等)接收数据 时,确实能实现一些底层的灵活性,但也引入了一些严重的安全风险、可维护性问题和兼容性弊端。 assembly 操作 calldata 的弊端 在 assembly 中直接使用 calldataload 加载数据时,是不做类型检查的。如果数据位置或大小不符合预期,会读取到错误的值或导致合约异常。 123assembly { let val := calldataload(4)} 如果 msg.data 长度不足,则 val 会是 0,或是无意义数据。 容易受 ABI 编码方式影响 calldata 的格式遵循 ABI 编码规范。例如 uint8 也会被编码成 32...