1. WhiteHat

    WhiteHat New Member

    Joined:
    9 Jan 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Добрый вечер, Уважаемые. Пишу диплом по информационной безопасности. Встал в ступор:
    пишу маленький код:
    Code:
    #include <sys/types.h>  
    #include <unistd.h> 
    
    int main()  
    {          
            setuid(666);         
    
     return 0;  
    }
    Далее все это дело компилю:

    Code:
    gcc myprog.c -o myprog -g --static
    тут я подключаю опцию отладки и функции, находящиеся в разделяемых библиотеках (хотя по поводу --static я не уверен, надо ли).

    Так дальше:

    Code:
    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.

    Заранее благодарен всем!!!!
     
  2. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Если я правильно понял суть вопроса, то тебе надо код на асме вызова setuid() ?
    Ну вот держи:
    Code:
        movl $23, %eax  # $23  - setuid system call number
        movl $666, %ebx # $666 - rights
        int $0x80       # call setuid()
    
    Кстате на 64х битной архитектуре номера системных вызовов отличные от 32х битной. Например на 32х setuid = 23, а на 64х setuid = 105
     
    #2 razb, 20 May 2009
    Last edited: 20 May 2009
    1 person likes this.
  3. WhiteHat

    WhiteHat New Member

    Joined:
    9 Jan 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Спасибо, razb. Уже сам разобрался, пока ответы ждал. Но все равно спасибо.