• STATISTIQUES
  • Il y a eu un total de 1 membres et 4998 visiteurs sur le site dans les dernières 24h pour un total de 4 999 personnes!


    Membres: 2 605
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] osix
    Site de challenge qui utilise un système de level on chaque épreuve doit être réussie avant d'accédÃ...
    Challenges
    [EN] Rosecode
    Programming: 36, Math: 29, Probability: 5, Sequence: 7, Crypto: 4, Brainf**k: 13, TimeRace: 4, Hack: 9
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!

    €



Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Socket + envoie de commande
23-04-2013, 15h27 (Modification du message : 25-04-2013, 13h02 par notfound.)
Message : #1
notfound Hors ligne
#!/usr/bin/env bash
*



Messages : 687
Sujets : 47
Points: 271
Inscription : Sep 2012
[C] Socket + envoie de commande
Hi there !

J'ai besoin d'aide concernant un programme que j'ai réalisé en C ! Je dois envoyer des commandes à un vidéoproj via câble Ethernet et j'ai pour l'occasion créé un programme qui se sert des sockets pour envoyer la commande ( i.e les commandes : PWR ON, PWR OFF).
Or, mon problème est que lors de l'execution de mon programme, il y a bien établissement de connection etc, mais je ne retrouve pas (sous wireshark) ma commande envoyée ...

Si quelqu'un aurait une idée Wink

Voici mon programme :

Code C :

#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

/*DEFINE*/
#define MAX 400
#define PORT_CLIENT 50000
#define PORT_SERV 3629
#define IP "192.168.100.100"
#define SOCK_ERREUR -1


int main(){

        int sock, len, fromlen;
        char msg[MAX]="PWR OFF";
        char reponse[MAX];

        struct sockaddr_in serv_addr;
        struct sockaddr_in cli_addr;
        struct sockaddr_in adresse;

        len = sizeof(msg);

        /************** Informations sur le client ****************/
        sock = socket(AF_INET, SOCK_STREAM,0);
        memset(&cli_addr, 0, sizeof(struct sockaddr_in));
        cli_addr.sin_family = AF_INET;
        cli_addr.sin_addr.s_addr = INADDR_ANY;
        cli_addr.sin_port = htons(0);


        /************* Informations sur le serveur ***************/
        memset(&serv_addr, 0, sizeof(struct sockaddr_in));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = inet_addr(IP);
        serv_addr.sin_port = htons(PORT_SERV);


        /* Si l'attachement de la socket echoue, on sort du programme */
        if( bind(sock, (struct sockaddr *)&cli_addr, sizeof(struct sockaddr_in)) < 0){
                printf("[!] Erreur attachement socket \n");
                exit(0);
        }

        getsockname(sock, (struct sockaddr *)&adresse, &fromlen);
       
        if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in)) != SOCK_ERREUR){
                printf("[+] Connect ok \n");
        }
       
        getsockname(sock, (struct sockaddr *)&adresse, &fromlen);
        printf("[+] L'adresse IP choisie apres le CONNECT est %s \n", inet_ntoa(adresse.sin_addr));    

        /* Envoi du message msg au serveur*/
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
        printf("[+] Le port choisi est %s \n", htons(cli_addr.sin_port));
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur : %s \n", reponse);
        close(sock);
}
 


A l'execution, j'obtiens :

Code BASH :

gcc npn.c -o EPSONN && ./EPSONN
[+] Connect ok
[+] L adresse IP choisie apres le CONNECT est 192.168.100.10
[+] Envoi du message "PWR OFF"  au serveur effectué !
[+] Le port choisi est (null)
[+] Reponse du serveur : ESC/VP.net
 


Sous Wireshark :

[Image: 1366723639.png]

PS : j'ai programmé en C car je ne connais pas d'autres langages pour l'instant, mais si vous souhaitez le faire en python ou autres, libre à vous.

EDIT : J'ai réussi ! Wireshark c'est vraiment puissant quoi
Merci à vous pour votre aide

EDIT 2 :
Voici mon code C fonctionnel

Code C :

/****************************************************/
/* Programme  : EPSON.exe                           */
/* Objectif   : Controle videoprojecteur EPSON      */
/*            : Envoie de commandes via Socket      */
/* Auteur     : Notfound                       */
/* Date       : 25/04/2013                          */
/* Plateforme : Unix - Win32/64                     */
/* Version    : v0 (Version initiale)               */
/****************************************************/

#if defined (WIN32)
  #include <winsock2.h>
#elif defined (linux)
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <netdb.h>
  #include <arpa/inet.h>
  #include <unistd.h>
#endif

#include<string.h>
#include<stdio.h>
#include<stdlib.h>

#define MAX 400
#define PORT_CLIENT 40011
#define PORT_SERV 3629
#define SOCK_ERREUR -1
#define IP_EP1 "10.190.11.32"

int main(){

  #if defined (WIN32)   //Si OS = Windows
    int nbSleep = 3000; //sleep(milliseconde) sous WINDOWS
    WSADATA WSAData;
    int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
  #else
    int nbSleep = 3;    //sleep(seconde) sous UNIX
  #endif

  struct sockaddr_in serv_addr;
  struct sockaddr_in cli_addr;

  int sockCommandePWRON, sockCommandePWROFF, len, choix=0, vrai=1;

  // Correspond au message  "ESC/VP.net" pour établissement de connexion
  char msgConnect[]={0x45, 0x53, 0x43, 0x2f, 0x56, 0x50, 0x2e, 0x6e, 0x65, 0x74, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00 };

  char msgCommandePWROFF[]="PWR OFF\x0d";
  char msgCommandePWRON[]="PWR ON\x0d";

  /************** Informations sur le client ****************/
  sockCommandePWRON = socket(AF_INET, SOCK_STREAM,0);
  sockCommandePWROFF = socket(AF_INET, SOCK_STREAM,0);
  memset(&cli_addr, 0, sizeof(struct sockaddr_in));
  cli_addr.sin_family = AF_INET;
  cli_addr.sin_addr.s_addr = INADDR_ANY;
  cli_addr.sin_port = htons(0);

  /************* Informations sur le serveur ***************/
  memset(&serv_addr, 0, sizeof(struct sockaddr_in));
  serv_addr.sin_family = AF_INET;
  serv_addr.sin_addr.s_addr = inet_addr(IP_EP1);
  serv_addr.sin_port = htons(PORT_SERV);


  /***********  Creation d'un menu pour l'utilisateur *********/
  while (vrai){
    #if defined (WIN32)
      system("cls");
    #else
      system("clear");
    #endif

    printf("+---------[ MENU ]--------+\n");
    printf("|                         |\n");
    printf("|   1) POWER ON EP1       |\n");
    printf("|   2) POWER OFF EP1      |\n");
    printf("|                         |\n");
    printf("|   0) QUIT               |\n");
    printf("+-------------------------+\n");
    printf("| @IP EP1 : %s  |\n",IP_EP1);
    printf("+-------------------------+\n");

    printf("\nChoix : ");scanf("%d", &choix);

    switch(choix){

      case 0 :
        printf("[!] Fermeture normale du programme... \n");
        vrai=0;

      case 1 :                          
        /*******[Attachement & Connexion de la socket ********/
        bind(sockCommandePWRON, (struct sockaddr *)&cli_addr, sizeof(struct sockaddr_in));
        connect(sockCommandePWRON, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in));
        printf("[+] Connexion au videoprojecteur EPSON \n");
        /********[ Premier message / Message de connection ]********/
        /* Envoi du message msg au serveur*/
        len = sizeof(msgConnect);
        send(sockCommandePWRON, msgConnect, len, 0);
        sleep(nbSleep/2);
        /*****************************[ Deuxieme message / Envoi de la commande ]**************/
        len = sizeof(msgCommandePWRON);
        send(sockCommandePWRON, msgCommandePWRON, len, 0);
        printf("[+] Envoi de la commande effectuee : Le videoprojecteur va s'allumer\n\n");    

        close(sockCommandePWRON);
        sleep(nbSleep);
        break;

      case 2 :
        /********[ Attachement & Connexion de la socket ]********/
        bind(sockCommandePWROFF, (struct sockaddr *)&cli_addr, sizeof(struct sockaddr_in));                        
        connect(sockCommandePWROFF, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in));
        printf("[+] Connexion au videoprojecteur EPSON \n");
        /*****[ Premier message / Message de connection ]****/
        len = sizeof(msgConnect);
        send(sockCommandePWROFF, msgConnect, len, 0);
        printf("[+] Envoi du message de connexion\n");
        sleep(nbSleep/2);
        /*****[ Deuxieme message / Envoi de la commande ]***/
        len = sizeof(msgCommandePWROFF);
        send(sockCommandePWROFF, msgCommandePWROFF, len, 0);
        printf("[+] Envoi de la commande effectuee : Le videoprojecteur va s'eteindre\n\n");
       
        close(sockCommandePWROFF);
        sleep(nbSleep);                
        break;

      default:  /* Si l'utilisateur choisit une option inconnue */
        printf("\n[!] Choix invalide ! \n\n");
        sleep(nbSleep);
    }
  }

  #if defined (WIN32)
    WSACleanup();
  #endif

  sleep(nbSleep/3);
}
 


PS : Je sais, system() c'est le mal.
+1 (1) -1 (0) Répondre
23-04-2013, 15h29
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,610
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: [C] Socket + envoie de commande
Et t'as quoi si tu fais "Follow TCP Stream" ?
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
23-04-2013, 18h03 (Modification du message : 24-04-2013, 14h12 par notfound.)
Message : #3
notfound Hors ligne
#!/usr/bin/env bash
*



Messages : 687
Sujets : 47
Points: 271
Inscription : Sep 2012
RE: [C] Socket + envoie de commande
(23-04-2013, 15h29)supersnail a écrit : Et t'as quoi si tu fais "Follow TCP Stream" ?

J'ai la chose suivante :

[Image: 1366723910.png]



EDIT :
Avec le logiciel EPSON, j'obtiens la chose suivante en analysant la trame :

[Image: 1366732939.png]

Or, j'arrive à obtenir le début, mais pas la suite. Malgré le fait que j'envoie ensuite les autres instructions ...

[Image: 1366733056.png]


Quelqu'un aurait une idée de génie ? Smile
+1 (0) -1 (0) Répondre
23-04-2013, 18h25 (Modification du message : 23-04-2013, 18h27 par gruik.)
Message : #4
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Socket + envoie de commande
(23-04-2013, 15h27)notfound a écrit : Si quelqu'un aurait une idée Wink

[Image: batman-fle.png%5D]

ben j'ai l'impression que tu causes simplement pas exactement le même protocole que l'appareil en face

sur la capture des paquets, on voit clairement l'établissement de connexion (SYN - SYN/ACK - ACK), tu envoies 1 paquet de données (PUSH), le serveur te répond un truc lui aussi (PUSH), puis l'un des deux met fin à la connexion (toi avec ton FIN à priori ?)

et au niveau du "follow tcp stream" dans wireshark, on voit bien qu'un dialogue normal avec le videoprojecteur, on envoit un paquet (probablement pour dire bonjour), on recoit un paquet du serveur (le meme que tu recevais en envoyant ton PWR OFF), puis on envoit un 2nd paquet à priori pour lui demander la version du protocole ou du logiciel ou autre, le serveur répond et après seulement on renvoit un paquet avec la commande PWR OFF

difficile de dire beaucoup plus, si vraiment tu galères ca pourrait etre une bonne idée de mettre les .pcap en piece jointe éventuellement...
+1 (1) -1 (0) Répondre
23-04-2013, 19h43
Message : #5
notfound Hors ligne
#!/usr/bin/env bash
*



Messages : 687
Sujets : 47
Points: 271
Inscription : Sep 2012
RE: [C] Socket + envoie de commande
Est-ce que ça ne viendrait pas de mon code C ?

Code C :

recv(sock, reponse, MAX, 0);
printf("[+] Reponse du serveur : %s \n", reponse);
close(sock);
 


Peut-être ne faut-il pas que je close ma socket ?
+1 (0) -1 (0) Répondre
23-04-2013, 19h47
Message : #6
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,610
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: [C] Socket + envoie de commande
Ben ça dépend (comme le dit gruik) de comment c'est implémenté au niveau de ton vidéoprojecteur.

Et comme j'ai dit iirc, le plus simple dans ce cas c'est de faire du reverse-engineering sur l'application "officielle" pour comprendre comment c'est fait.

Et comme dit gruik (again :>), file-nous le .pcap de la transmission "officielle" faite par le prog epson pour y voir plus clair Wink
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
24-04-2013, 10h51
Message : #7
notfound Hors ligne
#!/usr/bin/env bash
*



Messages : 687
Sujets : 47
Points: 271
Inscription : Sep 2012
RE: [C] Socket + envoie de commande
Le fichier .pcap du trafic entier "officiel" avec le logiciel EPSON

http://dl.free.fr/getfile.pl?file=/lSJuWFKk
+1 (0) -1 (0) Répondre
24-04-2013, 12h25 (Modification du message : 24-04-2013, 12h27 par Kiwazaru.)
Message : #8
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [C] Socket + envoie de commande
Code C :
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

/*DEFINE*/
#define MAX 400
#define PORT_CLIENT 50000
#define PORT_SERV 3629
#define IP "192.168.100.100"
#define SOCK_ERREUR -1


int main(){

        int sock, len, fromlen;
        char msg[MAX]="";
        char reponse[MAX];

        struct sockaddr_in serv_addr;
        struct sockaddr_in cli_addr;
        struct sockaddr_in adresse;

        len = sizeof(msg);

        /************** Informations sur le client ****************/
        sock = socket(AF_INET, SOCK_STREAM,0);
        memset(&cli_addr, 0, sizeof(struct sockaddr_in));
        cli_addr.sin_family = AF_INET;
        cli_addr.sin_addr.s_addr = INADDR_ANY;
        cli_addr.sin_port = htons(0);


        /************* Informations sur le serveur ***************/
        memset(&serv_addr, 0, sizeof(struct sockaddr_in));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = inet_addr(IP);
        serv_addr.sin_port = htons(PORT_SERV);


        /* Si l'attachement de la socket echoue, on sort du programme */
        if( bind(sock, (struct sockaddr *)&cli_addr, sizeof(struct sockaddr_in)) < 0){
                printf("[!] Erreur attachement socket \n");
                exit(0);
        }

        getsockname(sock, (struct sockaddr *)&adresse, &fromlen);
       
        if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in)) != SOCK_ERREUR){
                printf("[+] Connect ok \n");
        }
       
        getsockname(sock, (struct sockaddr *)&adresse, &fromlen);
        printf("[+] L'adresse IP choisie apres le CONNECT est %s \n", inet_ntoa(adresse.sin_addr));    
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "ESC/VP.net");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur : %s \n", reponse);
                //

                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "VER?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (VER): %s \n", reponse);
                //
               
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "LAMP?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (LAMP): %s \n", reponse);
                //
               
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "PWSTATUS?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (PWSTATUS): %s \n", reponse);
                //
               
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "SOURCE?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (SOURCE): %s \n", reponse);
                //
               
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "VER?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (VER): %s \n", reponse);
                //

                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "SNO?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (SNO): %s \n", reponse);
                //
               
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "MBSTATUS?");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (MBSTATUT): %s \n", reponse);
                //
               
                //
        /* Envoi du message msg au serveur*/
        sprintf(msg, "%s", "IMPWR OFF");
        send(sock, msg, len, 0);
        printf("[+] Envoi du message \"%s\"  au serveur effectué ! \n", msg);
       
        /* Reception du message du serveur stocké dans buffer */
        recv(sock, reponse, MAX, 0);
        printf("[+] Reponse du serveur (IMPWR OFF): %s \n", reponse);
                //
        close(sock);
                if(strcmp(reponse, ":IMEVENT=0001 04 00000002 00000000 T1 F1\n:IMEVENT=0001 01 00000000 00000000 T1 F1\n:") == 0){
                        printf("[+] Video projecteut Eteint !\n");
                }
                else{
                        printf("[+] Erreur !");
                }
}
 


On vois dans tes requêtes entre ton PC et ton VideoProjecteur :

ESC/VP.net......
ESC/VP.net.... .VER?
VER=260051300BWWV121
VER=1XGV43
VER=263051WWV121
VER=----
VER=----
:
LAMP?
LAMP=11
:
PWSTATUS?
PWSTATUS=03 00000002 00000000 T1 F1
:
SOURCE?
SOURCE=41
:
VER?
VER=260051300BWWV121
VER=1XGV43
VER=263051WWV121
VER=----
VER=----
:
SNO?
SNO=QVTF281374L
:
MBSTATUS?
MBSTATUS=01 01
:
IMPWR OFF
:IMEVENT=0001 04 00000002 00000000 T1 F1
:IMEVENT=0001 01 00000000 00000000 T1 F1
:


Rouge: PC
Bleu: VideoProjecteur EPSON

On vois donc bien que le logiciel EPSON envoi des requêtes du style la version du vidéo-projecteur, la Source ... et ensuite il envoi "IMPWR OFF" autrement dit éteindre la machine, c'est peu être grâce à toute ces requêtes (VER?, SOURCE?) que le vidéo-projecteur va comprendre qu'une action va être effectué ou quoi (On ne peut pas trop en savoir plus, aucune doc existe apparemment).

Dans le nouveau code C, on simule donc toute ses requêtes au lieu d'envoyer directement "IMPWR OFF'" que le vidéo-projecteur ne comprendra sûrement pas sans les requêtes VER?, SOURCE? préalablement envoyées.

Ce n'est que déduction :p, pour le code je sais pas si on peut faire plus simple/propre.
Donne nous des nouvelles du projet Wink
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (1) -1 (0) Répondre
24-04-2013, 13h00 (Modification du message : 24-04-2013, 13h10 par gruik.)
Message : #9
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Socket + envoie de commande
je crois plutot que le probleme vient du fait qu'il n'envoit qu'un seul paquet et ferme la connexion, à mon avis envoyer un paquet bonjour / attendre la reponse du videoprojecteur / envoyer la commande IMPWR OFF doit suffire

edit:
paquet bonjour : "ESC/VP.net\x10\x03\x00\x00\x00\x00"
=> doit recevoir du vp : "ESC/VP.net\x10\x03\x00\x00\x20\x00"
paquet commande : "IMPWR OFF\n"
=> et là encore le vp renvoit qqes données

suite à ça... j'imagine que le vp shutdown donc qu'on peut fermer la connexion comme un sale, à tester...
+1 (0) -1 (0) Répondre
24-04-2013, 13h16
Message : #10
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [C] Socket + envoie de commande
"ESC/VP.net\x10\x03\x00\x00\x00\x00" les \xXX\ derrière servent à quoi?
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (0) -1 (0) Répondre
24-04-2013, 13h56
Message : #11
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Socket + envoie de commande
c'est une notation hexadecimale, 0x41 == \x41 == 'A' == 101o (octal) == 0o101
sinon c'est très exactement ce qu'on voit transiter dans la capture en l'occurence, pour des raisons de lisibilité wirehsark remplace les caractères ASCII non-printable par des points '.'
+1 (0) -1 (0) Répondre
24-04-2013, 13h57
Message : #12
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [C] Socket + envoie de commande
Yep mais comment tu as su que c'était \x10\x03\x00\x00\x00\x00 0x10 puis 0x03 etc ? Vu qu'on ne vois que des points.
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (0) -1 (0) Répondre
24-04-2013, 14h00 (Modification du message : 24-04-2013, 14h02 par gruik.)
Message : #13
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Socket + envoie de commande
ben en fouillant dans les bons paquets (tcp push)et en regardant le détail, ou dans la vue "follow tcp stream" tu peux aussi switcher vers "raw" ou "C array"

edit: typiquement le paquet n°14 de la capture, dans la fenetre principale cliquer sur "data" met en surbrillance dans le paquet les octets en question par exemple
+1 (0) -1 (0) Répondre
24-04-2013, 14h11 (Modification du message : 24-04-2013, 14h12 par notfound.)
Message : #14
notfound Hors ligne
#!/usr/bin/env bash
*



Messages : 687
Sujets : 47
Points: 271
Inscription : Sep 2012
RE: [C] Socket + envoie de commande
BTW, j'ai réussi hein (cf. edit 1er post)
+1 (0) -1 (0) Répondre
24-04-2013, 16h52
Message : #15
Kiwazaru Hors ligne
Padawan d'un super escargot
*



Messages : 284
Sujets : 26
Points: 139
Inscription : Mar 2012
RE: [C] Socket + envoie de commande
Yep j'ai look Smile

Code C :
char peer1_0[] = {
0x45, 0x53, 0x43, 0x2f, 0x56, 0x50, 0x2e, 0x6e,
0x65, 0x74, 0x10, 0x03, 0x00, 0x00, 0x20, 0x00 };


On vois bien la chaîne "0x10, 0x03, 0x00, 0x00, 0x20, 0x00" qui donne ton code ensuite Smile
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [shellcode] Reverse shell over reused socket ark 4 303 11-03-2014, 11h51
Dernier message: Ark
  [C] Socket Client-Serveur -> Write() + Read() sakiir 7 331 18-03-2013, 07h19
Dernier message: sakiir
  NEED HELP / SOCKET;FILTRES XDR; RPC notfound 4 281 21-01-2013, 02h18
Dernier message: notfound

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut