Разжился на днях исходниками, по идее позволяющие через вызов функции ядра socketpair() создать процесс, съедающий 100% процессорного времени и все файловые дескрипторы. Процесс, будучи запущенным от имени любого пользователя, может привести систему к состоянию полной неработоспособности. Назовём их условно hole1 и hole2.
Скомпилировал их под МСВС 5.0 (ядро 2.6.18) в виртуальной машине и запустил. Оба бинарника запустились с сообщением
Ошибка открытия /proc/net/dev!
Обе программы завершились через некоторое время без какого-либо зависания системы. Начало ободряющее.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
Про -Wno-format что-то яндекс ничего не нашёл и в мане про неё ничего нет...
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
Ну и забейте, никакой магии эта опция делать не должна. -Wno-* просто подавляют предупреждения. В нынешних версиях gcc предупреждения про ошибки формата по умолчанию и так не выводятся, возможно, раньше было по-другому.
Первым был запущен скрипт team-edward.py. Не взлетел (см. скриншот).
Далее был опробован код, который я назвал exploit01. Его даже не получилось скомпилировать.
Ну и на закуску был скомпилирован и запущен american-sign-language. Но запуск программы закончился безрезультатно.
По итогам остался некоторый осадок: не внесли ли авторы в коды данных эксплойтов ошибки, дабы ими не воспользовались "скрипт кидди"? Ведь вполне может оказаться, что полученные результаты обусловлены отнюдь не устойчивостью МСВС...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
а вот на имеющейся у меня под рукой МСВС 5.0 (с ядром 2.6.32) такого файла просто нет. Если его заменить на sys/user.h — собирается (но не работает, что неудивительно):
Ну что же, завтра тогда попробую проверить работу эксплойта с учётом замены asm/page.h на sys/user.h.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
Исходник скомпилировался, бинарник запустился, но root'овских прав при этом не предоставил.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.
Всё шло нормально до инициирования динамического связывания и загрузки $ORIGIN через LD_AUDIT и запуска программы по файловому дескриптору в /proc. Потом появились сообщения об отсутствии файла или каталога:
LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
bash: /proc/self/fd/3: Нет такого файла или каталога
bash: exec: /proc/self/fd/3: не могу запустить: Нет такого файла или каталога
Ради интереса вручную вбил команды whoami и id, которые окончательно подтвердили, что фокус не удался и root'вские права я не получил:
[officer@localhost ~]$ whoami
officer
[officer@localhost ~]$ id
uid=300(officer) gid=100(users) группы=100(users)
— Да, это была ошибка, Кемп, огромная ошибка, что я взялся один за это дело. Напрасно потрачены силы, время, возможности. Один… Удивительно, как беспомощен человек, когда он один! Мелкая кража, потасовка — и всё.