Web Hacking CTF Practice

12 / 41 solved
Scoreboard →

1. 숨겨진 페이지

✓ Solved
Warm-up Information Disclosure

이 웹사이트에는 숨겨진 비밀 페이지가 있습니다. 찾을 수 있나요?

힌트: 웹 크롤러가 접근하면 안 되는 곳은 어디에 적혀있을까요?

도전하기

2026-03-01 22:13:10 KST

2. 관리자 로그인

✓ Solved
Easy SQL Injection

관리자 계정으로 로그인하면 FLAG를 얻을 수 있습니다. 비밀번호를 모르지만... 방법이 있을까요?

힌트: SQL을 잘 활용해보세요.

도전하기

2026-03-01 22:13:25 KST

3. Ping 유틸리티

✓ Solved
Easy Command Injection

서버의 Ping 도구를 사용해보세요. 하지만 이 도구는 좀 위험할 수도...?

힌트: /flag.txt 파일을 읽어보세요.

도전하기

2026-03-01 22:13:45 KST

4. 파일 뷰어

✓ Solved
Easy Path Traversal

서버의 파일을 볼 수 있는 뷰어입니다. 원래 볼 수 없는 파일도 볼 수 있을까요?

힌트: /secret/flag.txt 경로에 비밀이 있습니다.

도전하기

2026-03-01 22:14:10 KST

5. 쿠키 조작

✓ Solved
Medium Broken Authentication

이 페이지는 쿠키로 사용자 권한을 관리합니다. 관리자 권한을 얻을 수 있나요?

힌트: 쿠키 값이 Base64로 인코딩되어 있습니다. 디코딩해서 내용을 바꿔보세요.

도전하기

2026-03-01 22:15:41 KST

6. 메모 시스템

✓ Solved
Medium IDOR

사용자별 메모 시스템입니다. 내 메모만 볼 수 있어야 하는데... 다른 사용자의 메모도 볼 수 있을까요?

힌트: 메모 ID를 바꿔보세요. 관리자의 메모 ID는 뭘까요? 0부터 시도해보세요.

도전하기

2026-03-01 22:16:55 KST

7. 인사장 생성기

✓ Solved
Medium SSTI

이름을 입력하면 인사장을 만들어줍니다. 서버가 입력을 너무 신뢰하고 있는 것 같은데...

힌트: {{7*7}}를 입력해보세요. 서버가 계산을 하나요? 그렇다면 {{config}}도 시도해보세요.

도전하기

2026-03-01 22:18:16 KST

8. 관리자 패널

🔒
Medium Header Manipulation

내부 네트워크에서만 접근 가능한 관리자 패널입니다. 외부에서 접근을 우회할 수 있나요?

힌트: X-Forwarded-For 헤더를 알고 있나요? 페이지 소스 코드도 꼼꼼히 살펴보세요.

도전하기

9. 사용자 검색

🔒
Hard Blind SQL Injection

사용자 검색 기능이 있습니다. 하지만 결과는 '있다/없다'만 알려줍니다. 숨겨진 데이터를 추출할 수 있나요?

힌트: Boolean 기반 Blind SQLi입니다. admin' AND SUBSTR(secret,1,1)='F' -- 같은 방식으로 한 글자씩 추출해보세요.

도전하기

10. JWT 인증

🔒
Hard JWT Forgery

JWT 토큰으로 인증하는 시스템입니다. 토큰을 위조해서 관리자가 될 수 있나요?

힌트: JWT는 Header.Payload.Signature 구조입니다. Header의 alg 필드를 none으로 바꾸면 서명 검증을 우회할 수 있을까요?

도전하기

11. URL 미리보기

🔒
Hard SSRF

URL을 입력하면 미리보기를 보여줍니다. 서버가 대신 요청을 보내는데... 내부 시스템에도 접근할 수 있을까요?

힌트: 서버가 URL을 대신 가져옵니다. http://127.0.0.1:5000/으로 내부 엔드포인트에 접근해보세요. /internal/ 경로가 있을지도...

도전하기

12. 비밀번호 초기화

🔒
Hard Broken Crypto

비밀번호 초기화 시스템입니다. 토큰 생성 방식에 취약점이 있어 보이는데... 관리자 토큰을 예측할 수 있나요?

힌트: 다른 사용자로 초기화를 요청하면 토큰이 보입니다. 패턴을 파악해보세요. MD5(username:r3s3t)가 아닐까요?

도전하기

13. 댓글 시스템

🔒
Medium XSS

댓글을 작성할 수 있는 게시판입니다. 관리자 봇이 주기적으로 댓글을 확인하는데... 악성 스크립트를 삽입할 수 있을까요?

힌트: 입력한 댓글이 그대로 화면에 출력됩니다. <script>alert(1)</script> 같은 XSS 페이로드를 시도해보세요.

도전하기

14. 비밀 API

🔒
Medium HTTP Verb Tampering

관리자 전용 API입니다. GET과 POST 요청이 차단되어 있는데... 다른 방법이 있을까요?

힌트: HTTP에는 GET, POST 외에도 PUT, DELETE, PATCH 등의 메소드가 있습니다. curl -X PUT을 사용해보세요.

도전하기

15. CTF 상점

🔒
Medium Business Logic

CTF 상점에서 비밀 FLAG 아이템을 구매하세요. 하지만 잔액이 부족합니다... 가격을 속일 수 있을까요?

힌트: 폼에 숨겨진(hidden) 필드가 있습니다. 브라우저 개발자 도구(F12)로 hidden input의 값을 수정해보세요.

도전하기

16. 설정 페이지

🔒
Medium Sensitive Data Exposure

시스템 설정 대시보드입니다. 최근 설정 파일이 마이그레이션되었다는데... 이전 파일이 아직 남아있을까요?

힌트: 설정 파일 경로가 /challenge16/config입니다. 개발자가 백업 파일(.bak)을 삭제하지 않았을 수도 있습니다. 페이지 소스도 확인해보세요.

도전하기

17. 안전한 로그인

🔒
Medium Open Redirect

로그인 후 마이페이지로 이동하는 시스템입니다. 리다이렉트 경로를 조작해서 관리자 비밀 페이지에 접근할 수 있을까요?

힌트: 폼에 next라는 hidden 필드가 있습니다. 이 값을 다른 경로로 바꿔보세요. 페이지 소스의 HTML 주석도 확인해보세요.

도전하기

18. 회원가입

🔒
Medium Mass Assignment

회원가입 폼입니다. 서버가 폼 데이터를 너무 관대하게 처리하고 있는 것 같은데... 관리자 권한으로 가입할 수 있을까요?

힌트: 폼에는 usernameemail만 있지만, 서버는 모든 파라미터를 처리합니다. role=admin을 추가해보세요.

도전하기

19. API 인증

🔒
Medium Information Disclosure

API 키 인증이 필요한 시스템입니다. API 키가 어딘가에 노출되어 있을까요?

힌트: JavaScript 소스 코드를 확인해보세요. 개발자가 Base64로 인코딩한 API 키를 주석에 남겼을 수 있습니다.

도전하기

20. 관리자 PIN

🔒
Medium API Misconfiguration

관리자 PIN 인증 시스템입니다. PIN을 모르지만, 시스템 API에서 정보가 새어나오고 있을지도...

힌트: /challenge20/api/status API를 호출해보세요. 디버그 모드가 켜져 있다면 민감한 정보가 노출될 수 있습니다.

도전하기

21. NoSQL 인젝션

🔒
Medium NoSQL Injection

JSON 기반 인증 시스템입니다. MongoDB 스타일의 쿼리 연산자를 이용해 인증을 우회할 수 있을까요?

힌트: 이 API는 JSON으로도 데이터를 받습니다. MongoDB의 $ne (not equal) 연산자를 알고 있나요? curl로 JSON을 보내보세요.

도전하기

22. 역직렬화 공격

🔒
Hard Insecure Deserialization

사용자 환경설정이 쿠키에 직렬화되어 저장됩니다. 쿠키 데이터를 조작해서 관리자 권한을 얻을 수 있을까요?

힌트: 쿠키 user_prefs가 Base64로 인코딩된 Python pickle 데이터입니다. 디코딩 → 언피클 → is_adminTrue로 변경 → 피클 → Base64 인코딩 순서로 조작하세요.

도전하기

23. 포맷 스트링 공격

🔒
Hard Format String

로그 메시지 생성기입니다. 사용자가 템플릿을 지정할 수 있는데... Python 포맷 스트링으로 서버 내부 정보를 빼낼 수 있을까요?

힌트: Python의 .format()은 객체 속성에 접근할 수 있습니다. {log.user}가 되면 {log.__dict__}도 될까요? 언더스코어로 시작하는 비밀 속성을 찾아보세요.

도전하기

24. 파라미터 오염

🔒
Medium HTTP Parameter Pollution

역할 기반 접근 제어 시스템입니다. 보안 미들웨어가 관리자 접근을 차단하지만... 같은 파라미터를 여러 번 보내면 어떻게 될까요?

힌트: 같은 이름의 파라미터를 여러 개 보내보세요: ?role=user&role=admin. 보안 체크는 첫 번째 값을 보고, 실제 로직은 마지막 값을 사용할 수 있습니다.

도전하기

25. 안전한 계산기

🔒
Hard Code Injection

보안 필터가 적용된 서버 계산기입니다. 위험한 키워드는 차단되어 있는데... 필터를 우회해서 서버 내부 데이터에 접근할 수 있을까요?

힌트: Python eval()이 사용됩니다. globals()로 전역 변수를 확인하고, Flask app.config를 탐색해보세요. 키워드 필터가 모든 것을 막지는 못합니다.

도전하기

26. 회원 관리

🔒
Hard Second-Order SQLi

회원 등록 시스템입니다. 입력은 안전하게 저장되지만... 저장된 데이터가 다시 사용될 때도 안전할까요?

힌트: 회원가입은 파라미터화된 쿼리로 안전합니다. 하지만 관리자 페이지에서 저장된 사용자명을 다시 조회할 때는 어떨까요?

도전하기

27. 방문자 로그

🔒
Hard Stored XSS

댓글과 방문자 로그가 있는 페이지입니다. 댓글 입력은 완벽하게 필터링되어 있는데... 정말 모든 입력이 안전할까요?

힌트: 폼 입력만이 사용자가 서버에 보내는 데이터의 전부가 아닙니다. HTTP 요청에는 어떤 정보가 함께 전송되나요?

도전하기

28. 설정 관리

🔒
Hard Config Pollution

시스템 설정 관리 API입니다. 현재 설정을 볼 수 있지만 변경하는 방법은 숨겨져 있습니다. 보안 설정을 무력화할 수 있을까요?

힌트: RESTful API는 다양한 HTTP 메서드를 지원합니다. GET 외에 설정을 변경할 수 있는 메서드가 있을까요?

도전하기

29. 토큰 발급기

🔒
Hard Predictable Random

사용자별 인증 토큰을 발급하는 시스템입니다. 일반 사용자의 토큰은 볼 수 있지만 관리자 토큰은 발급이 제한됩니다. 다음 토큰을 예측할 수 있을까요?

힌트: 여러 사용자의 토큰이 동시에 생성됩니다. 난수 생성기의 시드가 예측 가능하다면, 순서대로 생성되는 다음 값도 알 수 있지 않을까요?

도전하기

30. API 보안 시스템

🔒
Hard Chained Attack

잘 설계된 API 보안 시스템입니다. 관리자 인증을 통과하려면 유효한 토큰이 필요합니다. 여러 단서를 연결해서 토큰을 만들 수 있을까요?

힌트: 문서에 나와있지 않은 것들을 찾아보세요. 개발 중 남겨진 흔적이 있을 수 있습니다.

도전하기

31. 비밀번호 재설정

🔒
Hard Host Header Injection

비밀번호 재설정 시스템입니다. 재설정 링크가 이메일로 전송되는데... 링크의 도메인을 조작할 수 있다면?

힌트: 재설정 링크가 어떤 도메인으로 생성되는지 관찰하세요. 서버가 도메인을 결정하는 데 어떤 정보를 사용하나요?

도전하기

32. 할인 바우처

🔒
Hard Race Condition

1회용 할인 바우처가 있는 쇼핑몰입니다. 잔액 500원, 바우처 +500원, 상품 900원. 바우처를 한 번만 쓸 수 있다면... 정말 한 번만 가능할까요?

힌트: 바우처 검증과 적용 사이에 시간 차이가 있습니다. 두 요청이 동시에 검증을 통과한다면?

도전하기

33. 회원가입 필터

🔒
Hard Unicode Normalization

회원가입 시 'admin' 계정명이 차단됩니다. 하지만 같은 글자를 다르게 표현하는 방법이 있다면?

힌트: 유니코드에는 같은 문자의 다양한 표현이 있습니다. 정규화(normalization) 후 같아지는 다른 문자를 찾아보세요.

도전하기

34. 보안 로그인

🔒
Hard WAF Bypass

SQL Injection 방화벽(WAF)이 적용된 로그인입니다. 주요 공격 패턴이 차단되어 있는데... 필터에 빈틈은 없을까요?

힌트: WAF가 차단하는 정확한 패턴을 관찰하세요. 필터가 감지하지 못하는 변형이 있을 수 있습니다.

도전하기

35. JSON 인증

🔒
Hard Type Confusion

JSON API 인증 시스템입니다. 비밀번호를 모르지만... 서버가 타입을 어떻게 비교하는지 알면 우회할 수 있을까요?

힌트: JSON에는 문자열, 숫자, 불리언 등 다양한 타입이 있습니다. 서버가 비밀번호를 어떤 타입으로 저장하고 있는지가 중요합니다.

도전하기

36. 이미지 업로더

✓ Solved
Hard File Upload Bypass

이미지 파일만 업로드할 수 있는 시스템입니다. 하지만 서버가 파일의 실제 내용이 아닌 다른 것을 검증한다면?

힌트: 파일 업로드 시 브라우저가 자동으로 보내는 메타데이터가 있습니다. 서버가 그것만 확인한다면 속일 수 있지 않을까요?

도전하기

2026-03-01 22:58:20 KST

37. XML 파서

✓ Solved
Hard XXE

XML 데이터를 처리하는 파서입니다. XML에는 외부 리소스를 참조하는 강력한 기능이 있는데... 서버의 파일을 읽을 수 있을까요?

힌트: XML DTD에서 ENTITY를 정의할 수 있습니다. SYSTEM 키워드와 file:// 프로토콜을 조합해보세요.

도전하기

2026-03-01 22:45:22 KST

38. 프리미엄 상점

✓ Solved
Hard Integer Overflow

고가 상품을 판매하는 상점입니다. 잔액이 부족하지만... 수량 계산에 정수 오버플로우가 있다면 음수 금액으로 구매할 수 있을까요?

힌트: 서버가 16비트 부호 있는 정수로 금액을 계산합니다. 매우 큰 수량을 입력하면 오버플로우가 발생할 수 있습니다.

도전하기

2026-03-01 22:40:36 KST

39. 해시 크래킹

🔒
Hard Password Cracking

관리자 비밀번호의 MD5 해시가 유출되었습니다. 원본 비밀번호를 복원해서 로그인할 수 있을까요?

힌트: MD5는 단방향 해시이지만, 흔한 비밀번호라면 온라인 레인보우 테이블에서 찾을 수 있습니다.

도전하기

40. 사용자 프로필

✓ Solved
Hard Privilege Escalation

사용자 프로필 시스템입니다. 로그인 후 자신의 프로필을 볼 수 있는데... 다른 사용자의 프로필에도 접근할 수 있다면? 관리자의 비밀 정보가 노출될 수 있습니다.

힌트: 로그인 후 URL의 파라미터를 살펴보세요. 다른 사용자의 정보에 접근한 뒤, 획득한 정보를 활용하세요.

도전하기

2026-03-01 22:36:48 KST

41. CORS 설정 실수

✓ Solved
Hard CORS Misconfiguration

민감 API가 CORS 정책으로 보호되고 있습니다. 신뢰된 Origin만 허용해야 하지만, 검증 로직의 작은 실수로 우회가 가능할지도 모릅니다.

힌트: Origin 문자열을 '정확히 일치'로 비교하는지 확인해보세요. portal.ctfclass.edu를 포함하는 공격자 도메인을 생각해보세요.

도전하기

2026-03-01 22:26:31 KST