Skip to content

Add files via upload #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions docs/guide/2024/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,18 @@ NewStar CTF 2024 是由来自 13 所高校的战队联合发起的新生入门

### 协办单位<Text class='desc-text' fontSize='16px' fontWeight='500' content='(以下排名不分先后)' />

- 中国矿业大学计算机科学与技术学院
- 中国矿业大学信息化建设与管理处
- 中国矿业大学开源协会
- 中国矿业大学计算机科学与技术学院
- 中国矿业大学计算机学院科学技术协会
- 东北大学秦皇岛分校网络空间安全创新实验室
- 中国矿业大学开源协会
- 中国人民公安大学信息网络安全学院
- 东北大学秦皇岛分校计算机与通信工程学院
- 东北大学秦皇岛分校网络空间安全创新实验室
- 海南大学网络空间安全协会
- 广东工业大学 A&D 攻防工作室
- 江南大学人工智能与计算机学院
- 浙江师范大学网络安全协会
- 浙江师范大学高等数学协会
- 海南大学网络空间安全协会

### 平台支持

Expand Down
2 changes: 1 addition & 1 deletion docs/guide/2024/week1.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import Container from '@/components/docs/Container.vue'
这题考查的是 HTTP 报文的内容,你可能需要先了解这些内容:

- 什么是 Method、Header、请求体、响应体、状态码
- Cookie 是什么?他有什么作用和特性
- Cookie 是什么?它有什么作用和特性
- User-Agent 的作用是什么?格式又是怎样的?

Header 中有各种各样的 Content-Type,每一种 Content-Type 所要求的请求体的格式可能是不一样的,你也需要了解其不同。
Expand Down
137 changes: 137 additions & 0 deletions docs/guide/2024/week2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
---
titleTemplate: ':title | 参考文档 - NewStar CTF 2024'
---
<script setup>
import Container from '@/components/docs/Container.vue'
import Text from '@/components/docs/NonTextDetectable.vue'
</script>

# Week 2

本周的题将继续在上周的基础上,注重入门知识基础、工具的使用等。从下周开始,题目将逐渐增加难度,希望大家把握好前两周的题目考查内容,为后面的题目做好准备。

## Pwn

### ez_game

<Container type='tip'>

本题考查的是 ret2libc 的知识点。
</Container>

开始这个题目前,你需要先了解以下内容:

- 栈溢出的原理
- PLT 和 GOT 表的关系以及延迟绑定
- 偏移和基地址之间的关系<span data-desc>(如 `puts` 函数相对于 `libc` 基地址的偏移)</span>
- 在 64 位程序下如何实现控制程序的参数
- 了解栈对齐的实现
- 学会寻找 `/bin/sh` 的地址

内容有点多,希望大家能继续玩这个游戏。

### Inverted World

本题考查 ret2backdoor 以及基础的逆向能力。

程序中的 `_read` 函数为自定义的函数,需要分析<span data-desc>(IDA 可能会在反编译的 C 函数窗口把这个函数的名字前面的下划线去掉)</span>。

除此之外还要注意一下栈帧的结构以及函数调用时栈帧的变化。

### Bad Asm

<Container type='tip'>

本题考查 shellcode 编写能力。
</Container>

题目对 shellcode 的要求是:

- 不能直接使用限制的汇编指令
- shellcode 中间不能有空字节。

想想办法绕过这些限制。

可以利用一些在线工具辅助解答:[Online x86 / x64 Assembler and Disassembler](https://defuse.ca/online-x86-assembler.htm#disassembly).

## Web

### 你能在一秒内打出八句英文吗

考查对 Web 自动化脚本的撰写,可以了解下 Python 的 `Requests` 和 `BeautifulSoup` 库,以及 HTTP 会话控制。

### 复读机

<Container type='tip'>

本题考查 Python 中 Flask 框架中,`render_template` 等函数导致的模板渲染注入(SSTI)的利用。
</Container>

对于 Python SSTI,一个简单的例子是,当你输入 `{{ '{'+'{ 3+4 }'+'}' }}`,它将输出了 `7`. 那么,通过精心构造 `{{ '{'+'{ }'+'}' }}` 中的表达式,可以实现任意命令执行。

<Container type='quote'>

在编辑这一段的时候直接写 `{{ '\u0060{'+'{ 3+4 }'+'}\u0060' }}`,导致 Vue 直接渲染了结果 `7`,可以说是现场复现了模板注入了。
</Container>

### 谢谢皮蛋 plus

还是 SQL 注入题,在 Week 1 的基础上增加了一点过滤。选手需要测试过滤了哪些字符,并尝试绕过。

这篇文章总结了一些常见的 SQL 注入:[SQL注入绕过过滤总结](https://yang1k.github.io/post/sql%E6%B3%A8%E5%85%A5%E7%BB%95%E8%BF%87%E5%8E%9F%E7%90%86%E6%80%BB%E7%BB%93/)。

## Misc

### 字里行间的秘密

考查一般的文字隐写形式,可自行搜索相关文字隐写的考点与考查方式。

### 热心助人的小明同学<Text class='desc-text' fontSize='16px' fontWeight='500' content='(内存取证入门)' />

内存取证本质就是解析内存获取计算机某个时间节点的状态信息<span data-desc>(如进程、文件、注册表、浏览记录等)</span>。

我们通常在 CTF 中遇到的内存取证题基本给了一个 `.raw` 文件,需要我们使用工具去解析<span data-desc>(工具用得熟练就赢了)</span>。

对于初学者来说,建议使用 Volatility 作为内存取证的入门工具,你需要做的就是想办法安装这个软件,搜索使用方法,根据题目的指引「一把梭」。

对于针对老旧系统的镜像取证,通常使用 Volatility 2,这也是用的比较多的版本;面对一些新系统的内存镜像可以尝试使用 Volatility 3,这个软件的具体用法,可以尝试使用 `-h` 命令行选项摸索,或自行上网了解。

当然,你也可以借助一些第三方取证工具。在某些题目下,使用一些第三方工具可能会有意想不到的效果。<span data-desc>不过 Week 2 暂时不需要就是了,很简单的。</span>

## Reverse

### Dirty_flowers

考虑到新生在 Week 2 就学会汇编和花指令可能还是有点奢望,因此本题考查的实际上是 IDA 的 nop 操作。

只做出这个题目实际上需要的前置知识非常少,只需要根据题目中的提示信息学会 IDA 如何 patch 汇编指令从而正确反编译。

当然希望同学们可以通过这个题多多学习汇编语言,了解花指令是如何让 IDA 无法正确反编译的。

### ezencrypt

安卓常见的加密手段。

- Java 层有两个加密<span data-desc>(感觉能看成一个呢)</span>
- so 层有两个加密<span data-desc>(感觉只能算一个呢)</span>

请查找有关 Java 层的标准加密方式,Java 层调用 so 层的调用值传递方式。(JNI 怎么传字符串呢?)

这次的题很简单呢。

### Ptrace

<Container type='tip'>

本题考查对于调试器原理的理解,侧重对 ptrace 的了解。
</Container>

这里包含两个文件 `father` 和 `son`,请将两个文件放在同一目录下,并且只需要启动一个文件即可。

所以需要先理清这两个文件的关系,在此过程中,你可能还需要了解 `fork` `execl` 等函数的作用,它们可以帮助你理清文件的关系。

加密的方法很简单,重点关注 ptrace 到底做了什么,改变了什么。

### UPX

选手需要了解 UPX 以及它的加密算法。
4 changes: 2 additions & 2 deletions docs/learn/pwn.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Pwn 需要的不仅是基本的 C 语言、汇编语言以及逆向功底,还

请先确保你具备 Ubuntu<span data-desc>(建议用近几年的 Ubuntu,比如 22.04 LTS、24.04 LTS)</span> 操作系统。随后可以准备以下软件或工具:

- IDA/Ghidra
- IDA/Ghidra<span data-desc>(IDA 为 Windows 平台下的工具)</span>
- pwntools
- gdb 及其插件
- ROPgadget
Expand Down Expand Up @@ -312,7 +312,7 @@ p.interactive()
之后注释掉 `process` 函数与 `gdb.attach` 函数,换 `remote` 函数打远程靶机即可:

```Python
p = remote('hacker.akyuu.space', 6000)
p = remote('120.53.240.208', 6000)
```

![远程利用后门成功](/assets/images/learn/pwn-run-exp-remote_success.png)
Expand Down
2 changes: 2 additions & 0 deletions theme-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ sidebar:
items:
- text: Week 1
link: /guide/2024/week1
- text: Week 2
link: /guide/2024/week2

'/wp/2024/':
- text: Week 1
Expand Down