[asm] execve i takie tam.

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.

0

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

0

[code]
#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"
    );      
            

}
[/code]

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

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

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