Как я могу вызвать SIGALARM при выполнении следующего кода?

#c #signal-handling #suid

#c #обработка сигналов #suid

Вопрос:

Как я могу использовать уязвимость set-guid для запуска файла / bin / grade, который принадлежит root, используя следующие 3 уязвимых программы? Я не являюсь root и не являюсь частью групп bsp *, поэтому мой доступ к программам ограничен только чтением и выполнением. Для файла / bin / grade у меня есть доступ только для чтения, но я хочу выполнить его как group bsp *.

Как я могу вызвать SIGALRM из командной строки при выполнении этого кода?

Я вызову программу в командной строке с

exec -a «/bin/grade» prog1 1000 amp;

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

char cmdbuf[128] = "echo interrupt signal caught, terminating ";
char *progname;

void handle_signal(int sig)
{
   int len = sizeof(cmdbuf) - (strlen(cmdbuf)   1);
   if (strlen(progname) > len)
      progname[len] = '';
   strcat(cmdbuf, progname);

   system(cmdbuf);
   exit(1);
}

void usage()
{
   printf("%s <n> where 0 < n <= 1000n", progname);
   exit(1);
}

/* 
 * The program takes one argument line parameter n (which has to be a
 * positive integer input parameter) and then prints out the first n
 * prime numbers.
 */
int main(int argc, char **argv)
{
   struct sigaction sa;
   int cnt, N, found;
   unsigned long candidate, divisor;

   gid_t egid = getegid();
   setregid(egid, egid);

   /* set up signal handling */
   memset(amp;sa, sizeof(struct sigaction), 0);
   sa.sa_handler = handle_signal;
   sigaction(SIGALRM, amp;sa, NULL);


   /* process argument */
   progname = argv[0];
   if (argc != 2)
      usage();
   N = strtol(argv[1], NULL, 10);
   if ((N <= 0) || (N > 1000))
      usage();


   /* calculate prime numbers -- simple sieve */
   candidate = 1;
   for (cnt = 0; cnt < N;   cnt) {

      for (;;) {
         found = 1;
         divisor = 2;
         candidate  = 1;

         while (divisor <= candidate/2) {
            if ((candidate % divisor) == 0) {
               found = 0;
               break;
            }
            else
                 divisor;
         }
         if (found)
            break;
      }
      printf("%ldn", candidate);
   }

   return 0;
}
  

Комментарии:

1. Вы можете использовать команду kill () для передачи сигналов вашему процессу с помощью оболочки

2. в противном случае вы можете использовать alarm (время) в своем собственном коде для автоматической генерации в вашем коде