diff --git a/docs/wp/2024/week2/crypto/chalichaqi.md b/docs/wp/2024/week2/crypto/chalichaqi.md index f35e7e4..cc6657a 100644 --- a/docs/wp/2024/week2/crypto/chalichaqi.md +++ b/docs/wp/2024/week2/crypto/chalichaqi.md @@ -14,7 +14,7 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' ```python v2 = 0 -derta = 462861781278454071588539315363 +delta = 462861781278454071588539315363 v3 = 489552116384728571199414424951 v4 = 469728069391226765421086670817 v5 = 564098252372959621721124077407 @@ -25,10 +25,10 @@ v0 = 190997821330413928409069858571234 v1 = 137340509740671759939138452113480 for i in range( 32 ): - v2 += derta ; v2 %= p + v2 += delta ; v2 %= p for i in range(32): - v2 -= derta ; v2 %= p + v2 -= delta ; v2 %= p v0 -= (v1+v2) ^ ( 8*v1 + v5 ) ^ ( (v1>>7) + v6 ) ; v0 %= p v1 -= (v0+v2) ^ ( 8*v0 + v3 ) ^ ( (v0>>7) + v4 ) ; v1 %= p diff --git a/docs/wp/2024/week2/crypto/just-one-and-more-than-two.md b/docs/wp/2024/week2/crypto/just-one-and-more-than-two.md index 6f04388..82f539c 100644 --- a/docs/wp/2024/week2/crypto/just-one-and-more-than-two.md +++ b/docs/wp/2024/week2/crypto/just-one-and-more-than-two.md @@ -4,7 +4,7 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' # just one and more than two -很常见的RSA板子题。在一般的RSA中,我们有 +很常见的 RSA 板子题。在一般的 RSA 中,我们有 $$\varphi(n)= \varphi(p)*\varphi(q)=(p-1)(q-1)$$ @@ -14,7 +14,7 @@ $$\varphi(n)= \varphi(p)*\varphi(q)=(p-1)(q-1)$$ $$\varphi(n)=\varphi(p)=p-1$$ -针对 more than two 的情况 +针对 more than two 的情况: $$\varphi(n)=\varphi(p)*\varphi(q)*\varphi(r)=(p-1)(q-1)(r-1)$$ diff --git a/docs/wp/2024/week2/crypto/since-you-know-something.md b/docs/wp/2024/week2/crypto/since-you-know-something.md index df736fb..81d5ea9 100644 --- a/docs/wp/2024/week2/crypto/since-you-know-something.md +++ b/docs/wp/2024/week2/crypto/since-you-know-something.md @@ -22,7 +22,7 @@ c=218950457292639210021937048771508243745941011391746420225459726647571 ''' ``` -又是简单的签到题,出现了上周的老朋友 `xor()`. +又是简单的签到题,出现了上周的老朋友 `xor()` 此题注释非常重要,希望新生能够充分地利用泄露的信息,即 flag 的前一部分 diff --git a/docs/wp/2024/week2/misc/xiaoming1.md b/docs/wp/2024/week2/misc/xiaoming1.md index 1c21599..e58cfe0 100644 --- a/docs/wp/2024/week2/misc/xiaoming1.md +++ b/docs/wp/2024/week2/misc/xiaoming1.md @@ -18,7 +18,7 @@ import Container from '@/components/docs/Container.vue' >小明的邻居小红忘记了电脑的登录密码,好像设置的还挺复杂的, 现在小红手里只有一个内存镜像(为什么她会有这个?),小明为了帮助邻居就找到了精通电脑的你…… -拿到手的是一个叫 `image.raw` 的文件,由题可知是内存镜像 +拿到手的是一个叫 `image.raw` 的文件,由题可知是内存镜像。 ## 不像预期的预期解:使用 Volatility 2 一把梭 @@ -26,7 +26,7 @@ import Container from '@/components/docs/Container.vue' 如果新人在安装过程中出现了一些问题,也没有 Kali 虚拟机,可以先尝试 Windows 下的 Volatility 2 单文件版,当然大家也可以选择其他第三方取证软件,这里不多说了,因为一些第三方软件能一把梭。 -这里以 Volatility 2 为例,在使用 Volatility 2 进行取证时,首先分析镜像确定镜像的来源操作系统版本,为进行下面操作做准备 +这里以 Volatility 2 为例,在使用 Volatility 2 进行取证时,首先分析镜像确定镜像的来源操作系统版本,为进行下面操作做准备。 ```bash vol.py -f image.raw imageinfo diff --git a/docs/wp/2024/week2/pwn/bad-asm.md b/docs/wp/2024/week2/pwn/bad-asm.md index 2d3122f..2571cfc 100644 --- a/docs/wp/2024/week2/pwn/bad-asm.md +++ b/docs/wp/2024/week2/pwn/bad-asm.md @@ -14,7 +14,7 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' 可以用异或先把 syscall 的机器码插入到当前 shellcode 的后面来执行 `read` 的 syscall,利用 `read` 在旧的 shellcode 后面插入 `execve("/bin/sh", 0, 0)` 的 shellcode,第二次输入的 payload 中 `0x42` 个 `a` 的作用是覆盖掉旧的 shellcode,毕竟执行过了也没用了。 -恢复 `rsp` 的作用是为了能够正常执行 `push` `pop` 指令,这里 `push` `pop` 指令位于 `shellcraft.sh()` 生成的 shellcode中 。否则其生成的 shellcode 无法正常执行。 +恢复 `rsp` 的作用是为了能够正常执行 `push` `pop` 指令,这里 `push` `pop` 指令位于 `shellcraft.sh()` 生成的 shellcode 中 。否则其生成的 shellcode 无法正常执行。 ```python # sudo sysctl -w kernel.randomize_va_space=0 @@ -71,7 +71,7 @@ mov byte ptr [r8 + 0x18], 0x5 ```python # sudo sysctl -w kernel.randomize_va_space=0 from pwn import * -from Crypto.Util.number import long_to_bytes,bytes_to_long +from Crypto.Util.number import long_to_bytes, bytes_to_long context.log_level='debug' context(arch='amd64', os='linux') @@ -90,7 +90,7 @@ add sp, 0x0848 ; // 给 rsp 一个合法值,使程序能正常执行 push/pop mov rsi, 0x4028636f2e49226f mov rdx, 0x4040104040204040 xor rsi, rdx -push rsi ; //异或搓出来'/bin/sh\x00'(正好 8 字节,一个寄存器能存下) 并p ush 到栈上面。此时 rsp 指向的即此字符串的开始位置 +push rsi ; // 异或搓出来'/bin/sh\x00'(正好 8 字节,一个寄存器能存下) 并 push 到栈上面。此时 rsp 指向的即此字符串的开始位置 mov ax, 0x454f xor ax, 0x4040 @@ -108,12 +108,12 @@ p.sendafter("Input your Code :", asm(shellcode).ljust(0x40, b'\x90')) p.interactive() ``` -除此之外,由于我们把栈放在可执行段上面了,我们可以直接异或整出来syscall的机器码然后push到栈上面,最后jmp rsp即可。由于这种方法我们并不依赖nop指令进行连接,在送payload的时候可以去掉ljust了 +除此之外,由于我们把栈放在可执行段上面了,我们可以直接异或整出来 syscall 的机器码然后 push 到栈上面,最后 `jmp rsp` 即可。由于这种方法我们并不依赖 `nop` 指令进行连接,在送 Payload 的时候可以去掉 `ljust` 了。 ```python # sudo sysctl -w kernel.randomize_va_space=0 from pwn import * -from Crypto.Util.number import long_to_bytes,bytes_to_long +from Crypto.Util.number import long_to_bytes, bytes_to_long context.log_level='debug' context(arch='amd64', os='linux') @@ -132,7 +132,7 @@ add sp, 0x0848 ; // 给 rsp 一个合法值,使程序能正常执行 push/pop mov rsi, 0x4028636f2e49226f mov rdx, 0x4040104040204040 xor rsi, rdx -push rsi ; //异或搓出来 '/bin/sh\x00' 并 push 到栈上面。此时 rsp 指向的即此字符串的开始位置 +push rsi ; // 异或搓出来 '/bin/sh\x00' 并 push 到栈上面。此时 rsp 指向的即此字符串的开始位置 mov rdi, rsp ; // 设置 rdi,指向之前push到栈上面的 '/bin/sh\x00' xor rsi, rsi @@ -151,9 +151,9 @@ p.sendafter("Input your Code :", asm(shellcode)) p.interactive() ``` -在把 `/bin/sh\x00` push 到栈上面的时候我们为了清除最后的 `0x00`,采用了异或的方法。除了这种方法外我们可以调整一下这个字符串,比如我们可以改为使用 `/bin///sh`,`shellcraft.sh()` 生成的 shellcode 采用的就是这种方法。 +在把 `/bin/sh\x00` push 到栈上面的时候,我们为了清除最后的 `0x00`,采用了异或的方法。除了这种方法外我们可以调整一下这个字符串,比如我们可以改为使用 `/bin///sh`,`shellcraft.sh()` 生成的 shellcode 采用的就是这种方法。 -按照这种方法更改的 shellcode,也是可以拿到 shell 的 +按照这种方法更改的 shellcode,也是可以拿到 shell 的。 ```python shellcode=''' diff --git a/docs/wp/2024/week2/pwn/ez-game.md b/docs/wp/2024/week2/pwn/ez-game.md index 3a0ba36..8a1ff1e 100644 --- a/docs/wp/2024/week2/pwn/ez-game.md +++ b/docs/wp/2024/week2/pwn/ez-game.md @@ -14,9 +14,8 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' 直接打 ret2libc(但是得进行栈对齐) -1.先通过 puts 泄露出 puts 地址,通过 puts 地址与 libc 基地址的偏移得到 libc 基地址,并返回 `main` 函数进行第二次溢出,实现 getshell - -2.构建 `system("/bin/sh")` 取 shell +1. 先通过 puts 泄露出 puts 地址,通过 puts 地址与 libc 基地址的偏移得到 libc 基地址,并返回 `main` 函数进行第二次溢出,实现 getshell +2. 构建 `system("/bin/sh")` 取 shell :::tip 提示 可以用 ret 地址进行栈对齐 diff --git a/docs/wp/2024/week2/pwn/inverted-world.md b/docs/wp/2024/week2/pwn/inverted-world.md index 503c099..dfba5de 100644 --- a/docs/wp/2024/week2/pwn/inverted-world.md +++ b/docs/wp/2024/week2/pwn/inverted-world.md @@ -30,7 +30,7 @@ int __fastcall main(int argc, const char **argv, const char **envp) `_read` 实现的是和正常 `read` 相反方向进行输入,我们这里输入的长度 `0x512` 明显大于 255,可以写到低地址的栈帧的东西,我们劫持位于低地址的 `_read` 函数的返回地址到 backdoor 中间的部分(因为劫持到开头过不了检测)。 -反向输入 `sh` 即可执行 `system("sh")` 拿到shell. +反向输入 `sh` 即可执行 `system("sh")` 拿到 shell. :::info 关于 Canary 因为是反向输入的,只要不多写东西就不会修改到 Canary,自然就不用故意绕过 Canary. diff --git a/docs/wp/2024/week2/pwn/my-gbc.md b/docs/wp/2024/week2/pwn/my-gbc.md index e8733ea..f68fd7b 100644 --- a/docs/wp/2024/week2/pwn/my-gbc.md +++ b/docs/wp/2024/week2/pwn/my-gbc.md @@ -49,9 +49,9 @@ __int64 __fastcall encrypt(__int64 a1, char a2, int a3) ![ret2csu](/assets/images/wp/2024/week2/my-gbc_1.png) -这是 csu 的代码片段,第一段代码能将 `r12` `r13` `r14`分别 mov 到 `rdi` `rsi` `rdx`,这样我们便能控制 `rdx`,即控制函数的三参,并且后面还有 `call [r15+rbx*8]`,能控制程序的走向;第二段代码则是一长串的 `pop`,配合上述代码,即可达到 ROP,控制程序流程 +这是 csu 的代码片段,第一段代码能将 `r12` `r13` `r14` 分别 mov 到 `rdi` `rsi` `rdx`,这样我们便能控制 `rdx`,即控制函数的三参,并且后面还有 `call [r15+rbx*8]`,能控制程序的走向;第二段代码则是一长串的 `pop`,配合上述代码,即可达到 ROP,控制程序流程 -需要注意的是,call 后面有 `add rbx, 1;` `cmp rbp, rbx;` `jnz` ...,我们需要控制 `rbx = 0` `rbp = 1` +需要注意的是,`call` 后面有 `add rbx, 1;` `cmp rbp, rbx;` `jnz` ...,我们需要控制 `rbx = 0` `rbp = 1` 对于加密函数,异或和左移都是可逆运算,我们只需对我们输入的内容先右移后异或 `0x5A` 即可 diff --git a/docs/wp/2024/week2/reverse/Ezencypt.md b/docs/wp/2024/week2/reverse/ezencypt.md similarity index 100% rename from docs/wp/2024/week2/reverse/Ezencypt.md rename to docs/wp/2024/week2/reverse/ezencypt.md diff --git a/docs/wp/2024/week2/reverse/pangbai-terra1.md b/docs/wp/2024/week2/reverse/pangbai-terra1.md index f69abc8..6c79ffc 100644 --- a/docs/wp/2024/week2/reverse/pangbai-terra1.md +++ b/docs/wp/2024/week2/reverse/pangbai-terra1.md @@ -18,7 +18,7 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' ![反调试相关代码](/assets/images/wp/2024/week2/pangbai-terra1_3.png) -逻辑是,当检测到你调试的时候,你的 key 会被异或替换成错误的 key,但是如果你正常运行,key 会被替换异或成正确的 key. +逻辑是:当检测到你调试的时候,你的 key 会被异或替换成错误的 key,但是如果你正常运行,key 会被替换异或成正确的 key - 解法 1:直接把反调试函数 `nop` 掉,不太推荐,对汇编不太熟悉的话会报错 @@ -26,10 +26,10 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' ![改跳转法](/assets/images/wp/2024/week2/pangbai-terra1_4.png) - 断到这里的时候,改 `jz` 为 `jnz` 或者,改 ZF 寄存器,就可以跳到正确的 key,得到正确的 flag. + 断到这里的时候,改 `jz` 为 `jnz` 或者,改 ZF 寄存器,就可以跳到正确的 key,得到正确的 flag -- 解法3:装自动绕过反调试插件,小幽灵 +- 解法 3:装自动绕过反调试插件,小幽灵 ![插件法](/assets/images/wp/2024/week2/pangbai-terra1_5.png) - 得到正确的 flag 和 key,如果还没学到调试的话,其实看逻辑应该也可能解出这题。 + 得到正确的 flag 和 key,如果还没学到调试的话,其实看逻辑应该也可能解出这题 diff --git a/docs/wp/2024/week2/reverse/Ptrace.md b/docs/wp/2024/week2/reverse/ptrace.md similarity index 100% rename from docs/wp/2024/week2/reverse/Ptrace.md rename to docs/wp/2024/week2/reverse/ptrace.md diff --git a/docs/wp/2024/week2/reverse/UPX.md b/docs/wp/2024/week2/reverse/upx.md similarity index 99% rename from docs/wp/2024/week2/reverse/UPX.md rename to docs/wp/2024/week2/reverse/upx.md index da762d6..0e57b12 100644 --- a/docs/wp/2024/week2/reverse/UPX.md +++ b/docs/wp/2024/week2/reverse/upx.md @@ -10,7 +10,7 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' ![很复杂的主函数](/assets/images/wp/2024/week2/upx_1.png) -这时根据文件的名称和提示,和 UPX 相关联。直接搜索 UPX,可以得知它是可执行程序文件压缩器,是一种压缩壳。在程序启动时先执行 UPX 的代码,把压缩后的原文件解压后,再把控制流转到原文件。然后这里可以使用 DIE 进行查看,特征也显示为 UPX。 +这时根据文件的名称和提示,和 UPX 相关联。直接搜索 UPX,可以得知它是可执行程序文件压缩器,是一种压缩壳。在程序启动时先执行 UPX 的代码,把压缩后的原文件解压后,再把控制流转到原文件。然后这里可以使用 DIE 进行查看,特征也显示为 UPX. ![DIE 的查看结果](/assets/images/wp/2024/week2/upx_2.png) diff --git a/docs/wp/2024/week2/web/fuduji.md b/docs/wp/2024/week2/web/fuduji.md index fe10ccd..33d85cf 100644 --- a/docs/wp/2024/week2/web/fuduji.md +++ b/docs/wp/2024/week2/web/fuduji.md @@ -8,9 +8,7 @@ titleTemplate: ':title | WriteUp - NewStar CTF 2024' 输入 `{{ '{'+'{ 7*7 }'+'}' }}` 的时候,输出的结果是 49,说明存在 SSTI 注入 -当输入 `{{ '{'+'{ [].__class__} '+'}' }}` - -发现 bot 显示不喜欢上课,说明 `class` 被过滤了,可以使用简单的拼接绕过 +输入 `{{ '{'+'{ [].__class__}'+'}' }}`,发现 bot 显示不喜欢上课,说明 `class` 被过滤了,可以使用简单的拼接绕过 ```python {{'{'+`{[]['__cl'+'ass__']}`+'}'}} diff --git a/docs/wp/2024/week2/web/pangbai2.md b/docs/wp/2024/week2/web/pangbai2.md index 4e02662..6053e4a 100644 --- a/docs/wp/2024/week2/web/pangbai2.md +++ b/docs/wp/2024/week2/web/pangbai2.md @@ -109,7 +109,7 @@ if ($_POST['papa'] !== 'TfflxoU0ry7c') { 后面的考点是 PHP 中关于非法参数名传参问题。我们重点关注下面这个表达式: -```PHP +```php $_GET['NewStar_CTF.2024'] !== 'Welcome' && preg_match('/^Welcome$/', $_GET['NewStar_CTF.2024']) ``` @@ -119,7 +119,7 @@ $_GET['NewStar_CTF.2024'] !== 'Welcome' && preg_match('/^Welcome$/', $_GET['NewS 如果加 `D` 修饰符,就不匹配换行符: -```python +```php preg_match('/^Welcome$/D', "Welcome\n") ```