728x90
Description
로그인 서비스입니다.
SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
풀이
step 1. 접속 정보 사이트로 접속 & 파일 다운로드 후 확인
접속하면 로그인을 할 수 있는 페이지가 나오게 된다. 코드를 살펴보면,
db.execute('create table users(userid char(100), userpassword char(100));')
db.execute(f'insert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}");')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
userid = request.form.get('userid')
userpassword = request.form.get('userpassword')
res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"')
if res:
userid = res[0]
if userid == 'admin':
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 페이지가 있고, guest와 admin으로 로그인 할 수 있는 것을 알 수 있다. guest의 계정의 패스워드는 guest이고, admin은 binascii.hexlify(os.urandom(16)).decode("utf8") 인 것을 확인할 수 있었다.
guest : guest로 로그인 해보니 "hello guest"가 나왔고, admin으로 로그인 해보았더니 "wrong"이 나왔다.
문제 이름처럼 sql 인젝션을 통해 해결이 가능한데, and userpassword="{userpassword}" 이 부분을 주석처리를 해주면 될것 같았다. 주석 처리인 -- 을 사용해 userid에 admin"-- 이렇게 넣어주게 되면 플래그가 나오는 것을 확인할 수 있다.
728x90
'dreamhack' 카테고리의 다른 글
[Dreamhack] file-download-1 (Beginner) (0) | 2024.01.17 |
---|---|
[Dreamhack] web-misconf-1 (Beginner) (1) | 2023.11.28 |
[Dreamhack] pathtraversal (Beginner) (0) | 2023.11.15 |
[Dreamhack] ssp_001 (LEVEL 2) (1) | 2023.11.15 |
[Dreamhack] image-storage (LEVEL 1) (0) | 2023.11.08 |