Skip to content

Latest commit

 

History

History
59 lines (40 loc) · 2.06 KB

File metadata and controls

59 lines (40 loc) · 2.06 KB

CTFCup 2022 | Battles / Secondary | web

Название

hackmeplz

Описание

Хранит грязные секреты пользователей. Люди говорят, что ужасный секрет админа тоже хранится где-то тут

Use http Luke. 8080 waiting for you

Раздатка

Отдаем архи public/hackmeplz.tar.gz

Деплой

docker-compose up --build -d

Решение

При старте сервис юзеров. Делает он это так:

func Init() {
	auth = map[string]*User{}
	users := GetUsers()
	for _, user := range users {
		auth[user.Name] = &user
	}
	
	// Заметим, что здесь значение &user берется по ссылке,
    // но ссылка указывает на переменную цикла, 
    // которая после завершения будет указывать на последний элемент слайса
    // ключ берется по значанию и будет верным
}

Таким образом при рестарте сервиса, для всех пользавателей в auth, значаение User будет равно последнему созданному пользователю, в том числе и флаг пользователя admin

Значит наша задача:

  1. Создать пользователя
  2. Перезапустить второго пользоателя
  3. Попросить сервис отдать все грязные секреты админа используя токен нашего пользователя
  4. Profit?

Перезапустить сервис можно попыткой создать уже существующего пользователя, тогда сервис вызовет glog.Fatal(...) который вызовет os.Exit(255)

Пример решения: sploit.sh

Флаг

Cup{y0u_haCk_mY_seRv1cE_a3_Wha3_c0s3}