blockchain - Ethernaut智能合约漏洞靶场复现
接到了链上的项目,正好学习一下
0x00 环境搭建
我用的是这个靶场,需要下载MetaMask,下载完毕之后可以切换到Sepolia测试币,去这里开源挖币,就有测试币可以搭建Instance了(不过需要认证score,也很简单,只需要认证好github就能过)
0x01 题目
00 Hello Ethernaut
这个题目完全是新手教程,让我们与contract的info这个method进行交互,我们打开控制台按照他的意思一直contract.xxx("xxx")就行了
01 Fallback
漏洞类型:不算漏洞
take-away msg:fallback/receive 函数触发时机
Basic
这一关的名字是Fallback,fallback是一类函数,这类函数可以在合约接收到以太币时执行一些操作(Exploration里有更精确的定义)。本题中,当接收的币大于0并且币的发送方在发送这条消息之前已经对该合约有了贡献(发送过币),那就把这个合约的所有权移交给币的发送方。
也就是说,我们只需要 12await...
CSBasics - NJUOS_Note
记录一下上课+做实验时产生的问题、思考与收获
[M2] plcs
做完这个实验,收获概括来讲是
理解计算图与依赖关系,并通过它来实现并发
LCS的各种实现方法
加深对互斥与同步的理解,写出第一个并发程序
加深对条件变量实现生产者消费者模型的理解
提高编程素养
利用宏定义增强代码可读性
利用 assert 进行防御性编程
将大任务拆分成多个小任务
[M2-1] 并发编程
任何可能被多线程修改的全局变量,都应该上锁以后再处理
生产者负责生产而不是消费,逻辑要对
在现实生活中找一些实例来帮助理解并发程序
并发函数 1234567pthread_mutex_lock/pthread_mutex_unlock// 我认为这两个函数之间的代码被称作“临界区”// 上锁或解锁时暂停时间,但临界区还是会被interrupt// 用锁保护临界区的全局变量pthread_cond_wait// 睡眠自己并释放持有的锁
[M2-2]...
comp - 2024VNCTF_pwn_wp
没注意到今天还有一个 vnctf😭赛后复盘一下
pwn
shellcode
签到题,禁用了 execve 相关函数,还禁用了所有与 read 和 socket send
相关的函数,也就是 ORW 缺 R
12345678910111213141516171819202122line CODE JT JF K================================= 0000: 0x20 0x00 0x00 0x00000004 A = arch 0001: 0x15 0x00 0x11 0xc000003e if (A != ARCH_X86_64) goto 0019 0002: 0x20 0x00 0x00 0x00000000 A = sys_number 0003: 0x35 0x00 0x01 0x40000000 if (A < 0x40000000) goto 0005 0004: 0x15 0x00 0x0e 0xffffffff if (A != 0xffffffff) goto 0019...
Pwn - IO_File and ld.so exploit summary
IO_File 与 ld.so 利用总结
[1] IO_File
好文
PIG-007
glibc2.37
IO
[2] ld.so
[2-1]
_rtld_global._dl_ns._ns_loaded
[2-1-1] 原理
程序在调用exit()退出时,会调用(待调试),而我们可以通过修改
_rtld_global._dl_ns._ns_loaded.l_next->l_next->l_next
[2-1-2] 找偏移量
恢复调试符号请看Pwn
- Heap Exploit Summary 的 patchelf 部分
恢复调试符号以后,在 pwndbg 中输入 1234567891011# 找 &(_rtld_global._dl_ns._ns_loaded.l_next->l_next->l_next) # 与 &(_rtld_global) 之间的偏移量pwndbg> distance &_rtld_global...
comp - 2024hgame-wp
谁除夕和情人节还在加班写 wp 啊😭2024要脱离 game 级别!
目录
Week 1
Pwn
Week 2
Pwn
Rev
Week3
Pwn
Week4
Pwn
Week1
week1 在做项目,把这事给忘了,做 week2 的时候为了找灵感做了一下 week1
的 ezshellcode
Pwn
ezshellcode
alphanumeric shellcode 123456789101112131415161718192021from pwn import *from ae64 import *from LibcSearcher import *context(os='linux',arch='amd64',log_level='debug')context.terminal = ['tmux', 'splitw', '-h']ip =...
Pwn - Architecture other than LinuxC
总结一下异架构的相关内容,便于后续调用
目录
Different Language
python
Different Architecture
ARM
[1] Different Language
[1-1] python
[1-1-1] python 链接 动态链接库
12345# 在 main.py 中添加:sys.path.append("/absolute/path/to/packagename.cpython-37m-x86_64-linux-gnu.so")# app.cpython-37m-x86_64-linux-gnu.so 中的 37m 指的是 python3.7import packagename
[1-1-2] 用 pwntools 调试
1io = process(['python', 'main.py'])
[2] Different Architecture
[2-1]...
Pwn - Shellcode Summary
Shellcode 也是十分核心的技术🤔
Manual
linux
系统调用号表
manual:
pwntools.shellcraft
[0] 目录
编写 shellcode
shellcode 板子
现有工具
板子
shellcode
restrictions & bypass (限制与绕过)
Length restrictions
(长度约束)
seccomp 禁用
alphanumeric
shellcode (字母+数字构成)
例题
参考资料
[1] 编写 shellcode
[1-1] shellcode 板子
exploit-db
Shellcodes
database for study cases(已停止更新)
这个虽然停更了但是挺好用的,很适合找一些 length restrictions 的
shellcode
[1-2] 现有工具
[1-2-1] Pwntools
[1-2-1-1] shellcraft
Manual
速成...
Pwn - Heap Exploit Summary
总结一下 Heap 的相关内容,便于后续调用
Github:
ptmalloc 源码(只有 malloc 部分)
source code
compilation && all libc debs
[0] 目录
Patchelf的使用方式
详解 '申请与释放
chunk'
chunk Extend and
Overlapping
Use After Free
Double Free
Unlink
Series of Bin
7-1 Tcachebin
7-2 Fastbin
7-3 Unsortedbin
7-4 Largebin Attack
Series of House
8-1 House of Orange
8-2 House of Force
8-3 House of botcake
8-4 House of banana
8-5 House of pig
[1] Patchelf的使用方式
在本地调试堆题时,不同的 libc 版本会有不同的 heap...
Math Knowledge Summary
总结一下计算机中的数学相关内容,便于后续调用
[0] 目录
数学算法
[模乘]
[1-1-1 蒙哥马利算法]
密码学
Stream Cipher
1-1 RC4
Block Cipher
2-1 tea/xtea/xxtea
[1] MATH
[1-1] 模乘
[1-1-1] 蒙哥马利算法
蒙哥马利算法能够提高类似模幂运算的速度而实现的,主要是因为蒙哥马利算法巧妙地避免了大量模运算(除法),极大地降低了运算时间,下面介绍如何减少x*y
mod N的模运算数目。
首先,蒙哥马利算法引入了REDC函数,该函数以大数T,模数N,模数N的逆元的负数N'和整数R(如果N为素数,R一般选取\(2^{n\_bit}\),这样就可以在整除前提下用移位运算代替除法运算,也就是将下面代码第三行的整除运算换成移位运算)作为输入,在不使用模运算的情况下输出\(TR^{-1}...
Rust - learning cheat sheet
DIVE INTO RUST LAKE
[0] 前言
[1] 数据类型
Rust
的数值类型和运算跟其他语言较为相似,但是实际上,除了语法上的不同之外,还是存在一些差异点:
Rust 拥有相当多的数值类型.
因此你需要熟悉这些类型所占用的字节数,这样就知道该类型允许的大小范围以及你选择的类型是否能表达负数
类型转换必须是显式的. Rust 永远也不会偷偷把你的 16bit 整数转换成
32bit 整数
Rust 的数值上可以使用方法. 例如你可以用以下方法来将 13.14
取整:13.14_f32.round(),在这里我们使用了类型后缀,因为编译器需要知道
13.14 的具体类型
[1-1] 整数类型
与 C++ 几乎没有差别,只是溢出在 debug 模式下会默认抛出错误,在
release
模式下会默认正常。开发者可以通过标准库里的一些函数来强制定义函数行为,具体请见[0xFF]部分的“处理溢出”
[1-2]...