Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Что ж, политика для нашей программы создана, давайте попробуем ее выполнить под чутким руководством systrace:
#systrace -a /home/01mer/labs/systr/proga
just a message
just a dumb procedure
Как мы видим, все функции нашей программы выполнились. Предположим, что логика нашей программы изменилась, что будет происходить в этом случае? Давайте для примера изменим функцию proc1 в нашей программе. Для начала мы должны точно знать, что будем менять. Просто изменить пару строчек в исходном коде и перекомпилировать программу, конечно, можно, но я предлагаю более интересный подход.
#objdump -d proga > proga.lst
Программа objdump показывает информацию из бинарных/объектных файлов. Ключ -d указывает, что файл нужно дисассемблировать. Вывод информации для удобства произведем в proga.lst
В полученном листинге находим нашу процедуру proc1.
08048833 <proc1>:
8048833: 55 push %ebp
8048834: 89 e5 mov %esp,%ebp
8048836: 83 ec 08 sub $0x8,%esp
8048839: 83 ec 0c sub $0xc,%esp
804883c: 68 16 89 04 08 push $0x8048916
8048841: e8 52 fc ff ff call 8048498 <init_fallthru+0x2d>
8048846: 83 c4 10 add $0x10,%esp
8048849: c9 leave
804884a: c3 ret
804884b: 90 nop
Если не вдаваться в подробности, мы видим тут «подготовку» стека, выполнение вывода на экран текста, очищение стека и возврат в «основную» программу. Итого 25 байт, которые мы должны изменить на что то свое. Негусто, но вполне хватит для классического shell-кода вызывающего /bin/sh, он занимает как раз 23 байта (не забывайте, что 2 байта нам нужны для возврата в «основную программу»). А это именно то, что нам нужно – используется системный вызов, описания которого нет в наших правилах. Читаем man 2 execve. Для запуска /bin/sh через execve мы должны написать следующие: