ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dreamhack - Login page
    #1 - Security/CTF 2022. 11. 29. 17:09

    근래 여유 시간이 있어 드림핵 문제를 풀고 있다

    에러 처리의 대한 화면 표시가 안되어 Error based는 따로 생각 안했다 

            except pymysql.err.InterfaceError:
                db.close()
                db, cursor = connect_mysql()

     

    로그인 할 때 Injection 포인트 발견 (바인딩 처리 미흡)

        while not done:
            try:
                query = 'SELECT * FROM users WHERE username = \'{0}\' ' \
                        'AND password = \'{1}\''
                with lock:
                    query = query.format(username, password)
                    cursor.execute(query)
                    ret = cursor.fetchone()

     

    SQL_BAN_LIST = [
        'update', 'extract', 'lpad', 'rpad', 'insert', 'values', '~', ':', '+',
        'union', 'end', 'schema', 'table', 'drop', 'delete', 'sleep', 'substring',
        'database', 'declare', 'count', 'exists', 'collate', 'like', '!', '"',
        '$', '%', '&', '+', '.', ':', '<', '>', 'delay', 'wait', 'order', 'alter'
    ]

    그러면 이제 할 수 있는게 Blind SQL Injection인데 잘못 건드렸다가 패스워드 리셋이 된다.

    참값을 넣게되면 바로 리셋이니 할 수 있는건 하나뿐

        actual_username = ret[1]
        actual_password = ret[2]
    
        if username != actual_username or password != actual_password:
            reset_password()
            session['tries'] = 0
            msg = 'What? you are hacker! I reset password!'
            return render_template('login.html', msg=msg)

     

    그리고 패스워드 5번 틀리면 패스워드 리셋이 되니 이 부분 고려하여 스크립트 작성

        if not ret:
            session['tries'] += 1
            tries = session['tries']
            remain_tries = MAX_LOGIN_TRIES - tries
            if remain_tries <= 0:
                reset_password()
                session['tries'] = 0
                msg = 'Password is reset.'
                msg = msg.format(remain_tries)
                return render_template('login.html', msg=msg)

    패스워드 길이가 짧지않아 중간에 서버 다운

     

    '#1 - Security > CTF' 카테고리의 다른 글

    H@cktivitycon - Just not interesting(Mobile)  (0) 2020.08.12

    댓글

Designed by Tistory.