Xmas Login

2026. 2. 6. 21:56·Alpacahack
반응형

Topic: SQL

분야: Web

난이도: Easy

🦙 < There is a vulnerability in this login system!
🦌 < If you can login as us, we will give you a flag as a present!
🎅 < Merry Xmas! Hohoho!


코드 분석

app.post("/login")
def login():
    username = request.form.get("username", "")
    password = request.form.get("password", "")

    if len(username) > 12 or len(password) > 48:
        return "Your input is too long!"

    conn = sqlite3.connect("database.db")
    query = (
        f"SELECT * FROM users WHERE username='{username}' AND password='{password}';"
    )

    error = None
    try:
        user = conn.execute(query).fetchone()
    except sqlite3.Error as e:
        user = None
        error = str(e)
    conn.close()

    if error:
        return f"SQL error: {error}"

    if user is None:
        return "invalid credentials"

    if user[0] == "alpaca":
        return f"Hello, alpaca! Here is your flag: {FLAG_1}"
    elif user[0] == "reindeer":
        return f"Hello, reindeer! Here is your flag: {FLAG_2}"
    elif user[0] == "santa_claus_admin":
        return f"Hello, santa_claus_admin! Here is your flag: {FLAG_3}"
    else:
        return f"Hello, {user[0]}!"
  • username과 password 입력받음
  • 사용자 이름이 12글자가 넘거나 password가 48길이보다 길다면 Your input is too long이라는 문자열 출력
  • sqlite 데이터베이스 연결해서 입력한 username과 password 비교
  • user가 alpaca면 FLAG 일부분 출력
  • user가 reindeer면 FLAG2 일부분 출력
  • sata_claus_admin이면 FLAG3 일부분 출력
def init_db():
    conn = sqlite3.connect("database.db")
    conn.execute(
        """
    CREATE TABLE IF NOT EXISTS users (
        username TEXT PRIMARY KEY,
        password TEXT NOT NULL
    );
    """
    )
    password_1, password_2, password_3 = (
        os.urandom(16).hex(),
        os.urandom(16).hex(),
        os.urandom(16).hex(),
    )
    conn.execute(
        f"""INSERT OR IGNORE INTO users (username, password) VALUES
        ('alpaca', '{password_1}'),
        ('reindeer', '{password_2}'),
        ('santa_claus_admin', '{password_3}');
    """
    )
    conn.commit()
    conn.close()
  • 실행 시 database.db 연결하고 테이블 생성
  • 비밀번호는 랜덤 16바이트 헥스값
  • 실행 시 username과 password 값 입력 alpaca, reindeer, sata_claus_admin

취약점 분석

  • 입력한 값이 그대로 SQL에 실행됨
  • 필터링 없음
  • username만 보고 로그인함

익스플로잇

먼저 alpaca : 1234를 먼저 입력해 봄

다음과 같은 SQL 문이 실행됨

alpaca' --

를 입력해 주면 username만 alpaca인지 확인함

reindeer도 똑같이 해주면

하지만 santa_claus_admin 은 문자열 길이가 12개가 넘어 입력이 안됨 따라서 Username엔 alpaca 써주고 password에 다음과 같이 작성해 줌

1' OR username='santa_claus_admin

반응형

'Alpacahack' 카테고리의 다른 글

Inu Profile  (0) 2026.02.11
Plz Login  (0) 2026.02.09
Magic Engine  (0) 2026.02.05
Alpacahack: No JS  (0) 2026.02.01
Alpacahack: Stateless Auth  (0) 2026.01.25
'Alpacahack' 카테고리의 다른 글
  • Inu Profile
  • Plz Login
  • Magic Engine
  • Alpacahack: No JS
y3onbug5
y3onbug5
y3onbug5 님의 블로그 입니다.
  • y3onbug5
    y3onbug5 님의 블로그
    y3onbug5
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • Alpacahack (19) N
      • Dreamhack 워게임 (49)
        • Lv.1 (40)
        • Lv.0 (4)
        • LV.2 (3)
        • LV.3 (2)
      • [Dreamhack] Web Beginner (3)
      • [Dreamhack] Web Hacking (17)
        • 웹 기초 지식 (4)
        • Cookie & Session (2)
        • Cross-Site Scripting(XSS) (1)
        • Cross-Site Request Forgery (1)
        • SQL Injection (4)
        • NoSQL Injection (2)
        • Command Injection (1)
        • File Vulnerability (1)
        • Server-Side Request Forgery (1)
      • [Dreamhack] Web Hacking Client-Side (10)
        • XSS Filtering Bypass (2)
        • Content Security Policy (CSP) (2)
        • CSRF,CORS Bypass (2)
        • Client-Side Template Injection (CSTI) (1)
        • CSS Injection (1)
        • Relative Path Overwrite (RPO) (1)
        • DOM Vulnerability (1)
      • [Dreamhack] Web Hacking Server-Side (15)
        • SQL Injection Advanced (4)
        • SQL Injection Advanced - Fingerprinting (2)
        • NoSQL Injection Advanced (3)
        • Command Injection Advanced - Web Servers (3)
        • File Vulnerability Advanced - Web Server (3)
      • [Dreamhack]Black-Box Penetration Testing (15)
        • DreamCommunity Penetration Testing (11)
      • [Dreamhack] LLM (2)
        • [Dreamhack] LLM과 프롬프트 엔지니어링 (2)
      • Web 공부 (4)
      • Web Study (15)
      • JavaScript (17)
        • 기초 (12)
        • 중급 (4)
      • 웹 개발(Flask) (0)
      • [Security First] web 기초교육 (1) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    webstudy
    xss
    webhacking
    JavaScript
    cve
    LLM
    DreamHack
    드림핵
    hacking
    alpacahack
    web
    JS
    CSRF
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
Xmas Login
상단으로

티스토리툴바