글
← 전체 글CTF / CTF 디스코드 구축

명령어

명령어

명령어기능
/setup서버 채널 및 역할 자동 구성
/add-prob분야·문제명 선택 후 채널 생성
/solve현재 문제 해결 처리
/unsolve해결 처리 취소
/edit-prob문제 이름·분야·점수 수정
/delete-prob문제 채널 삭제
/help사용 가능한 명령어 안내

대충 이정도 구현하면 되지 않을까 생각했음

setup 명령어

기능

처음 앱 초대 후 대회 운영에 필요한 기본 채널과 카테고리를 자동 생성한다.

동작 과정

/setup 명령어를 실행하면 다음과 같이 디렉터리가 만들어짐

1
2
3
4
5
6
7
8
9
10
11
12
13
14
🏆 CTF SERVER
│
├── 📌 INFORMATION
│   └── 📋・대회정보
│
├── 🎯 CHALLENGES
│   └── (문제 등록 시 자동 생성)
│
├── 💬 TEAM
│   ├── 💬・자유채팅
│   └── 📝・라이트업
│
└── 🔊 VOICE
    └── General

해당 명령어를 구현할 때 다음과 같은 것들을 고려했음

  1. 여러 번 호출해도 채널이 중복 생성되지 않고 기존 채팅 및 파일은 유지한다.
  2. 문제 생성 시 디스코드 포럼이나 쓰레드 형식이 아닌 일반 텍스트 채널 형태로 생성한다.

CTFtime 연동

CTFtime 은 대회 API를 입력하면 대회 이름, 시작 및 종료 날짜/시간, 공식 대회 홈페이지 주소, 대회 형식, 주최자 정보, 장소 등의 정보를 받을 수 있음 따라서 해당 기능을 활용하여 CTFTime 에 등록된 대회라면 자동으로 정보를 불러와서 보여줄 수 있음

/setup 명령 실행 시 봇이 다음과 같은 명령을 보여줌

1
2
3
4
5
6
7
8
🏆 CTF 서버 초기 설정

대회 서버를 자동으로 구성합니다.

📌 대회 정보를 어떻게 등록할까요?

[🌐 CTFtime에서 불러오기]
[⏭️ 건너뛰고 시작하기]

ctftime 에서 불러오기 버튼을 누르면 입력창이 표시됨

1
2
3
4
5
6
7
8
9
10
┌────────────────────────────────────┐
│     🌐 CTFtime 대회 등록           │
│                                    │
│  CTFtime 대회 URL                  │
│  ┌──────────────────────────────┐  │
│  │ https://ctftime.org/event/  │  │
│  └──────────────────────────────┘  │
│                                    │
│                        [제출]      │
└────────────────────────────────────┘

CTFtime은 공식 API로 특정 대회의 정보를 조회하는 기능을 제공해서 ID 기반으로 대회 정보가 자동으로 생성될 수 있음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
🏆 ACDC 2026
│
├── 📌 INFORMATION
│   └── 📋・대회정보  ← CTFtime 정보 자동 등록
│
├── 🎯 CHALLENGES
│
├── 💬 TEAM
│   ├── 💬・자유채팅
│   └── 📝・라이트업
│
└── 🔊 VOICE
    └── General

📅 Discord 예정 이벤트
└── 🏆 ACDC 2026

image

이렇게 알아서 이벤트까지 등록해줌

add-prob — 새로운 CTF 문제 등록

문제의 분야와 이름을 입력하면 해당 문제의 디스코드 채널을 자동 생성한다. 명령어를 실행하면 다음과 같이 분야 선택 모달이 나옴

1
2
3
4
5
6
7
8
9
10
11
[ 🌐 Web                     ▼ ]

  🌐 Web
  💥 Pwn
  🔐 Crypto
  🔍 Reversing
  🔎 Forensics
  🧩 Misc
  🤖 AI
  📦 Blockchain
  🔒 개인정보보호

분야 선택 후 디스코드 입력창이 나타나고 문제 이름을 입력할 수 있음

1
2
3
4
5
6
7
8
9
10
11
┌─────────────────────────────────────┐
│                                     │
│  새로운 문제 등록                    │
│                                     │
│  문제 이름 *                        │
│  ┌───────────────────────────────┐  │
│  │ Login Bypass                  │  │
│  └───────────────────────────────┘  │
│                                     │
│                 [문제 생성하기]      │
└─────────────────────────────────────┘

그럼 채널이 자동으로 생성된다.

1
2
🎯 CHALLENGES
└── 🌐・web-login-bypass
  • 해당 명령어를 구현할 때 주의했던 점은 다음과 같음
    • 문제별 디스코드 일반 텍스트 채널이 생성된다.
    • 동일한 문제가 중복 생성되지 않도록 확인한다.

solve - 문제 해결

명령어 요구 사항

해당 명령어를 실행하면

  • 현재 문제를 해결 완료 상태로 변경한다.
  • 해결한 사용자와 해결 시각을 자동으로 기록한다. (해결 시각은 한국 시간(KST)을 기준으로 표시한다.)
  • 해결된 문제 채널을 자동으로 정렬하고 문제 정보 카드를 갱신한다. (해결된 문제는 맨 아래로 이동함.)
  • 해결 기록을 DB에 저장해서 봇 재시작 후에도 유지함
  • 해결 취소 후 다시 해결하면 새로운 기록으로 갱신된다.
  • 해당 문제 채널에서 명령어를 실행하면 문제 이름은 따로 입력하지 않아도 된다.
  • 이미 해결된 문제에 다시 실행해도 오류나 중복 처리가 되지 않는다.

라이트업 작성

문제가 해결처리가 되고 나면 다음과 같은 화면이 됨

1
2
3
4
5
6
7
8
9
10
✅ Login Bypass

📂 분야: Web
📌 상태: ✅ 해결 완료

👤 해결 신고자: @승훈
🕒 해결 시각: 2026.10.13 22:45

[📝 Write-up 작성]
[↩️ 해결 취소] [⚙️ 문제 관리]

라이트업 작성을 통해서 빠르게 라이트업 작성이 가능함

1
2
3
4
5
6
7
8
9
10
📝 Login Bypass — Write-up

풀이 내용:
┌──────────────────────────────┐
│ 1. 로그인 요청 분석           │
│ 2. SQL Injection 발견        │
│ 3. 인증 우회 성공             │
└──────────────────────────────┘

           [등록하기]

이후 등록이 완료되면 팀 라이트업 채널에 자동으로 게시됨. 또한 문제 카드의 버튼도 변경됨

1
2
3
4
5
6
7
8
9
10
11
✅ Login Bypass

📂 분야: Web
📌 상태: ✅ 해결 완료

👤 해결 신고자: @승훈
🕒 해결 시각: 2026.10.13 22:45

[📖 Write-up 보기]
[✏️ Write-up 수정]
[⚙️ 문제 관리]

image-2

이런식으로 공유 라이트업도 작성 가능 다만 음… 굳이 있어야 하나 싶었음 그냥 md 파일 올리면 되는거라 ;;

unsolve - 문제 해결 취소

해당 명령어를 실행하면 해결 완료로 표시된 문제를 다시 미해결 상태로 변경한다.

지켜야 하는 규칙들은 다음과 같음

  • 현재 채널의 문제를 자동 인식한다.
  • 문제 상태를 SOLVED → UNSOLVED로 변경한다.
  • ✅ 표시를 기존 분야 이모지로 복구한다.
  • 미해결 문제 그룹의 맨 아래로 이동한다.
  • 문제 정보 카드의 상태를 갱신한다.

edit-prob - 문제 정보 수정

현재 문제의 이름이나 분야 변경

구현 요구사항

  • 현재 문제 채널을 자동 인식한다.

  • 수정할 항목을 선택한다.

  • 새로운 정보를 입력하거나 선택한다.

  • Discord 채널 이름과 저장된 문제 정보를 함께 수정한다.

    항목수정 방법
    문제 이름입력창에서 변경
    문제 분야드롭다운 메뉴에서 선택
  • 문제 채널을 새로 만들지 않는다.

  • 기존 채팅과 파일은 유지된다.

  • 이미 해결된 문제라면 해결 상태를 유지한다.

delete-prob - 문제 삭제

등록된 문제와 해당 디스코드 채널을 삭제한다.

요구 사항

  • 현재 문제 채널을 자동 인식한다.

  • 삭제 확인 메시지를 표시한다.

  • 사용자가 삭제를 승인하면 해당 채널을 삭제한다.

  • 저장된 문제 정보를 삭제 상태로 변경한다.

    1
    2
    3
    4
    5
    6
    7
    
    ⚠️ 문제 삭제
    
    Login Bypass 문제를 삭제하시겠습니까?
    
    문제 채널과 기존 메시지가 삭제됩니다.
    
    [취소] [삭제 확인]
    
  • 채널 삭제 시 기존 채팅과 첨부파일도 함께 삭제된다.

  • 삭제한 디스코드 채널은 일반적으로 복구가 불가능하다.

  • 서버 관리자 또는 채널 관리 권한이 있는 사용자만 실행할 수 있다.

help - 명령어 도움말

봇에서 사용 가능한 명령어 사용 방법을 안내함

  • 출력 예시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    📖 CTF BOT HELP
    
    서버 설정
    /setup       서버 기본 구조 생성
    
    문제 관리
    /add-prob    새로운 문제 등록
    /solve       문제 해결 완료
    /unsolve     해결 상태 취소
    /edit-prob   문제 이름·분야 수정
    /delete-prob 문제 삭제
    
    도움말
    /help        명령어 목록 확인
    

요구사항

  • 서버 내 어디서든 실행할 수 있다.