[shellcode] Reverse shell over reused socket
|
07-03-2014, 17h41
(Modification du message : 10-03-2014, 11h12 par ark.)
Message : #1
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
[shellcode] Reverse shell over reused socket
|
|
07-03-2014, 18h11
Message : #2
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: [shellcode] Reverse shell over reused socket
comme ça au pif, si la socket est bloquante le F_GETFD bloque aussi non ?
sur ce lien on trouve une méthode similaire mais à base de F_GETFL |
|
10-03-2014, 15h20
(Modification du message : 10-03-2014, 15h20 par ark.)
Message : #3
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: [shellcode] Reverse shell over reused socket
Je viens de tester le coup du F_GETFL et il s'avère que le programme boucle inf sans trouver la socket ; j'ai pas non plus fait comme ce que fait le mec dans son shellecode. Mais bon, trouver le FD ça marche, mon soucis c'est vraiment la partie binding des i/o sur la socket. Si je vire ma boucle pour faire les dup2(), bah le shell spawn bien coté serveur.
Ah oui, et j'ai edit mon premier message pour mettre le code du "getsc" ;) EDIT : Shellcode modifié, le problème venait du fait que les dup2 étaient fait sur la socket serveur, donc forcement ca ne marchait pas... Merci à Gruik pour m'avoir éclairé :p Code ASM :
Bon, c'est encore expérimental puisqu'on est pas encore sur que le FD trouvé est le bon... Je vais faire des recherches pour pouvoir trouver le bon et je vous tiens au courant. :) Pendant que j'y suis, pour pouvoir executer des commandes après, il va falloir envoyer l'input de notre shell vers notre nc ; on utilisera donc la commande suivante : Code BASH :
|
|
10-03-2014, 16h47
Message : #4
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: [shellcode] Reverse shell over reused socket
(10-03-2014, 15h20)Ark a écrit : Bon, c'est encore expérimental puisqu'on est pas encore sur que le FD trouvé est le bon... comme dit en pv une technique à mon avis assez fiable consiste à partir du principe que suite à l'exploitation le processus/thread est voué à mourir de toutes façons du coup l'idée est de faire un read() de 4 octets sur tous les descripteurs prêts à être lus, en partant de 255 et decroissant, jusqu'à tomber sur le motif qu'on aura choisi "TOTO" ou 0xdeadbeef etc. ainsi on est quasi-certain de retrouver la bonne socket c'est la technique qui était (est ?) utilisée dans le stager_sock_find de metasploit |
|
10-03-2014, 16h57
(Modification du message : 11-03-2014, 12h39 par ark.)
Message : #5
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: [shellcode] Reverse shell over reused socket
Yep, merci =)
Je vais commencer par implémenter ca, puis je passerai sur de l'optimisation de taille. Et eventuellement du retirage des octets en 0x00. Au passage, si quelqu'un se sent d'en faire une version 32bits, ca peut etre koule =) Et sinon, je pensais à également faire un truc plus discret encore, c'est à dire qui rendrait la main qu process une fois qu'on en a fini avec notre shell. Je pensais partir sur un fork avant de faire la recherche de la socket, et puis wait() et return dans le père, ca devrait etre pas trop mal. Bref, j'vous tiens au courant quoi :) EDIT : Bon, alors, j'ai mis en place la technique proposé par Gruik, ça marche pas encore à tous les coups, mais je vois pas encore pourquoi :p Donc, voici le code : Code ASM :
J'utilise un appel a recvrom() pour read sur la socket ; j'ai reservé de l'espace sur la stack pour stocker le dword lu. Il est ensuite comparé (0x42424242 == BBBB) et si la comparaison match, on peut lancer le shell sur notre socket. Pour le lancer, j'ai un peu modifié ma ligne, puisqu'il faut lui envoyer le pattern : Code BASH :
Voilà ! Bon, donc ça, ça drop un shell de temps en temps, il y a des fois ou il part en boucle inf, sans arriver à lire le pattern sur la socket, donc la comparaison reste toujours fausse. C'est assez bizarre, peut etre qu'il n'arrive pas à lire parce qu'il passe trop vite, et le message est pas encore envoyé ; du coup il ne le lit pas. Mais je me dis que dans ce cas il devrait tout de même le lire au deuxieme passage ... Je ne sais pas trop encore, je continue mes recherches ! :p |
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
[C] Socket + envoie de commande | notfound | 27 | 1,338 |
26-04-2013, 20h41 Dernier message: Kiwazaru |
|
[C] Socket Client-Serveur -> Write() + Read() | sakiir | 7 | 447 |
18-03-2013, 07h19 Dernier message: sakiir |
|
NEED HELP / SOCKET;FILTRES XDR; RPC | notfound | 4 | 316 |
21-01-2013, 02h18 Dernier message: notfound |
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)