Yozzang의 해킹일기 💻
article thumbnail
728x90

오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 Mango를 함께 풀어볼 예정입니다.

 

 

Mango

Description 이 문제는 데이터베이스에 저장된 플래그를 획득하는 문제입니다. 플래그는 admin 계정의 비밀번호 입니다. 플래그의 형식은 DH{...} 입니다. {'uid': 'admin', 'upw': 'DH{32alphanumeric}'} Reference Serv

dreamhack.io

문제 정보를 살펴보면 플래그는 admin 계정의 비밀번호라고 합니다. 또한 해당 문제의 이름을 통해서 MangoDB를 사용한다는 것도 추측해낼 수 있습니다.

 

워게임 사이트에 접속해 보면 아래와 같이 uid와 upw의 정보가 담긴 페이지가 로딩될 겁니다.

이어서 소스코드를 분석해보겠습니다.

9 ~ 39

9번째 코드를 보면 'admin', 'dh', 'admi'가 BAN이라는 리스트에 저장되어 있다는 것을 확인할 수 있습니다. 또한 11번째 코드에 정의한 filter함수와 21~24번째 코드를 보면 BAN에 들어가 있는 단어를 사용하면 filter를 반환한다는 것을 알 수 있습니다.

 

그럼 실제로 테스트 해보겠습니다.

uid=admin
upw=dh...

uid와 upw에 각각 admin과 dh가 들어간 payload를 전송해보니 filter가 출력되었단 사실을 확인할 수 있습니다.

 

따라서 우리는 해당 BAN을 우회하고 admin의 비밀번호 값을 알아내야 합니다. 그러기 전에 우선 MangoDB의 정규표현식에 대해서 간단히 소개하겠습니다.

정규식 설명
$gt greater
$ne not equal
$lt little
$regex 포함된 값 출력

$gt는 greater라는 의미로 지정된 값보다 큰 문자열을 출력한다는 것이고, $ne는 동일하지 않는 문자열, $lt는 작은 문자열, $regex는 입력한 값을 포함된 값을 출력해 줍니다. 

 

그럼 먼저 $gt를 활용해서 공격을 실행해보도록 하겠습니다.

uid[$gt]=adm&upw[$ne]=

admi이 BAN 리스트에 들어가 있으므로 우리는 adm을 이용해서 payload를 전송해보았습니다. 여기서 'uid[$gt]=adm'은 uid가 adm보다 큰 문자열(adma, admb, b..., c... 등등)을 출력해준다는 의미를 가지며 'upw[$ne]='은 upw가 공백이 아니다는 의미를 가집니다. guest가 출력된 것을 보니 해당 MangoDB의 계정이 admin 말고 guest도 있다는 사실을 알 수 있습니다. 그럼 이제 guest를 제외한 값을 출력해보도록 하겠습니다.

uid[$gt]=adm&uid[$ne]=guest&upw[$ne]=

'uid[$ne]=guest'라는 옵션을 추가해서 payload를 작성하여 제출해봤더니, 또 다른 uid인 dreamhack이 존재한다는 것을 확인할 수 있습니다. 그럼 이제 dreamhack도 제외한 '{'자가 upw에 포함된 최종 payload를 작성해서 제출해보도록 하겠습니다.

uid[$gt]=adm&uid[$ne]=guest&uid[$lt]=d&upw[$ne]={

d보다 작은 uid를 출력해달라는 'uid[$lt]=d' 옵션과 '{'가 포함된 upw(dh가 BAN에 들어가 있으니 dh대신 { 사용)를 출력해달라는 'upw[$ne]={' 추가해서 보냈더니 성공적으로 admin이라는 uid를 출력했습니다. 그러나 우리는 admin의 password 값을 알아내야 하기 때문에, upw에 모든 아스키코드를 하나 씩 넣어서 값이 참인 아스키코드를 하나씩 추가하는 방식을 사용하여 해당 문제를 해결해보겠습니다.

 

아래와 같이 파이썬 코드를 작성해서 진행하면 됩니다.

공격 코드

반복문을 이용하여 admin의 password 값을 하나 씩 알아내는 코드입니다. 보다 자세한 설명은 코드에 나와 있는 주석을 참고하면 됩니다.

 

코드를 실행해보면 password가 차례대로 출력되고 나서 아래 그림과 같이 최종 FLAG가 출력된 것을 확인할 수 있습니다.

profile

Yozzang의 해킹일기 💻

@요짱

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