TGCTF
๐ฉ ๅคฉๆ ผCTF - ๅผๆบCTF็ซ่ตๅนณๅฐ | Open-source CTF Platform โ๏ธ Jeopardy + AWD-F ใพ(โยฐโยฐโ)๏พ๏พ
Install / Use
/learn @NUDTTAN91/TGCTFREADME
๐ฏ ้กน็ฎ็ฎไป
TGCTF๏ผๅคฉๆ ผCTF๏ผ ๆฏไธไธชๅ่ฝๅฎๅ็ CTF๏ผCapture The Flag๏ผ็ฝ็ปๅฎๅ จ็ซ่ตๅนณๅฐ๏ผๆฏๆ Jeopardy ่งฃ้ข่ต ๅ AWD-F ๆป้ฒไฟฎๅค่ต ไธค็งๆฏ่ตๆจกๅผใ
ๅนณๅฐไธไธบ็ฝ็ปๅฎๅ จ็ซ่ต่ฎพ่ฎก๏ผๅ ทๅคๅฎๆด็ๆฏ่ต็ฎก็ใ้ข็ฎ็ฎก็ใ้ไผ็ฎก็ใDocker ๅจๆ้ถๆบใ้ฒไฝๅผๆฃๆตๅๅฎๆถๅคงๅฑ็ๆง็ญๅ่ฝใ
โโโโโโโโโ โโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโ
โโโ โโโ โโโโโโโ โโโ โโโโโโ
โโโ โโโ โโโโโโ โโโ โโโโโโ
โโโ โโโโโโโโโโโโโโโโโ โโโ โโโ
โโโ โโโโโโโ โโโโโโโ โโโ โโโ
ๅคฉๆ ผCTFๅนณๅฐ
๐ ็นๆงๅ่ฝ
๐ฎ ๆฏ่ตๆจกๅผ
| ๆจกๅผ | ๆ่ฟฐ | |------|------| | ๐งฉ Jeopardy | ไผ ็ป่งฃ้ข่ต๏ผ้ๆ่งฃ้ข่ทๅ Flag ๆไบคๅพๅ๏ผๆฏๆไธดๆถ้ข็ฎ | | โ๏ธ AWD-F | ๆป้ฒไฟฎๅค่ต๏ผ้ๆ้ฒๅฎ่ชๅทฑ็้ถๆบๅนถไฟฎๅคๆผๆด |
๐ ๏ธ ๆ ธๅฟๅ่ฝ
<table> <tr> <td width="50%">๐ ๆฏ่ต็ฎก็
- ๐ฏ ๅคๆฏ่ตๅๆถ่ฟ่ก
- โฐ ่ชๅจ็ถๆๅๆข๏ผpending โ running โ ended๏ผ
- ๐ ไธไบไธ่กๅฅๅฑ้ ็ฝฎ
- ๐ข ๆฏ่ตๅ ฌๅ็ณป็ป
- ๐ ็ป็ป้็ฆปไธ้ไผๅฎกๆ ธ
๐ ้ข็ฎ็ณป็ป
- ๐ ้ขๅบ็ฎก็๏ผ่ทจๆฏ่ตๅค็จ
- ๐ ไธดๆถ้ข็ฎ๏ผๆฏ่ตๅ ๅฟซ้ๅๅปบ
- โ๏ธ ไธๅฎ้กน้ๆฉ้ข๏ผๆฏๆๅค้ไธ็ญ้ขๆฌกๆฐ้ๅถ
- ๐ท๏ธ ๅค็ฑปๅซๆฏๆ๏ผWEB/PWN/REVERSE/CRYPTO/MISC...๏ผ
- ๐ ๅจๆ่ฎกๅๆจกๅ
- โฑ๏ธ ๅฎๆถๆพ้ข
- ๐ก ๅคๆ็คบๆฏๆ
๐ณ Docker ๅฎนๅจ
- ๐ ๅจๆ้ถๆบไธ้ฎๅฏๅจ
- ๐ ้ไผ็ฌ็ซ Flag
- โณ TTL ่ชๅจ้ๆฏไธ็ปญๆ
- ๐ฆ ็ซฏๅฃๆฑ ็ฎก็
- ๐ง ่ตๆบ้ๅถ๏ผCPU/ๅ ๅญ๏ผ
๐ ้ฒไฝๅผ็ณป็ป
- ๐ ๅ IP ๅผๅธธๆฃๆต
- ๐จ Flag ๅ ฑไบซๆฃๆต
- ๐ก ๅฎๆถ WebSocket ๆจ้
- ๐ ่ชๅจๅฐ็ฆๆบๅถ
- ๐ IP ่ฝจ่ฟน่ฟฝ่ธช
๐ ๆ่กๆฆ & ๅคงๅฑ
- ๐ฅ ๅฎๆถๆ่กๆฆ
- ๐ ๅๆฐ่ถๅฟๅพ
- ๐ฅ๏ธ ๆฏ่ตๅคงๅฑ็ๆง
- ๐ฉธ ไธไบไธ่กๅ ฌๅ
- ๐ WebSocket ๅฎๆถๆดๆฐ
โ๏ธ AWD-F ไธๅฑ
- ๐ก๏ธ ่กฅไธไธไผ ไธ้ช่ฏ
- ๐ฅ EXP ่ชๅจๆปๅป่ฐๅบฆ
- ๐ ้ฒๅฎๅพๅ็ป่ฎก
- ๐ ๅฎนๅจ้็ฝฎๅ่ฝ
- โฑ๏ธ ๅ จๅฑๆปๅปๅ่ฎกๆถ
๐ก๏ธ ๆๆฏๆ
<table> <tr> <td align="center" width="96"> <img src="https://go.dev/blog/go-brand/Go-Logo/PNG/Go-Logo_Blue.png" width="48" height="48" alt="Go"> <br><strong>Go 1.23</strong> </td> <td align="center" width="96"> <img src="https://raw.githubusercontent.com/gin-gonic/logo/master/color.png" width="48" height="48" alt="Gin"> <br><strong>Gin</strong> </td> <td align="center" width="96"> <img src="https://www.postgresql.org/media/img/about/press/elephant.png" width="48" height="48" alt="PostgreSQL"> <br><strong>PostgreSQL 16</strong> </td> <td align="center" width="96"> <img src="https://www.docker.com/wp-content/uploads/2022/03/vertical-logo-monochromatic.png" width="48" height="48" alt="Docker"> <br><strong>Docker</strong> </td> <td align="center" width="96"> <img src="https://jwt.io/img/pic_logo.svg" width="48" height="48" alt="JWT"> <br><strong>JWT</strong> </td> </tr> </table>ๅ็ซฏ
- ๐ง Go 1.23 - ้ซๆง่ฝๅ็ซฏ่ฏญ่จ
- ๐ Gin - ่ฝป้็บง Web ๆกๆถ
- ๐๏ธ pgx - PostgreSQL ้ฉฑๅจ
- ๐ golang-jwt - JWT ่ฎค่ฏ
- ๐ bcrypt - ๅฏ็ ๅ ๅฏ
ๆฐๆฎๅบ
- ๐พ PostgreSQL 16 - ไธปๆฐๆฎๅบ
ๅฎนๅจๅ
- ๐ณ Docker - ๅจๆ้ถๆบๅฎนๅจ
- ๐ Docker Compose - ๆๅก็ผๆ
ๅ็ซฏ
- ๐จ Tailwind CSS - ๅๅญๅ CSS ๆกๆถ
- โก Alpine.js - ่ฝป้็บง JS ๆกๆถ
- ๐ก WebSocket - ๅฎๆถ้ไฟก
๐ ๅฟซ้ๅผๅง
๐ ๅ็ฝฎ่ฆๆฑ
- Docker & Docker Compose
- Git
โก ไธ้ฎ้จ็ฝฒ
# 1. ๅ
้ไปๅบ
git clone https://github.com/NUDTTAN91/TGCTF.git
cd TGCTF
# 2. ไฟฎๆน้
็ฝฎ๏ผๅฏ้๏ผ
vim docker-compose.yml
# 3. ๅฏๅจๆๅก
docker-compose up -d
# 4. ่ฎฟ้ฎๅนณๅฐ
# ๅๅฐ: http://localhost
# ๅๅฐ: http://localhost/admin/admin.html
๐ ้ป่ฎค่ดฆๅท
[!warning]
โ ๏ธ ็ไบง็ฏๅข่ฏทๅกๅฟ ไฟฎๆน้ป่ฎคๅฏ็ ๏ผ
| ่ดฆๅท | ๅฏ็ | ่ฏดๆ |
|------|------|------|
| tan91 | tan91 | ่ถ
็บง็ฎก็ๅ๏ผ่ฏทไฟฎๆน๏ผ |
๐ ้กน็ฎ็ปๆ
TGCTF/
โโโ ๐ server/ # ๅ็ซฏไปฃ็
โ โโโ ๐ admin/ # ็ฎก็ๅ็ธๅ
ณๆฅๅฃ
โ โ โโโ anti_cheat.go # ๐ ้ฒไฝๅผ็ณป็ป
โ โ โโโ organization.go # ๐ข ็ป็ป็ฎก็
โ โ โโโ settings.go # โ๏ธ ็ณป็ป่ฎพ็ฝฎ
โ โ โโโ team.go # ๐ฅ ้ไผ็ฎก็
โ โ โโโ user.go # ๐ค ็จๆท็ฎก็
โ โโโ ๐ awdf/ # AWD-F ๆจกๅผ
โ โ โโโ container.go # ๐ณ ๅฎนๅจ็ฎก็
โ โ โโโ exp.go # ๐ฅ EXP ๆง่ก
โ โ โโโ patch.go # ๐ง ่กฅไธ็ณป็ป
โ โ โโโ scheduler.go # โฐ ๆปๅป่ฐๅบฆๅจ
โ โโโ ๐ contest/ # ๆฏ่ต็ฎก็
โ โโโ ๐ docker/ # Docker ๅฎนๅจ็ฎก็
โ โโโ ๐ question/ # ้ข็ฎ็ฎก็
โ โโโ ๐ submission/ # Flag ๆไบคไธ่ฎกๅ
โ โโโ ๐ monitor/ # ๅคงๅฑ็ๆง
โ โโโ ๐ logs/ # ็ณป็ปๆฅๅฟ
โ โโโ main.go # ๐ ๅ
ฅๅฃๆไปถ
โ โโโ auth.go # ๐ ่ฎค่ฏ
โ โโโ middleware.go # ๐ ไธญ้ดไปถ
โโโ ๐ web/ # ๅ็ซฏไปฃ็
โ โโโ ๐ admin/ # ็ฎก็ๅๅฐ้กต้ข
โ โโโ *.html # ็จๆท็ซฏ้กต้ข
โโโ ๐ data/ # ๆฐๆฎ็ฎๅฝ
โ โโโ ๐ postgres/ # PostgreSQL ๆฐๆฎ
โ โโโ ๐ uploads/ # ไธไผ ๆไปถ
โ โโโ ๐ attachments/ # ้ข็ฎ้ไปถ
โโโ ๐ณ Dockerfile # Docker ้ๅๆๅปบ
โโโ ๐ docker-compose.yml # ๆๅก็ผๆ
โโโ ๐ init.sql # ๆฐๆฎๅบๅๅงๅ
โโโ ๐ฆ go.mod # Go ไพ่ต
โโโ ๐ README.md # ๆฌๆๆกฃ
โ๏ธ ้ ็ฝฎ่ฏดๆ
๐ง ็ฏๅขๅ้
| ๅ้ๅ | ้ป่ฎคๅผ | ่ฏดๆ |
|--------|--------|------|
| DATABASE_URL | - | PostgreSQL ่ฟๆฅไธฒ |
| JWT_SECRET | change-this-secret | JWT ็ญพๅๅฏ้ฅ |
| ADMIN_USERNAME | tan91 | ่ถ
็บง็ฎก็ๅ็จๆทๅ |
| ADMIN_PASSWORD | - | ่ถ
็บง็ฎก็ๅๅฏ็ |
| SERVER_PORT | 80 | ๆๅก็ซฏๅฃ |
๐ docker-compose.yml ็คบไพ
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: tgctf
POSTGRES_USER: tgctf
POSTGRES_PASSWORD: your-strong-password
app:
build: .
environment:
DATABASE_URL: postgres://tgctf:your-strong-password@db:5432/tgctf
JWT_SECRET: "your-jwt-secret-key"
ADMIN_USERNAME: admin
ADMIN_PASSWORD: "your-admin-password"
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
๐ ็ณป็ปๆถๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ็จๆทๆต่งๅจ โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP/WebSocket
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TGCTF ๅบ็จๆๅกๅจ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Gin Web Framework โ โ
โ โ โโโ API Routes (/api/*) โ โ
โ โ โโโ Admin Routes (/api/admin/*) โ โ
โ โ โโโ Static Files (web/*) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ ๆฏ่ต็ฎก็ โ โ ้ข็ฎ็ณป็ป โ โ Docker โ โ ้ฒไฝๅผ โ โ
โ โ Module โ โ Module โ โ Module โ โ Module โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโผโโโโโโโโ โโโโโโโโโโโผโโโโโโโโโโ
โ PostgreSQL โ โ Docker Engine โ
โ Database โ โ (ๅจๆ้ถๆบๅฎนๅจ) โ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ
๐จ ็้ข้ข่ง
[!tip]
๐ก ๅนณๅฐ้็จๆทฑ่ฒไธป้ข่ฎพ่ฎก๏ผๆฉ้ป้ ่ฒ๏ผ็งๆๆๅ่ถณ๏ผ
็น่ฒ็้ข
- ๐ ้ฆ้กต - ่ตๅๆๅ ้ฃๆ ผ็ๆฌข่ฟ้กต
- ๐ ็ปๅฝ/ๆณจๅ - ๆ็ฎ่ฎพ่ฎก๏ผๅฟซ้ไธๆ
- ๐ฎ ๆฏ่ต้ข็ฎ - ๅก็ๅผๅธๅฑ๏ผๅ็ฑปๆธ ๆฐ
- ๐ ๆ่กๆฆ - ๅฎๆถๆดๆฐ๏ผไธไบไธ่กๆ ่ฎฐ
- ๐ฅ๏ธ ๅคงๅฑ็ๆง - ๆฏ่ตๅฎๆถๅจๆๅฑ็คบ
- โ๏ธ ็ฎก็ๅๅฐ - ๅ่ฝๅฎๅค็็ฎก็็้ข
๐ ๅจๆ่ฎกๅๆจกๅ
TGCTF ้็จ ๆๆฐ่กฐๅๅจๆ่ฎกๅ ๆจกๅ๏ผ
S(N) = Smin + (Smax - Smin) ร e^(-(N-1)/(10รD))
ๅ
ถไธญ๏ผ
- S(N) = ๅฝๅๅๅผ
- Smax = ๅๅงๅๆฐ
- Smin = ๆไฝๅๆฐ
- N = ๅทฒ่งฃๅบ้ไผๆฐ
- D = ้พๅบฆ็ณปๆฐ (1-10)
่ก้ๅฅๅฑ๏ผๅฏ้ ็ฝฎ๏ผ๏ผ
- ๐ฉธ ไธ่ก๏ผๅบ็กๅ +5%
- ๐ฉธ ไบ่ก๏ผๅบ็กๅ +3%
- ๐ฉธ ไธ่ก๏ผๅบ็กๅ +1%
๐ค ่ดก็ฎๆๅ
ๆฌข่ฟๆไบค Issue ๅ Pull Request๏ผ
- Fork ๆฌไปๅบ
- ๅๅปบ็นๆงๅๆฏ (
git checkout -b feature/AmazingFeature) - ๆไบคๆดๆน (
git commit -m 'Add some AmazingFeature') - ๆจ้ๅฐๅๆฏ (
git push origin feature/AmazingFeature) - ๅผๅฏ Pull Request
๐ ๅผๆบๅ่ฎฎ
ๆฌ้กน็ฎ้็จ AGPL-3.0 License ๅผๆบๅ่ฎฎใ
[!warning]
ๅฆๆไฝ ไฟฎๆนไบๆฌ้กน็ฎๅนถ้่ฟ็ฝ็ปๆไพๆๅก๏ผไฝ ๅฟ ้กปๅ ฌๅผไฝ ็ไฟฎๆนๅ็ๆบไปฃ็ ใ
่ฏฆ่ง LICENSE ๆไปถใ
๐จโ๐ป ไฝ่
<table> <tr> <td align="center"> <a href="https://github.com/NUDTTAN91"> <img src="web/assets/hacker.png" width="100px;" alt="tan91"/> <br /> <sub><b>tan91</b></sub> </a> <br /> <a href="https://github.com/NUDTTAN91" title="GitHub">๐ GitHub</a> <br /> <a href="https://blog.csdn.net/ZXW_NUDT" title="Blog">๐ CSDN</a> </td> </tr> </table><p align="center"> <strong>Made with โค๏ธ by tan91</strong> </p> <p align="center"> Copyright ยฉ 2021-present tan91. All Rights Reserved. </p>
๐ธ ้กน็ฎๆชๅพ
<details> <summary>๐ <b>้ฆ้กต & ็ปๅฝ</b></summary> <br>
















