2

У меня есть некоторый интерес, если я узнаю немного больше об опубликованном эксплойте, который создает пользователя root на машине с Linux; однако, прежде чем запускать код, я хочу убедиться, что я все понимаю, и я не могу найти какую-либо информацию об используемых шестнадцатеричных кодах.

Это ссылка на источник кода эксплойта: exploitdb.com/exploits/17439

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

           "\x6a\x26\x5a\x25\x04\xe3\xb3\x64"
           "\x04\xc7\x03\x65\x48\xe6\x02\xc3"

Как мне декодировать это в ASCII и как я могу перекодировать его обратно?

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

Я совершенно новичок в C, но знаю достаточно VB.net/C#/PHP, чтобы быть опасным.

PS Для тех из вас, кто обеспокоен, я буду запускать это в виртуальной машине.

3 ответа3

5

Сама запись базы данных, на которую вы указали, дает как исходную программу на языке ассемблера, так и ее эквиваленты на языке C, непосредственно над шестнадцатеричным необработанным машинным кодом. Это язык ассемблера SuperH .

1

REPL в Python хорош в такой ситуации.

>>> "\x6a\x26\x5a\x25\x04\xe3\xb3\x64"
'j&Z%\x04\xe3\xb3d'
>>> "\x04\xc7\x03\x65\x48\xe6\x02\xc3"
'\x04\xc7\x03eH\xe6\x02\xc3'

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

0

Декодирование его в ASCII было бы бесполезным, поскольку это не текстовая строка - байты \x0... отображаются для управления символами в наборе символов ASCII, а не для печатных символов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .