root@system:~# less myfile
-bash: /bin/less: Input/output error
Корневая файловая система мертва. Но мой кот все еще жив (в моей памяти):
root@system:~# cat > /tmp/somefile
C^d
root@system:~#
Хотя он вроде одинок, все его друзья ушли:
root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error
Система все еще работает и выполняет свое предназначение. Я знаю, я знаю, что единственный разумный ответ на это - отключить систему и заменить корневой диск. К сожалению, это не вариант, так как это будет стоить много времени и денег. Кроме того, это убило бы мою кошку, и это сделало бы меня грустным.
Я думал о том, чтобы привезти его обычных друзей от донора. Я не осмелюсь попытаться их найти, если ssh попытается загрузить его и обрезает строку (бинарный файл все равно пропал). Это звучит как работа для двоюродного брата моей кошки:
root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found
К сожалению, он давно ушел.
Теперь я могу попытаться обмануть мою кошку, чтобы выполнить ритуал, чтобы воскресить его:
cat > netcat < /dev/tcp/localhost/9999
И это сработало. Он почти жив
root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied
Ему просто нужна крошечная искра жизни. Это маленькое +x
волшебное заклинание, которое я не могу сейчас произнести.
Можете ли вы помочь мне вернуть друзей моей кошки?
источник
/lib/ld-linux.so.2 ./netcat
(или эквивалент вашей системы) и запустить что-то?Ответы:
Есть несколько возможностей, все в зависимости от точных параметров вашей ситуации прямо сейчас. Я собираюсь предположить Linux в следующих примерах, где это применимо, но в большинстве случаев аналогичные функциональные возможности существуют на других платформах.
Возможно, вы сможете заставить динамический загрузчик запустить исполняемый файл для вас. Предполагая, что
cat
он динамически связан, эквивалент вашей платформы,/lib/ld-linux.so.2
скорее всего, также будет находиться в памяти и, следовательно, может использоваться для запуска двоичного файла:У вас может быть несколько из них (вероятно, 32- и 64-разрядные), и может быть доступно несколько копий или символических ссылок, которые необходимо разрешить. Один из тех, кто может работать.
Если у вас есть смонтированная файловая система vfat или NTFS или другая, которая обрабатывает все файлы как 777, вы можете создать там свой исполняемый файл.
Если есть смонтированный раздел, содержимое которого вас не волнует, на диске, который все еще в основном работает, вы можете заменить содержимое новым образом того же типа файловой системы, содержащим необходимые вам исполняемые файлы -
cat
для этого подойдет Роль, которую обычно используют людиdd
, и вы можете предоставить изображение по сети.Это правдоподобно, но есть много мест, где нельзя работать, в зависимости от того, что именно находится в памяти этого раздела.
Если есть какой-либо доступный файл, который имеет разрешение на выполнение в любой доступной для записи файловой системе, вы можете
cat >
в него заменить содержимое двоичным файлом по вашему выбору.ctypes.sh
, который предоставляет интерфейс сторонней функции для Bash, а затемdlcall chmod ./netcat 511
.Вы можете загрузить динамический библиотечный файл
foo.so
вашей конструкции, а затемcat
загрузить его от вашего имениLD_PRELOAD
, что позволит вам выполнить произвольный код.Если вы перехватываете, например
open
,:тогда вы можете делать там все, что вам нужно.
Моим предложением было бы ввести статически связанный
busybox
исполняемый файл в качестве первого элемента (или, действительно, единственного элемента), чтобы у вас был полный набор доступных команд без повторного использования любого хака, приведшего вас к истощению.источник
busybox
»: обратите внимание, что онsash
был специально разработан для этого варианта использования и может быть более доступным в крайнем случае (например, вы можете установить его заранее и оставить копию работающей где-нибудь, чтобы она находилась в памяти, когда система перерывы ... или вы можете угробить своих питомцев и купить кучу крупного рогатого скота вместо этого, я полагаю).