WhiteHat
19.05.2009, 23:06
Добрый вечер, Уважаемые. Пишу диплом по информационной безопасности. Встал в ступор:
пишу маленький код:
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(666);
return 0;
}
Далее все это дело компилю:
gcc myprog.c -o myprog -g --static
тут я подключаю опцию отладки и функции, находящиеся в разделяемых библиотеках (хотя по поводу --static я не уверен, надо ли).
Так дальше:
gdb -q ./myprog
(gdb)disassemble main
и ищю строку вызова setuid
Далее дизассемблю setuid и ищю вызов ядра (прерывание $0x80)
Дальше я слегка запутался :confused:
Знаю, что в регистр %eax заносится номер системного вызова. Посмотрел в /usr/include/asm/unistd.h и нашел setuid, он равен 23. Аргумент 666 полетит в регистр, скажем %ebx. Какой уникальный номер у setuid я не знаю, для EXIT знаю 0x1.
Вообщем прошу помощи, нужно найти в отладчике gdb, как происходит вызов setuid и далее это дело перевести в шестнадцатиричное представление.
Перевести сам смогу, помогите найти кусок кода в gdb, где происходит вызов setuid.
Заранее благодарен всем!!!!
пишу маленький код:
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(666);
return 0;
}
Далее все это дело компилю:
gcc myprog.c -o myprog -g --static
тут я подключаю опцию отладки и функции, находящиеся в разделяемых библиотеках (хотя по поводу --static я не уверен, надо ли).
Так дальше:
gdb -q ./myprog
(gdb)disassemble main
и ищю строку вызова setuid
Далее дизассемблю setuid и ищю вызов ядра (прерывание $0x80)
Дальше я слегка запутался :confused:
Знаю, что в регистр %eax заносится номер системного вызова. Посмотрел в /usr/include/asm/unistd.h и нашел setuid, он равен 23. Аргумент 666 полетит в регистр, скажем %ebx. Какой уникальный номер у setuid я не знаю, для EXIT знаю 0x1.
Вообщем прошу помощи, нужно найти в отладчике gdb, как происходит вызов setuid и далее это дело перевести в шестнадцатиричное представление.
Перевести сам смогу, помогите найти кусок кода в gdb, где происходит вызов setuid.
Заранее благодарен всем!!!!