728x90
👾 문제 설명
어딘가 이상한 로그인 서비스입니다.
SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
chatGPT와 함께 풀어보세요!
📎 https://dreamhack.io/wargame/challenges/769
접속 정보에 "서버 생성하기"를 눌러서 링크에 접속한다.
접속 완료! 초기 화면이다.
로그인 페이지까지 접속해보았다.
그리고 문제 파일을 다운로드 받는다.
압축 파일이 하나 생성되는데, 이 파일을 풀면 app.py가 등장한다.
@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' 경로에 대한 GET 및 POST 요청을 처리하는 Flask 뷰 함수인 login 함수를 정의한다. 이 함수는 사용자의 로그인을 처리하고, 로그인에 따라 다른 동작을 수행한다.
userlevel = request.form.get('userlevel')
→ 사용자가 제출한 폼 데이터에서 'userlevel' 값을 가져온다. 이 값은 사용자가 입력한 사용자 레벨을 나타냄.
res = query_db(f"select * from users where userlevel='{userlevel}'")
→ 데이터베이스에서 'userlevel' 값에 해당하는 사용자 정보를 조회한다.
if res:
userid = res[0]
userlevel = res[2]
print(userid, userlevel)
→ 쿼리 결과가 있을 경우 (해당 레벨의 사용자를 찾았을 경우) 다음 동작을 수행한다.
- userid = res[0]: 조회된 사용자 정보에서 사용자 아이디를 가져옴
- userlevel = res[2]: 조회된 사용자 정보에서 사용자 레벨을 가져옴
- print(userid, userlevel): 사용자 아이디와 레벨을 콘솔에 출력함
if userid == 'admin' and userlevel == 0:
→ userid가 'admin'이고 userlevel이 0인 경우, 즉 관리자로 로그인한 경우 환영 메시지와 FLAG 값을 반환한다. 이 정보는 웹 페이지에 표시된다.
해결 완료!
728x90
'공부 > 웹해킹 (Web hacking)' 카테고리의 다른 글
[드림핵 | 웹해킹] LEVEL 1: error based sql injection (0) | 2024.03.08 |
---|---|
[드림핵 | 웹해킹] LEVEL 1: [wargame.kr] strcmp (0) | 2023.11.08 |
[드림핵 | 웹해킹] LEVEL 1: [wargame.kr] tmitter (0) | 2023.10.31 |
[드림핵 | 웹해킹] LEVEL 1: [wargame.kr] login filtering (1) | 2023.10.13 |
[드림핵 | 웹해킹] LEVEL 1: session-basic (0) | 2023.09.22 |