[asm] execve i takie tam.

Odpowiedz Nowy wątek
sfor
2004-05-31 08:58
sfor
0

Hej, mamy taki kod:

#include <stdio.h>

int main ()
{
char a[2];
a[0] = "ls";
a[1] = "-a";
a[2] = (char
)0;
execve (a[0], a, (char *)0);
}

I teraz to bym chcial w asemblerze, i tutaj mam maly problem, ale dobra:

#include <stdio.h>

int main()
[
asm(

            "xor    %eax, %eax      \n"
            "push   %eax            \n"
            "push   $0x736c2f       \n" 
            "push   $0x6e69622f     \n"
            "mov    %esp, %ebx      \n" // "/bin/ls" 

            "push   %eax            \n" // (char *) 0       
            "push   $0x612d20       \n" // " -a "
            "push   %ebx            \n" // "/bin/ls"
            "mov    %esp, %ecx      \n"

            "xor    %edx, %edx      \n" // (char *)0

            "mov    $11, %eax       \n"
            "int    $0x80           \n"

            /* exit (1) */
            "xor    %ebx, %ebx      \n"
            "inc    %ebx            \n"
            "mov    $1, %eax        \n"
            "int    $0x80           \n"

);
}

I gdy ten kod przepuściłem przez strace to tam jest coś takiego:

execve("/bin/ls", ["/bin/ls", umovestr: Input/output error
0x612d20], [/ 0 vars /]) = -1 EFAULT (Bad address)

Gdy dam w komentarz, tą linie:

"push $0x612d20 \n"

To wtedy pójdzie, ale program wtedy będzie odpalany tak:

execve ("/bin/ls", ["/bin/ls"], (char *)0);

A mi chodzi żeby było

execve ("/bin/ls", ["/bin/ls", "-a"], (char *)0);

Help me ? :)
Pozdrawiam.

Pozostało 580 znaków

2004-05-31 09:13

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

I w czym problem? Ładujesz ciąg, zamiast wskaźnika do niego. Zrób na odwrót.


Linuksa, czy innego Uniksa, można opisać za pomocą logiki boolowskiej a nie za pomocą prawdopodobieństwa.

'System szesnastkowy jest wspaniały! W skali od 1 do 10 daję mu E'

extreme safety for Ubuntu:
sudo echo -e 'Defaults targetpw\nDefaults timestamp_timeout=0' >> /etc/sudoers

Pozostało 580 znaków

sfor
2004-05-31 14:29
sfor
0


#include <stdio.h>

int main ()
{
asm(
/ execve /
"xor %eax, %eax\n"
"push %eax\n"
"push $0x736c2f\n"
"push $0x6e69622f\n"
"mov %esp, %ebx\n"

            "push   %eax\n"
            "push   $0x612d\n"
            "push   $0x20736c2f\n"
            "push   $0x6e69622f\n"
            "mov    %esp, %ecx\n"

            "xor    %edx, %edx\n"

            "mov    $11, %eax\n"
            "int    $0x80\n"

            /* exit */
            "xor    %ebx, %ebx\n"
            "inc    %ebx\n"
            "mov    $1, %eax\n"
            "int    $0x80\n"
    );      

}

Czemu powyższy kod nie wykonuje komendy: /bin/ls -a ?

Pozostało 580 znaków

2004-05-31 14:52

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

a co Ty chcesz napisac ?? :> bo mi to na shellcode wygląda :d no ale cóż, jak masz z tym problemy to proponuję zajżeć do jakiś exploitów ;p

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0