Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
C0nstellati0n committed Oct 8, 2024
1 parent 6c8e83a commit 534d78e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
4 changes: 2 additions & 2 deletions 笔记/Crypto/数学概念与结构/Lattice学习.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ knapsack问题可概括为“从数集里选数字”。给定n个数字 $a_1...

我去我脑子有问题,怎么还是看不懂格?道理我都懂(并不懂),可是比赛时咋构造格?大佬们构造的格我怎么都看不懂?又找了篇[文章](https://tover.xyz/p/LLL-attack-equation/#%E6%A0%BC%E6%94%BB%E5%87%BB%E5%BA%94%E7%94%A8),目前来看是这个问题的最佳答案。这里拿CTF里的一道题练手(解析)

题目`Too Many Leaks`和解析可以看 https://berliangabriel.github.io/post/gcc-ctf-2024/ 。我又在[官方wp](https://github.com/GCC-ENSIBS/GCC-CTF-2024/tree/main/Crypto/Too_many_leaks)找到了题目来源的[论文](https://eprint.iacr.org/2020/1506.pdf),见6.2节。省略题目的一堆前戏,总之最后得到线性方程 $k_1 − t^{−1}k_2 + r_1 − t^{−1}r_2\equiv 0 \mod p$ ,已知p,t, $r_1$ 和 $r_2$ ,求 $k_1$ 和 $k_2$ 。接下来的任务是构造一个格,使这个格内包含一个包含 $k_1$ 和 $k_2$ 的向量。那根据格的定义可知,格包含一个向量意味着这个向量是格基的线性组合。然后重点来了,这个线性组合重要吗?不重要。我们甚至不需要知道具体的线性组合,只要保证有这么个线性组合就行了。好,从得到的线性方程中,怎么得到 $k_1$ ?变形一下即可: $k_1=t^{-1}k_2-r_1+t^{-1}r_2\mod p$ 。对了,格里不好模p,所以我们可以手动把 $a_1p$ 加上,结果就是 $k_1=a_1p+t^{-1}k_2-r_1+t^{-1}r_2$ 。得到了格基的第一个列向量:
题目`Too Many Leaks`和解析可以看 https://berliangabriel.github.io/post/gcc-ctf-2024/ 。我又在[官方wp](https://github.com/GCC-ENSIBS/GCC-CTF-2024/tree/main/Crypto/Too_many_leaks)找到了题目来源的[论文](https://eprint.iacr.org/2020/1506.pdf),见6.2节。省略题目的一堆前戏,总之最后得到线性方程 $k_1 − t^{−1}k_2 + r_1 − t^{−1}r_2\equiv 0 \mod p$ ,已知p,t, $r_1$ 和 $r_2$ ,求 $k_1$ 和 $k_2$ 。接下来的任务是构造一个格,使这个格内包含一个包含 $k_1$ 和 $k_2$ 的向量。那根据格的定义可知,格包含一个向量意味着这个向量是格基的线性组合。然后重点来了,这个线性组合重要吗?不重要。我们甚至不需要知道具体的线性组合,只要保证有这么个线性组合就行了。好,从得到的线性方程中,怎么得到 $k_1$ ?变形一下即可: $k_1=t^{-1}k_2-r_1+t^{-1}r_2\mod p$ 。对了,格里不好模p,所以我们可以手动把 $a_1p$ 减去,结果就是 $k_1=-a_1p+t^{-1}k_2-r_1+t^{-1}r_2$ 。得到了格基的第一个列向量:

$$\begin{pmatrix}p\cr t^{-1}\cr -r_1+t^{-1}r_2\end{pmatrix}$$

这里我得出的列向量和两个wp都不一样,他们都是:

$$\begin{pmatrix}p\cr t^{-1}\cr r_1-t^{-1}r_2\end{pmatrix}$$

sagemath跑了一下,两个都能解出来答案,只不过我算出来是全正的,他们算出来是全负的
sagemath跑了一下,两个都能解出来答案,只不过我算出来是全正的(除了第一个,因为是 $-a_1$ ),他们算出来是全负的

拿到第一个向量后,剩下的方程就不能直接莽了。需要根据线性组合考虑怎么构造出 $k_2$ 。 $k_2$ 已经在第一个向量里出现过了,而且不属于格基,必然在线性组合里。所以线性组合应该是:

Expand Down
6 changes: 6 additions & 0 deletions 笔记/Web/Web笔记.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@
- 可用`forge inspect a.sol:b deployedBytecode`查看文件a里b合约的字节码。 https://bytegraph.xyz/ 可以查看汇编的控制流图表,可以在 https://www.evm.codes/playground 调试汇编
- 这题的其中一个漏洞是攻击者可以修改函数指针。题目有一个数组,数组里装着一个函数指针a,a指向被whenNotPaused修饰的函数b。假如我们可以修改函数指针,就能将a修改为修饰符逻辑下面的函数b逻辑内容,进而绕过修饰符检查,从而正常执行函数b(相当于修改got表时因为某种原因改成backdoor函数的开头不行,于是就把got修改为backdoor函数的重要部分)。注意solidity里jump的目的地必须是某个jumpdest字节码。剩下的漏洞是内存溢出(有点像堆溢出)和out of bounce read(指程序读取了预期之外的内容)
- [预期解](https://blog.solidity.kr/posts/(ctf)-2024-SekaiCTF)里提到了[foundry debugger](https://book.getfoundry.sh/forge/debugger)。感觉和radare2一样都是基于命令行的图形ui调试器
- [SURVIVE](https://blog.soreatu.com/posts/writeup-for-3-blockchain-challs-in-sekaictf-2024)
- ERC-4337 Abstract Account system。相关学习链接:
- https://www.alchemy.com/blog/account-abstraction
- https://www.alchemy.com/blog/account-abstraction-paymasters
- https://www.alchemy.com/blog/account-abstraction-wallet-creation
- 此题的漏洞在于,实现Abstract Account system的wrapper时关键正则部分写错了,导致攻击者可以将beneficiary(bundlers)填写为任意地址,进而获取多余的ETH

## SQL注入

Expand Down

0 comments on commit 534d78e

Please sign in to comment.