Создание хижины, указывающей портативно на интерпретатор в папке сценария

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

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

Логины или процессы, запущенные как корень, являются нормальным событием. Вы не хотите быть, просыпаются каждый день в 6:00, потому что ежедневные задания крона работают. Обнаруживание подозрительных процессов, сетевого трафика и другого поведения является сложным заданием на основе эвристики; инструмент, делающий это задание, называют IDS (система обнаружения проникновения).

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

5
23.05.2017, 15:40
2 ответа

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

#!/bin/sh
//usr/bin/env node --harmony_arrow_functions "$0" "$@"; exit $?

console.log("Hello world")

Экономия это как File.js создает сценарий, который можно запускать везде. Это зависит от // , который эквивалентен / ; Я не проверил это в Windows ...

1
27.01.2020, 20:41

РЕДАКТИРОВАТЬ: (Исходный ответ по-прежнему отвечает на заданный вопрос, но действительно делает file.js недопустимым файлом JS). Чтобы обеспечить желаемое поведение, следует shebang + комбинация 1-й строки , которая будет передавать file.js через узел , пропуская две первые строки, таким образом подавая его только с Код JS:

#!/bin/sh
sed '1,2d' $0 |node --harmony_arrow_functions; exit $?
/* Your JS code begins here */

--- Ниже исходного ответа ---

Если вы можете считать, что ваш интерпретатор будет находиться в том же каталоге, что и интерпретируемый файл (это заявленный вопрос), вы можете использовать $ (dirname $ 0) , чтобы получить его путь.

Пример:

#!/bin/sh
exec $(dirname $0)/nodeharmony.sh "$0" "$@"

В этом случае при выполнении

$ cd ..
$ ./subfolder/file.js

$ (dirname $ 0) преобразуется в ./ подпапку , поэтому exec будет использовать . /subfolder/nodeharmony.sh в качестве интерпретатора.

2
27.01.2020, 20:41

Теги

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