Тема: Task #11
Показать сообщение отдельно

  #14  
Старый 10.05.2020, 18:23
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 0
С нами: 10992741

Репутация: 0
По умолчанию

Итак, по просьбам - врайтап о втором способе взлома.

Смотрим на URL'ы страниц таска. Пример:

Код:
http://task.antichat.com:1111/reader/index.php?name=info/1
Заметен параметр name,который получает что-то похожее на путь. Давайте попробуем выяснить, что туда можно передать.

Несложным перебором выясняем, что:

- Из врапперов доступен только http://

- Фильтруются все символы, кроме []:_/, причём / не может быть первым.

- Фильтруются localhostи :1111, что намекает на возможное обращение к http://localhost:1111/super-private.

Такое обращение будет локальным для сервера, и некоторые ограничения могут отключиться. Как мы узнаем дальше, так оно и есть.

Сделать ?name=http://localhost:1111/tpl_admin/ нам не даёт фильтрация localhostи :1111.

.SpoilerTarget" type="button">Spoiler
Please, don't it.

English, motherf*cker, do you speak it?

Поскольку нельзя точки, непонятно, как задавать хост. Работает хост task, но он не даёт ничего хорошего, потому что :1111 всё равно не работает. Любопытные результаты по ?name=http://task/. Так я узнал, что на task.antichat.ru/ есть апач без index.(php|html).

Окей, читаем RFC по URI, где написно, что они не одобряют кривые форматы IP-адресов, хоть они и используются, и парсинг IP зависит от реализации. Давайте почитаем, например, ман по inet_aton.Видим, что адреса - это не только четыре октета a.b.c.d, но и даже одно 32-битное число, можно десятичное, шестнадцатеричное или даже восьмеричное.

Применим эту логику к IP, например, гугла: 216.58.206.110, предварительно убедившись, что он вообще открывается по IP.

Код:
216.58.206.110 = D8.3A.CE.6E = 0xD83ACE6E (hex) = 3627732590 (dec) = 033016547156 (oct)
Все помнят, что IP адреса пишутся в прямом порядке байт (big-endian)?

Итак, переходим на http://task.antichat.com:1111/reader...://3627732590/ и видим (кажется, немецкий) гугл. Ура, умеем стучаться наружу. Можно было бы http://033016547156 или http://0xD83ACE6E, все три работают.

.SpoilerTarget" type="button">Spoiler
Любопытно, что мой браузер (Chrome) тоже поддерживает это безобразие. Если кликнуть по ссылкам выше, то откроется гугл. The more you know.

Для IP адреса 127.0.0.1 этот трюк не сработал. Ладно, поищем что-нибудь другое.

Немного читаем код php (брр!) и вспоминаем, что http:// враппер поддерживает редиректы.

То есть, если что-то в интернете нам ответит

Код:
HTTP/1.0 302 Found
Location: SOME_URL
То PHP перейдёт по SOME_URL, если посчитает его безопасным.Обычно безопасные - http(s) / (s)ftp. То есть, можно сделать

Код:
HTTP/1.0 302 Found
Location: http://localhost:1111/tpl_admin/
и сервер перейдёт по редиректу и отдаст нам админку. Там могут быть ограничения на redirect follow, но не попробуешь - не узнаешь.

Давайте же поднимем сервер (где-нибудь), который отдаст то, что сверху. Самое простое - так.

Код:
$ cat redirect
HTTP/1.0 302 Found
Location: http://localhost:1111/tpl_admin/

$ cat redirect | awk 1 ORS='\r\n' | nc -l 12345
awkвыше нужен, чтобы заменить \n на \r\n, в заголовках переносом строки является \r\n.

Переходим на адрес

Код:
http://task.antichat.com:1111/reader/index.php?name=http://:12345/
и видим флаг!
 
Ответить с цитированием