Все мы любим nginx... http://{IP}:8384
По конфигу nginx'а необходимо составить правильный запрос.
Видно, что в конфиге задано 2 сайта - на одном отдаётся статический html, а другой выглядит более интересно. Начнём проходить поэтапно.
server_name ""
будет отдавать отвечать только на те запросы, у которых заголовокHost
не выставлен. Т.к. это недопустимо в протоколе версииHTTP/1.1
, придётся использоватьHTTP/1.0
.valid_referers
проверяет, что у пользователя выставлен конкретный заголовокReferer
, в данном случаеReferer
должен содержать сайт со строкойomegalulz
. ПодойдетReferer: http://omegalulz
.ancient_browser
иmodern_browser
выставляют переменныеancient_browser
иmodern_browser
в зависимости от значения заголовкаUser-Agent
.modern_browser unlisted
, как в нашем случае, обозначает, чтоancient_browser = 0
тогда, когдаUser-Agent
не входит в список, перечисленный в директивеancient_browser
. Можно, например, просто убрать значение заголовкаUser-Agent
.auth_request /auth
заставит пользователя авторизовываться в каждом запросе. В конфиге авторизация задана как проксирование запроса наhttps://httpbin.org/bearer
, если погуглить и поковыряться в его исходниках, станет понятно, что необходимо просто добавить заголовокAuthorization: Bearer что-то
. (https://github.com/postmanlabs/httpbin/blob/f8ec666b4d1b654e4ff6aedd356f510dcac09f83/httpbin/core.py#L1000).- На данном этапе мы уже можем сделать нормальный запрос:
Но, к сожалению, в ответ мы получим нечто непонятное:
curl http://localhost:8384/ -i -H "Host:" --http1.0 -H "Referer: http://omegalulz" -H "User-Agent:" -H "Authorization: Bearer 1"
Объясняется это директивами<8aTO> <87eq><asaO7>9Hq7F YV /</asaO7></87eq> <MYq}> <8B>9Hq7F YV /</8B><8D><WD7><e 8D7V="../">../</e> <e 8D7V="ZjqBV7Zo7hhorhuk6V6{.aFa">ZjqBV7Zo7hhorhuk6V6{.aFa</e> uZ-XYy-jujj jB:h{ oj </WD7><8D></MYq}> </8aTO>
charset_map
,source_charset
иcharset
, которые изменяют кодировку ответа, следуя заданной таблице перевода. По этой таблице мы можем перевести в изначальную кодировку:... <a href="62d1fe64e55435079f98.txt">62d1fe64e55435079f98.txt</a> ...
- Запросив найденный файл аналогичным образом, и переведя ответ, получим флаг.
ptzctf{nginxisfunlol_6e0fbd98503acbdcedd4}