Почему местоположение переменных среды варьируется так очень?

Можно определить, похож ли файл на сжатый формат путем выполнения file команда.

file lorem.txt lorem.txt.gz
lorem.txt:    ASCII text
lorem.txt.gz: gzip compressed data, from Unix, last modified: Thu Feb  7 02:10:44 2013, max compression

file просто скажут "данные", если они не распознают формат. Кроме того, Вам решать для выяснения, что сжато или не (например, “Текст ASCII”, “PPM”, “аудио WAVE” является несжатым; “gzip сжал данные”, “изображение JPEG”, “аудио Vorbis” сжато).

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

wc -c somefile
gzip 

9
22.03.2018, 12:52
1 ответ

То, что вы описываете, является функцией защиты от эксплуатации, которая называется рандомизация разметки адресного пространства (ASLR). По сути, ядро ​​помещает самый верхний адрес стека вызовов функций программы на немного другой («случайный») адрес каждый раз, когда ядро ​​загружает файл ELF программы с диска. Адреса в argv и переменные среды, одной из которых является ваш шелл-код, при каждом вызове программы оказываются по разным адресам.

ASLR должен затруднить использование переполнения буфера и других уязвимостей, связанных со стеком. Злоумышленник должен написать код или что-то сделать, чтобы учесть различные адреса переменных и значений в стеке вызовов функций.

Похоже, вы можете отключить ASLR, выполнив что-то вроде:

echo 0 > /proc/sys/kernel/randomize_va_space

как пользователь root. Поскольку вы явно цитируете Ubuntu, приведенная выше команда отличается:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
13
27.01.2020, 20:06

Теги

Похожие вопросы