From 3b9ea60ab4abcf3288eb9752c6e2220ab79c9869 Mon Sep 17 00:00:00 2001 From: hau Date: Mon, 16 Sep 2024 17:18:49 +0800 Subject: [PATCH 1/3] init commit --- Haoder.md | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Haoder.md diff --git a/Haoder.md b/Haoder.md new file mode 100644 index 00000000..dd665152 --- /dev/null +++ b/Haoder.md @@ -0,0 +1,95 @@ +--- +timezone: Asia/Shanghai +--- + +> 请在上边的 timezone 添加你的当地时区,这会有助于你的打卡状态的自动化更新,如果没有添加,默认为北京时间 UTC+8 时区 +> 时区请参考以下列表,请移除 # 以后的内容 + +timezone: Pacific/Honolulu # 夏威夷-阿留申标准时间 (UTC-10) + +timezone: America/Anchorage # 阿拉斯加夏令时间 (UTC-8) + +timezone: America/Los_Angeles # 太平洋夏令时间 (UTC-7) + +timezone: America/Denver # 山地夏令时间 (UTC-6) + +timezone: America/Chicago # 中部夏令时间 (UTC-5) + +timezone: America/New_York # 东部夏令时间 (UTC-4) + +timezone: America/Halifax # 大西洋夏令时间 (UTC-3) + +timezone: America/St_Johns # 纽芬兰夏令时间 (UTC-2:30) + +timezone: Asia/Dubai # 海湾标准时间 (UTC+4) + +timezone: Asia/Kolkata # 印度标准时间 (UTC+5:30) + +timezone: Asia/Dhaka # 孟加拉国标准时间 (UTC+6) + +timezone: Asia/Bangkok # 中南半岛时间 (UTC+7) + +timezone: Asia/Shanghai # 中国标准时间 (UTC+8) + +timezone: Asia/Tokyo # 日本标准时间 (UTC+9) + +timezone: Australia/Sydney # 澳大利亚东部标准时间 (UTC+10) + +--- + +# YourName + +1. 自我介绍 +Hi~ 我是 [**Haolder**](),希望透過這次共學計畫,加深自己對 solidity 的瞭解以及熟悉程度,同時與共學夥伴共同砥礪進步。 + + +2. 你认为你会完成本次残酷学习吗? +LFG~~~~~ 會完成的 + +## Notes + + + +### 2024.09.23 + +學習內容: +- A 系列的 Ethernaut CTF, 之前做了差不多了. POC: [ethernaut-foundry-solutions](https://github.com/SunWeb3Sec/ethernaut-foundry-solutions) +- A 系列的 QuillAudit CTF 題目的網站關掉了, 幫大家收集了[題目](./Writeup/SunSec/src/QuillCTF/), 不過還是有幾題沒找到. 有找到題目的人可以在發出來. +- A 系列的 DamnVulnerableDeFi 有持續更新, 題目也不錯. [Damn Vulnerable DeFi](https://github.com/theredguild/damn-vulnerable-defi/tree/v4.0.0). +- 使用 [Foundry](https://book.getfoundry.sh/) 在本地解題目, 可以參考下面 RoadClosed 為例子 +- ``forge test --match-teat testRoadClosedExploit -vvvv`` +#### [QuillAudit CTF - RoadClosed](./Writeup/SunSec/src/QuillCTF/RoadClosed.sol) +``` + function addToWhitelist(address addr) public { + require(!isContract(addr), "Contracts are not allowed"); + whitelistedMinters[addr] = true; + } + + function changeOwner(address addr) public { + require(whitelistedMinters[addr], "You are not whitelisted"); + require(msg.sender == addr, "address must be msg.sender"); + require(addr != address(0), "Zero address"); + owner = addr; + } + + function pwn(address addr) external payable { + require(!isContract(msg.sender), "Contracts are not allowed"); + require(msg.sender == addr, "address must be msg.sender"); + require(msg.sender == owner, "Must be owner"); + hacked = true; + } + + function pwn() external payable { + require(msg.sender == pwner); + hacked = true; + } +``` +- 解決這個題目需要成為合約的 owner 和 hacked = true. +- On-chain: 可以透過 ``cast send`` 或是 forge script 來解. +- Local: 透過 forge test 通常是在local解題, 方便 debug. +- RoadClosed 為例子我寫了2個解題方式. testRoadClosedExploit 和 testRoadClosedContractExploit (因為題目有檢查msg.sender是不是合約, 所以可以透過constructor來繞過 isContract) +- [POC](./Writeup/SunSec/test/QuillCTF/RoadClosed.t.sol) + +### + + From c4331b76a32fcf73ca00fba01b62a04e2cac9905 Mon Sep 17 00:00:00 2001 From: hau Date: Mon, 16 Sep 2024 17:21:29 +0800 Subject: [PATCH 2/3] fix name --- Haoder.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Haoder.md b/Haoder.md index dd665152..5d8502d2 100644 --- a/Haoder.md +++ b/Haoder.md @@ -40,7 +40,7 @@ timezone: Australia/Sydney # 澳大利亚东部标准时间 (UTC+10) # YourName 1. 自我介绍 -Hi~ 我是 [**Haolder**](),希望透過這次共學計畫,加深自己對 solidity 的瞭解以及熟悉程度,同時與共學夥伴共同砥礪進步。 +Hi~ 我是 [**Haoder**](),希望透過這次共學計畫,加深自己對 solidity 的瞭解以及熟悉程度,同時與共學夥伴共同砥礪進步。 2. 你认为你会完成本次残酷学习吗? From a7afade090da801e2d72f0f5382eab15313a4be2 Mon Sep 17 00:00:00 2001 From: buttonwild <33722083+buttonwild@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:32:55 +0800 Subject: [PATCH 3/3] Update Haoder.md --- Haoder.md | 75 +------------------------------------------------------ 1 file changed, 1 insertion(+), 74 deletions(-) diff --git a/Haoder.md b/Haoder.md index 5d8502d2..5b249aef 100644 --- a/Haoder.md +++ b/Haoder.md @@ -2,42 +2,9 @@ timezone: Asia/Shanghai --- -> 请在上边的 timezone 添加你的当地时区,这会有助于你的打卡状态的自动化更新,如果没有添加,默认为北京时间 UTC+8 时区 -> 时区请参考以下列表,请移除 # 以后的内容 - -timezone: Pacific/Honolulu # 夏威夷-阿留申标准时间 (UTC-10) - -timezone: America/Anchorage # 阿拉斯加夏令时间 (UTC-8) - -timezone: America/Los_Angeles # 太平洋夏令时间 (UTC-7) - -timezone: America/Denver # 山地夏令时间 (UTC-6) - -timezone: America/Chicago # 中部夏令时间 (UTC-5) - -timezone: America/New_York # 东部夏令时间 (UTC-4) - -timezone: America/Halifax # 大西洋夏令时间 (UTC-3) - -timezone: America/St_Johns # 纽芬兰夏令时间 (UTC-2:30) - -timezone: Asia/Dubai # 海湾标准时间 (UTC+4) - -timezone: Asia/Kolkata # 印度标准时间 (UTC+5:30) - -timezone: Asia/Dhaka # 孟加拉国标准时间 (UTC+6) - -timezone: Asia/Bangkok # 中南半岛时间 (UTC+7) - -timezone: Asia/Shanghai # 中国标准时间 (UTC+8) - -timezone: Asia/Tokyo # 日本标准时间 (UTC+9) - -timezone: Australia/Sydney # 澳大利亚东部标准时间 (UTC+10) - --- -# YourName +# Haoder 1. 自我介绍 Hi~ 我是 [**Haoder**](),希望透過這次共學計畫,加深自己對 solidity 的瞭解以及熟悉程度,同時與共學夥伴共同砥礪進步。 @@ -50,46 +17,6 @@ LFG~~~~~ 會完成的 -### 2024.09.23 - -學習內容: -- A 系列的 Ethernaut CTF, 之前做了差不多了. POC: [ethernaut-foundry-solutions](https://github.com/SunWeb3Sec/ethernaut-foundry-solutions) -- A 系列的 QuillAudit CTF 題目的網站關掉了, 幫大家收集了[題目](./Writeup/SunSec/src/QuillCTF/), 不過還是有幾題沒找到. 有找到題目的人可以在發出來. -- A 系列的 DamnVulnerableDeFi 有持續更新, 題目也不錯. [Damn Vulnerable DeFi](https://github.com/theredguild/damn-vulnerable-defi/tree/v4.0.0). -- 使用 [Foundry](https://book.getfoundry.sh/) 在本地解題目, 可以參考下面 RoadClosed 為例子 -- ``forge test --match-teat testRoadClosedExploit -vvvv`` -#### [QuillAudit CTF - RoadClosed](./Writeup/SunSec/src/QuillCTF/RoadClosed.sol) -``` - function addToWhitelist(address addr) public { - require(!isContract(addr), "Contracts are not allowed"); - whitelistedMinters[addr] = true; - } - - function changeOwner(address addr) public { - require(whitelistedMinters[addr], "You are not whitelisted"); - require(msg.sender == addr, "address must be msg.sender"); - require(addr != address(0), "Zero address"); - owner = addr; - } - - function pwn(address addr) external payable { - require(!isContract(msg.sender), "Contracts are not allowed"); - require(msg.sender == addr, "address must be msg.sender"); - require(msg.sender == owner, "Must be owner"); - hacked = true; - } - - function pwn() external payable { - require(msg.sender == pwner); - hacked = true; - } -``` -- 解決這個題目需要成為合約的 owner 和 hacked = true. -- On-chain: 可以透過 ``cast send`` 或是 forge script 來解. -- Local: 透過 forge test 通常是在local解題, 方便 debug. -- RoadClosed 為例子我寫了2個解題方式. testRoadClosedExploit 和 testRoadClosedContractExploit (因為題目有檢查msg.sender是不是合約, 所以可以透過constructor來繞過 isContract) -- [POC](./Writeup/SunSec/test/QuillCTF/RoadClosed.t.sol) - ###