simple_sqli chatgpt

2026. 1. 30. 18:58·Dreamhack 워게임/Lv.1
반응형

문제 설명

어딘가 이상한 로그인 서비스입니다.
SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.

chatGPT와 함께 풀어보세요!


코드 분석

DATABASE = "database.db"
if os.path.exists(DATABASE) == False:
    db = sqlite3.connect(DATABASE)
    db.execute('create table users(userid char(100), userpassword char(100), userlevel integer);')
    db.execute(f'insert into users(userid, userpassword, userlevel) values ("guest", "guest", 0), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}", 0);')
    db.commit()
    db.close()
  • database.db 데이터베이스를 사용
  • db 실행시 users 테이블 생성
  • users 테이블에 값 userid, userpassword, userlevel 순으로 삽입함
  • guest, guest, 0 그리고 admin, 랜덤16바이트 값, 0 이 들어있음
def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = sqlite3.connect(DATABASE)
    db.row_factory = sqlite3.Row
    return db
  •  _database를 가져옴
  • 만약 엇다면 sqlite3.connect해서 g.database에 가져옴
  •  
def query_db(query, one=True):
    cur = get_db().execute(query)
    rv = cur.fetchall()
    cur.close()
    return (rv[0] if rv else None) if one else rv
  • query_db는 쿼리를 인자로 받음
  • one=True로 결과 값 하나만 반환
  • 전체 행을 출력
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        userlevel = request.form.get('userlevel')
        res = query_db(f"select * from users where userlevel='{userlevel}'")
        if res:
            userid = res[0]
            userlevel = res[2]
            print(userid, userlevel)
            if userid == 'admin' and userlevel == 0:
                return f'hello {userid} flag is {FLAG}'
            return f'<script>alert("hello {userid}");history.go(-1);</script>'
        return '<script>alert("wrong");history.go(-1);</script>'
  • 로그인 화면 
  • userlevel을 이용자로부터 입력 받고 처리함
  • 입력 받은 값을 query_db로 넘겨주고 res에 저장
  • useid는 첫번째 , userlevel은 세번째 값 넣고 출력
  • userid가 admin이고 userlevel이 0 이면 FLAG출력

취약점 분석

  • 로그인에서 userlevel 값을 그대로 SQL 문자열에 삽입
  • query_db가 첫 행만 반환하기 때문에 admin이 첫행으로 오면 인증을 우회해 FLAG 획득가능

익스플로잇

그냥 0 삽입 시

hello guest 라는 문구가 뜸

둘다 userlevel이 0이지만 첫행이 guest라 guest만 출력되는 것을 확인

 

그럼 admin이 먼저 나오게 ORDER BY를 이용 (ORDER BY 기본 값은 ASC(오름차순)이며, DESC(내림차순)이다.)

0' ORDER BY userid  --

와 같은 문구를 삽입하면 

select * from users where userlevel='0' ORDER BY userid  --'

위와 같은 SQL문이 실행 됨

 

반응형

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

image-storage  (0) 2026.02.02
simple-ssti  (0) 2026.01.30
CSRF Advacned  (0) 2026.01.23
XSS Filtering Bypass  (0) 2026.01.21
{"role": "admin"}  (0) 2026.01.21
'Dreamhack 워게임/Lv.1' 카테고리의 다른 글
  • image-storage
  • simple-ssti
  • CSRF Advacned
  • XSS Filtering Bypass
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
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
simple_sqli chatgpt
상단으로

티스토리툴바