Dodany przez: andrewdre, 22:34 21-07-2023

Nowy Pobierz
  1. #include <iostream>
  2. #include <fcntl.h>
  3. #include <unistd.h>
  4. #include <sys/mount.h>
  5. #include <sys/wait.h>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     if (unshare(CLONE_NEWNS|CLONE_NEWCGROUP|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWPID) == -1){
  12.         perror("unshare");
  13.         exit(1);
  14.     }
  15.     int namespace_fd = open("/var/run/netns/afirefox", O_RDONLY|O_CLOEXEC);
  16.     if ((namespace_fd) == -1){
  17.         perror("open");
  18.         exit(1);
  19.     }
  20.     if (setns(namespace_fd, CLONE_NEWNET) == -1){
  21.         perror("setns");
  22.         exit(1);
  23.     }
  24.     if (close(namespace_fd) == -1){
  25.         perror("close");
  26.         exit(1);
  27.     }
  28.     if (mount("/proc/self/ns/net", "/var/run/netns/afirefox", "none", MS_BIND, NULL) == -1) {
  29.         perror("mount");
  30.         exit(1);
  31.     }
  32.  
  33.     int pid = fork();
  34.     if (pid != 0) {
  35.         if (setresuid(-1, 1001, 1001) == -1){
  36.             perror("setresuid");
  37.             exit(1);
  38.         }
  39.         int status;
  40.         if (waitpid(-1, &status, 0) == -1){
  41.             perror("waitpid");
  42.             exit(1);
  43.         }
  44.         return status;
  45.     }
  46.  
  47.     if (mount("none", "/", NULL, MS_PRIVATE|MS_REC, NULL) == -1) {
  48.         perror("mount");
  49.         exit(1);
  50.     }
  51.     if (chroot("/path/to/new/root/") == -1){
  52.         perror("chroot");
  53.         exit(1);
  54.     }
  55.     if (chdir("/") == -1){
  56.         perror("chdir");
  57.         exit(1);
  58.     }
  59.     if (mount("proc", "/proc", "proc", MS_NOSUID|MS_NODEV|MS_NOEXEC, NULL) == -1) {
  60.         perror("mount");
  61.         exit(1);
  62.     }
  63.  
  64.     if (setresuid(-1, 1001, 1001) == -1){
  65.         perror("setresuid");
  66.         exit(1);
  67.     }
  68.  
  69.     if (execlp("/bin/bash", "/bin/bash", NULL) == -1){
  70.         perror("execlp");
  71.         exit(1);
  72.     }
  73.  
  74.     return 0;
  75. }
  76.  

Źródło:

Ostatnie wpisy

Linki

Funkcje