
Сервер PoC-эксплойта для CVE-2015-7547
Для тестирования на локальной машине с уязвимой версией glibc:
user@localhost:/# echo 'nameserver 127.0.0.127' | sudo tee /etc/resolv.conf
user@localhost:/# echo 'nameserver 127.0.0.127' | sudo tee -a /etc/resolv.conf
user@localhost:/# sudo python3 attack-server.py 127.0.0.127
Starting UDP server on 127.0.0.127:53...
Starting TCP server on 127.0.0.127:53...
Затем из другого терминала выполните атаки, как показано в примерах ниже.
Требуется возможность отправлять ответы размером более 2048 байт через UDP и TCP.
Последовательность атаки:
UDP-ответ размером более 2048 байт, корректный заголовок/запрос, установлен флаг TC (вызывает некорректное управление буфером и повтор TCP)
TCP-ответ, корректный заголовок/запрос (заставляет следующий ответ быть сохранённым в буфере, выделенном в стеке)
TCP-ответ размером более 2048 байт (переполняет буфер, выделенный в стеке)
Пример:
user@localhost:/# curl http://attack1
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Требуется возможность отправлять ответы размером более 2048 байт через UDP.
Последовательность атаки:
UDP-ответ размером более 2048 байт, некорректный заголовок (вызывает некорректное управление буфером, не учитывается как допустимый ответ)
Игнорирование следующего запроса (вызывает повтор UDP из-за тайм-аута опроса)
UDP-ответ, корректный заголовок/запрос (заставляет следующий ответ быть сохранённым в буфере, выделенном в стеке)
UDP-ответ размером более 2048 байт (переполняет буфер, выделенный в стеке)
Пример:
user@localhost:/# curl http://attack2
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Требуется возможность отправлять ответы размером более 1024 байт через UDP и более 2048 байт через TCP.
Последовательность атаки:
UDP-ответ размером 1024 байт, корректный заголовок/запрос (заполняет половину буфера, выделенного в стеке)
UDP-ответ размером более 1024 байт, корректный заголовок/запрос, установлен флаг TC (вызывает некорректное управление буфером и повтор TCP)
TCP-ответ, корректный заголовок/запрос (заставляет следующий ответ быть сохранённым в буфере, выделенном в стеке)
TCP-ответ размером более 2048 байт (переполняет буфер, выделенный в стеке)
Пример:
user@localhost:/# curl http://attack3
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Требуется возможность отправлять ответы размером более 2048 байт через UDP.
Последовательность атаки:
UDP-ответ размером 2048 байт, корректный заголовок/запрос (заполняет буфер, выделенный в стеке)
UDP-ответ (вызывает некорректное управление буфером и повтор UDP из-за получения 0 байт из сокета)
UDP-ответ, корректный заголовок/запрос (заставляет следующий ответ быть сохранённым в буфере, выделенном в стеке)
UDP-ответ размером более 2048 байт (переполняет буфер, выделенный в стеке)
Пример:
user@localhost:/# curl http://attack4
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Требуется возможность отправлять ответы размером более 2048 байт через TCP и как минимум две записи nameserver в /etc/resolv.conf.
Последовательность атаки:
UDP-ответ, корректный заголовок/запрос, установлен флаг TC (опционально, вызывает повтор TCP, если начальный запрос был через UDP)
TCP-ответ размером более 2048 байт (вызывает некорректное управление буфером)
TCP-ответ, пустой (вызывает повтор TCP из-за получения 0 байт из сокета)
TCP-ответ, корректный заголовок/запрос (заставляет следующий ответ быть сохранённым в буфере, выделенном в стеке)
TCP-ответ размером более 2048 байт (переполняет буфер, выделенный в стеке)
Пример:
user@localhost:/# curl http://attack5
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)