Очередное задание по PHP и, по большому счету, опять же не сложное (но дают целых 3 балла, и решивших его пока что только 209) ввиду того что весь код доступен, правда не сразу понятно что нужно искать. Ну приступим:
Сперва нужно кликнуть на кнопку "Go to the challenge" чтобы перейти на страницу с заданием
Здесь нам доступна строка для ввода ip адреса и кнопка с доступом к исходникам (рекомендую открывать в отдельной вкладке)
Код довольно простой: сперва преобразуются специальные символы в html-сущности (смотри htmlspecialchars), потом открывается сокет по адресу который был введен и если адрес был корректный и сокет открыть удалось, то через shell_exec запускается ping до указанного хоста и результат выводится пользователю. Сперва я попробовал отправить адрес самого ресурса ringzer0team и получил результат:
Да да, я отправил название сайта туда куда надо вводить ip адрес, но тем не менее результат есть, дальше я пинговал только 127.0.0.1. Самое интересное тут то что я попробовал отправить другую команду через разделитель | и увидел ожидаемые результаты. Уже не помню какую команду я попробовал первой, наверно passwd, но перейдем сразу к сути и отправим команду чтоб увидеть список каталогов и файлов в корне:
Как видим прямо в корне и расположен заветный flag.txt. Чтобы получить содержимое этого файла, можно например воспользоваться командой cat (редактор nano вроде бы оказался недоступен):
Флаг наш! Но обязательно нужно сделать выводы из данного урока: пользовательский ввод никак не должен попадать напрямую в такие встроенные средства как shell_exec (вобще рекомендую отключить его у вас на сайте, поскольку в большинстве сайтов на PHP его функционал избыточен, чаще он встречается в PHP приложениях которые работают в CLI).