본문 바로가기
CTF/HTB

Appointment

 

1. Target Overview (머신 요약)

  • Target Name: Appointment
  • OS: Linux
  • Difficulty: Tier 0 (Starting Point)
  • Vulnerability: SQL Injection (SQLi), Authentication Bypass (인증 우회)
  • Attack Vector: Login Form Input Validation Failure (로그인 폼 입력값 검증 누락)

2. 핵심 개념 총정리

① SQL Injection (SQLi)

  • 웹 애플리케이션이 클라이언트로부터 입력받은 데이터를 필터링이나 이스케이프(Escape) 처리 없이 데이터베이스 쿼리에 직접 결합(Concatenation)할 때 발생하는 보안 취약점
  • 공격자는 악의적인 SQL 구문을 삽입하여 데이터베이스 구조를 열거하거나, 중요 데이터를 유출 및 조작가능

 

② 로그인 인증 우회 (Authentication Bypass)

  • 정상적인 로그인 검증 쿼리(예: SELECT * FROM users WHERE username='[ID]' AND password='[PW]')의 논리적 구조를 파괴하는 기법
  • 입력 폼에 admin'# 과 같은 페이로드를 삽입하면, 싱글 쿼터(')로 문자열 입력을 닫고 샵(#) 기호로 뒷부분의 패스워드 검증 구문을 주석 처리하여, 결과적으로 패스워드 일치 여부와 관계없이 참(True)을 반환하게 만들어 로그인을 우회

 

③ 웹 디렉토리 열거 (Web Directory Enumeration)

  • Gobuster나 Dirb와 같은 브루트포스(Brute-force) 도구를 사용하여 웹 서버 내부에 숨겨진 관리자 페이지나 민감한 경로(Directory)를 탐색하는 정보 수집 단계

[Task 1] What does the acronym SQL stand for?

  • 정답: Structured Query Language
  • 분석: 관계형 데이터베이스(RDBMS)에서 데이터를 정의, 조작, 제어하기 위해 사용하는 국제 표준 질의 언어

[Task 2] What is one of the most common type of SQL vulnerabilities?

  • 정답: SQL injection
  • 분석: 사용자 입력값이 SQL 쿼리의 일부로 해석되게 만들어, 공격자가 의도한 비정상적인 쿼리를 데이터베이스가 실행하도록 조작하는 취약점

[Task 3] What is the 2021 OWASP Top 10 classification for this vulnerability?

  • 정답: A03:2021-Injection
  • 분석: 국제 웹 보안 표준 기구인 OWASP(Open Worldwide Application Security Project)에서 발표한 10대 웹 보안 위협 중 3위에 랭크된 치명적인 인젝션 취약점

[Task 4] What does Nmap report as the service and version that are running on port 80 of the target?

  • 정답: Apache httpd 2.4.38
  • 분석: nmap -sV -p 80 [Target IP] 명령을 통해 배너 그래빙을 수행한 결과, 80/tcp 포트에서 구동 중인 웹 서버 데몬 엔진과 정확한 버전을 식별
nmap -sV -p 80 [Target IP]
 

[Task 5] What is the standard port used for the HTTPS protocol?

  • 정답: 443
  • 분석: TLS/SSL을 통해 암호화된 안전한 웹 통신(HTTPS)을 제공하기 위해 사용되는 표준 TCP 포트 번호

[Task 6] What is a folder called in web-application terminology?

  • 정답: directory
  • 분석: 웹 서버의 URI 구조상에서 자원(파일)을 계층적으로 분류하고 저장하는 논리적 경로 단위

[Task 7] What is the HTTP response code is given for 'Not Found' errors?

  • 정답: 404
  • 분석: 클라이언트가 요청한 리소스(URI)가 서버 상에 존재하지 않을 때 웹 서버가 반환하는 표준 HTTP 상태 코드

[Task 8] Gobuster is one tool used to brute force directories on a webserver. What switch do we use with Gobuster to specify we're looking to discover directories, and not subdomains?

  • 정답: dir
  • 분석: Gobuster 실행 시, DNS 서브도메인이 아닌 웹 서버의 디렉토리 및 파일 경로를 브루트포싱 모드로 스캔하도록 지정하는 명령어 파라미터입니다.
gobuster dir -u http://[IP] -w [단어장]
 

[Task 9] What single character can be used to comment out the rest of a line in MySQL?

  • 정답: #
  • 분석: MySQL 데이터베이스 구문에서, 해당 문자 이후의 모든 문자열을 쿼리로 해석하지 않고 무시(주석 처리)하도록 만드는 예약 기호

[Task 10] If user input is not handled carefully, it could be interpreted as a comment. Use a comment to login as admin without knowing the password. What is the first word on the webpage returned?

  • 정답: Congratulations
  • 분석: 로그인 폼의 Username 필드에 악의적인 SQL 페이로드를 주입하여 인증을 우회한 직후 반환된 랜딩 페이지의 첫 단어입니다.

[Root Flag] 시스템 침투 및 플래그 추출

  • 분석:
    • 웹 브라우저를 통해 대상 웹 애플리케이션(http://[Target IP]/)에 접
    • 노출된 로그인 폼에서 Username 필드에 admin'# 페이로드를 주입(Injection)
    • Password 필드는 임의의 값을 입력하거나 비워둔 채 로그인을 시도
    • 백엔드 데이터베이스는 입력값을 SELECT * FROM users WHERE username='admin'#' AND password='...' 로 해석
    • # 이후의 구문이 제거되면서 조건문이 논리적으로 무력화
    • 이를 통해 관리자 계정 세션 권한을 획득하고 페이지 내부의 해시값을
# 백엔드 SQL 검증 로직의 구조적 결함
# 원본 쿼리 예상:
SELECT * FROM users WHERE username='[사용자입력]' AND password='[사용자입력]';

# SQL Injection (admin'#) 삽입 후 데이터베이스에서 해석되는 실제 쿼리:
SELECT * FROM users WHERE username='admin'#' AND password='[무시됨]';
 

 

 

'CTF > HTB' 카테고리의 다른 글

Crocodile  (0) 2026.04.06
Sequel  (0) 2026.04.06
Synced  (0) 2026.04.06
Mongod  (0) 2026.04.06
Preignition  (0) 2026.04.06

Discussion 1