commit 6d7ea95206f370df80d8774856f81579dc5600cb
parent 6d82ae0f70fc61dbd592e4d721757c662358e4ac
Author: Szymon Mikulicz <szymon.mikulicz@posteo.net>
Date: Fri, 3 Jul 2026 15:12:36 +0200
Sumthin
Diffstat:
| M | main.c | | | 18 | ++++++++++++++---- |
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/main.c b/main.c
@@ -5,6 +5,7 @@
#include <malloc.h>
#include <sched.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>
@@ -50,11 +51,20 @@ const size_t MAGICS_size = sizeof(MAGICS) / sizeof(MAGICS[0]);
}
int main(int argc, char **argv) {
- int bbox, script, self;
+ int bbox, script, self, envfile;
size_t self_size;
unsigned char *self_map;
checkerr(bbox = memfd_create("busybox", 0), != -1);
+ checkerr(envfile = memfd_create("envfile", 0), != -1);
+ dprintf(envfile, "export ENV; echo No payload present, starting shell.");
+
+ char *envstr;
+ checkerr(asprintf(&envstr, "/dev/fd/%i", envfile), != -1);
+ setenv("ENV", envstr, 1);
+
+ checkerr(asprintf(&envstr, "/dev/fd/%i", bbox), != -1);
+ setenv("BUSYBOX", envstr, 1);
checkerr(write(bbox, _inc_busybox, _inc_busybox_size), != -1);
@@ -88,11 +98,11 @@ int main(int argc, char **argv) {
checkerr(write(script, &self_map[payload_i], payload_size), != -1);
munmap(self_map, self_size);
- char scriptarg[1024];
+ char *scriptarg;
if (tool)
- snprintf(scriptarg, 1024, ". <(%s /dev/fd/%i)", tool, script);
+ asprintf(&scriptarg, ". <(%s /dev/fd/%i)", tool, script);
else
- snprintf(scriptarg, 1024, ". /dev/fd/%i", script);
+ asprintf(&scriptarg, ". /dev/fd/%i", script);
char **newargv = malloc(sizeof(char *) * (argc + 4));
newargv[0] = "ash";