🐍 Как выполнить неисполняемый бинарный файл |

🐍 Как выполнить неисполняемый бинарный файл

Обход запретов

Давайте разберемся, каким образом можно выполнить невыполняемый бинарник.

Проверим версию Python.

python3 --version
Python 3.10.6

Проверим смонтированную файловую систему, которая не допускает прямого выполнения каких-либо бинарных файлов.

mount
/dev/sdb1 on /opt/files type ext4 (rw,nosuid,nodev,noexec,relatime,errors=remount-ro)

Попытка выполнить бинарник:

/opt/files/bin/ls
bash: /opt/files/ls: Permission denied

Создайте простой скрипт на Python, который использует функцию os.memfd_create, доступную начиная с Python 3.8, для создания анонимного файла и os.execv для его выполнения.

См. раздел “Различные интерфейсы операционной системы“.

#!/usr/bin/env python3

import os, sys

sys.tracebacklimit = 0

if len(sys.argv) >= 2:
command_file = str(sys.argv[1])
command_params = sys.argv[2:]

if os.path.exists(command_file):
command_executable = os.access(command_file, os.X_OK)

print()
print(f'Command: {command_file}') 
print(f'Params: {command_params}')
print(f'Executable: {command_executable}') 
print()

memfd_obj = os.memfd_create('')
file_obj = os.open(command_file, os.O_RDONLY)
with os.fdopen(memfd_obj, 'wb') as fd:
fd.write(os.read(file_obj, os.path.getsize(file_obj)))
print('Output:')
a =os.execv(f"/proc/self/fd/{memfd_obj}", [command_file, *command_params],)
else:
raise RuntimeError("Error: Command file does not exist")
else:
print("Usage:")
print(f' {__file__} command_file command_params')

Выполним неисполняемый файл:

python3 execute.py /opt/files/ls --version
Command:    /opt/files/ls
Params:     ['--version']
Executable: False
Output:
ls (GNU coreutils) 8.32
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий