Bonsoir les amis, besoin d'aide
J'ai travaillé sur un programme de test "buffer overflow linux 64bit". Lors du lancement du programme, il demande un mot de passe.
L'objectif est d'exploiter un défaut de débordement de tampon dans le champ du mot de passe pour accéder à la partie shell. Comme je suis débutant dans ce domaine. pour mieux comprendre le code source associé "main.c" dans le lien ci-dessous.
J'utilise GDB et objdump sur Linux pour les points d'arrêt et le désassemblage.
Constatations / étapes prises:
Le mot de passe saisi est enregistré dans le registre RSP lorsque je fais la conversion de l'adresse du shell 0x9bd, qui est du genre sur mon PC « 0x555555559bd » avec gdb.
Puis jinverse ladresse. je reçois: ½IUUUU.
Lorsque je saisis cette valeur comme un mot de passe, j'obtiens l'adresse 0x555555559bd exactement dans le registre. RSP
Je sais aussi que je peux écraser la valeur RBP en tapant par exemple: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa½IUUUU.
L'adresse "0x555555559bd" est écrite dans le registres RBP.
Question: C'est là que je suis bloqué. J'aimerais simplement savoir quel type d'injection je pourrais faire pour faire un saut à l'adresse 0x555555559bd?
Voici le fichier contenant le code source et la commande cc: http://mtnb.be/test_login_overflow.rar
code : avec objdump -d ./programme
J'ai travaillé sur un programme de test "buffer overflow linux 64bit". Lors du lancement du programme, il demande un mot de passe.
L'objectif est d'exploiter un défaut de débordement de tampon dans le champ du mot de passe pour accéder à la partie shell. Comme je suis débutant dans ce domaine. pour mieux comprendre le code source associé "main.c" dans le lien ci-dessous.
J'utilise GDB et objdump sur Linux pour les points d'arrêt et le désassemblage.
Constatations / étapes prises:
Le mot de passe saisi est enregistré dans le registre RSP lorsque je fais la conversion de l'adresse du shell 0x9bd, qui est du genre sur mon PC « 0x555555559bd » avec gdb.
Puis jinverse ladresse. je reçois: ½IUUUU.
Lorsque je saisis cette valeur comme un mot de passe, j'obtiens l'adresse 0x555555559bd exactement dans le registre. RSP
Je sais aussi que je peux écraser la valeur RBP en tapant par exemple: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa½IUUUU.
L'adresse "0x555555559bd" est écrite dans le registres RBP.
Question: C'est là que je suis bloqué. J'aimerais simplement savoir quel type d'injection je pourrais faire pour faire un saut à l'adresse 0x555555559bd?
Voici le fichier contenant le code source et la commande cc: http://mtnb.be/test_login_overflow.rar
code : avec objdump -d ./programme
Code:
auth: format de fichier elf64-x86-64 Déassemblage de la section .init: 0000000000000758 <_init>: 758: 48 83 ec 08 sub $0x8,%rsp 75c: 48 8b 05 7d 18 20 00 mov 0x20187d(%rip),%rax # 201fe0 <_DYNAMIC+0x1f0> 763: 48 85 c0 test %rax,%rax 766: 74 02 je 76a <_init+0x12> 768: ff d0 callq *%rax 76a: 48 83 c4 08 add $0x8,%rsp 76e: c3 retq Déassemblage de la section .plt: 0000000000000770 <[email protected]>: 770: ff 35 92 18 20 00 pushq 0x201892(%rip) # 202008 <_GLOBAL_OFFSET_TABLE_+0x8> 776: ff 25 94 18 20 00 jmpq *0x201894(%rip) # 202010 <_GLOBAL_OFFSET_TABLE_+0x10> 77c: 0f 1f 40 00 nopl 0x0(%rax) 0000000000000780 <[email protected]>: 780: ff 25 92 18 20 00 jmpq *0x201892(%rip) # 202018 <_GLOBAL_OFFSET_TABLE_+0x18> 786: 68 00 00 00 00 pushq $0x0 78b: e9 e0 ff ff ff jmpq 770 <_init+0x18> 0000000000000790 <[email protected]>: 790: ff 25 8a 18 20 00 jmpq *0x20188a(%rip) # 202020 <_GLOBAL_OFFSET_TABLE_+0x20> 796: 68 01 00 00 00 pushq $0x1 79b: e9 d0 ff ff ff jmpq 770 <_init+0x18> 00000000000007a0 <[email protected]>: 7a0: ff 25 82 18 20 00 jmpq *0x201882(%rip) # 202028 <_GLOBAL_OFFSET_TABLE_+0x28> 7a6: 68 02 00 00 00 pushq $0x2 7ab: e9 c0 ff ff ff jmpq 770 <_init+0x18> 00000000000007b0 <[email protected]>: 7b0: ff 25 7a 18 20 00 jmpq *0x20187a(%rip) # 202030 <_GLOBAL_OFFSET_TABLE_+0x30> 7b6: 68 03 00 00 00 pushq $0x3 7bb: e9 b0 ff ff ff jmpq 770 <_init+0x18> 00000000000007c0 <[email protected]>: 7c0: ff 25 72 18 20 00 jmpq *0x201872(%rip) # 202038 <_GLOBAL_OFFSET_TABLE_+0x38> 7c6: 68 04 00 00 00 pushq $0x4 7cb: e9 a0 ff ff ff jmpq 770 <_init+0x18> 00000000000007d0 <[email protected]>: 7d0: ff 25 6a 18 20 00 jmpq *0x20186a(%rip) # 202040 <_GLOBAL_OFFSET_TABLE_+0x40> 7d6: 68 05 00 00 00 pushq $0x5 7db: e9 90 ff ff ff jmpq 770 <_init+0x18> 00000000000007e0 <[email protected]>: 7e0: ff 25 62 18 20 00 jmpq *0x201862(%rip) # 202048 <_GLOBAL_OFFSET_TABLE_+0x48> 7e6: 68 06 00 00 00 pushq $0x6 7eb: e9 80 ff ff ff jmpq 770 <_init+0x18> 00000000000007f0 <[email protected]>: 7f0: ff 25 5a 18 20 00 jmpq *0x20185a(%rip) # 202050 <_GLOBAL_OFFSET_TABLE_+0x50> 7f6: 68 07 00 00 00 pushq $0x7 7fb: e9 70 ff ff ff jmpq 770 <_init+0x18> 0000000000000800 <[email protected]>: 800: ff 25 52 18 20 00 jmpq *0x201852(%rip) # 202058 <_GLOBAL_OFFSET_TABLE_+0x58> 806: 68 08 00 00 00 pushq $0x8 80b: e9 60 ff ff ff jmpq 770 <_init+0x18> Déassemblage de la section .plt.got: 0000000000000810 <.plt.got>: 810: ff 25 e2 17 20 00 jmpq *0x2017e2(%rip) # 201ff8 <_DYNAMIC+0x208> 816: 66 90 xchg %ax,%ax Déassemblage de la section .text: 0000000000000820 <_start>: 820: 31 ed xor %ebp,%ebp 822: 49 89 d1 mov %rdx,%r9 825: 5e pop %rsi 826: 48 89 e2 mov %rsp,%rdx 829: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp 82d: 50 push %rax 82e: 54 push %rsp 82f: 4c 8d 05 ca 03 00 00 lea 0x3ca(%rip),%r8 # c00 <__libc_csu_fini> 836: 48 8d 0d 53 03 00 00 lea 0x353(%rip),%rcx # b90 <__libc_csu_init> 83d: 48 8d 3d d9 02 00 00 lea 0x2d9(%rip),%rdi # b1d <main> 844: ff 15 8e 17 20 00 callq *0x20178e(%rip) # 201fd8 <_DYNAMIC+0x1e8> 84a: f4 hlt 84b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0000000000000850 <deregister_tm_clones>: 850: 48 8d 3d 19 18 20 00 lea 0x201819(%rip),%rdi # 202070 <__TMC_END__> 857: 48 8d 05 19 18 20 00 lea 0x201819(%rip),%rax # 202077 <__TMC_END__+0x7> 85e: 55 push %rbp 85f: 48 29 f8 sub %rdi,%rax 862: 48 89 e5 mov %rsp,%rbp 865: 48 83 f8 0e cmp $0xe,%rax 869: 76 15 jbe 880 <deregister_tm_clones+0x30> 86b: 48 8b 05 5e 17 20 00 mov 0x20175e(%rip),%rax # 201fd0 <_DYNAMIC+0x1e0> 872: 48 85 c0 test %rax,%rax 875: 74 09 je 880 <deregister_tm_clones+0x30> 877: 5d pop %rbp 878: ff e0 jmpq *%rax 87a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 880: 5d pop %rbp 881: c3 retq 882: 0f 1f 40 00 nopl 0x0(%rax) 886: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 88d: 00 00 00 0000000000000890 <register_tm_clones>: 890: 48 8d 3d d9 17 20 00 lea 0x2017d9(%rip),%rdi # 202070 <__TMC_END__> 897: 48 8d 35 d2 17 20 00 lea 0x2017d2(%rip),%rsi # 202070 <__TMC_END__> 89e: 55 push %rbp 89f: 48 29 fe sub %rdi,%rsi 8a2: 48 89 e5 mov %rsp,%rbp 8a5: 48 c1 fe 03 sar $0x3,%rsi 8a9: 48 89 f0 mov %rsi,%rax 8ac: 48 c1 e8 3f shr $0x3f,%rax 8b0: 48 01 c6 add %rax,%rsi 8b3: 48 d1 fe sar %rsi 8b6: 74 18 je 8d0 <register_tm_clones+0x40> 8b8: 48 8b 05 31 17 20 00 mov 0x201731(%rip),%rax # 201ff0 <_DYNAMIC+0x200> 8bf: 48 85 c0 test %rax,%rax 8c2: 74 0c je 8d0 <register_tm_clones+0x40> 8c4: 5d pop %rbp 8c5: ff e0 jmpq *%rax 8c7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 8ce: 00 00 8d0: 5d pop %rbp 8d1: c3 retq 8d2: 0f 1f 40 00 nopl 0x0(%rax) 8d6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 8dd: 00 00 00 00000000000008e0 <__do_global_dtors_aux>: 8e0: 80 3d a1 17 20 00 00 cmpb $0x0,0x2017a1(%rip) # 202088 <completed.6960> 8e7: 75 27 jne 910 <__do_global_dtors_aux+0x30> 8e9: 48 83 3d 07 17 20 00 cmpq $0x0,0x201707(%rip) # 201ff8 <_DYNAMIC+0x208> 8f0: 00 8f1: 55 push %rbp 8f2: 48 89 e5 mov %rsp,%rbp 8f5: 74 0c je 903 <__do_global_dtors_aux+0x23> 8f7: 48 8b 3d 6a 17 20 00 mov 0x20176a(%rip),%rdi # 202068 <__dso_handle> 8fe: e8 0d ff ff ff callq 810 <[email protected]+0x10> 903: e8 48 ff ff ff callq 850 <deregister_tm_clones> 908: 5d pop %rbp 909: c6 05 78 17 20 00 01 movb $0x1,0x201778(%rip) # 202088 <completed.6960> 910: f3 c3 repz retq 912: 0f 1f 40 00 nopl 0x0(%rax) 916: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 91d: 00 00 00 0000000000000920 <frame_dummy>: 920: 48 8d 3d c1 14 20 00 lea 0x2014c1(%rip),%rdi # 201de8 <__JCR_END__> 927: 48 83 3f 00 cmpq $0x0,(%rdi) 92b: 75 0b jne 938 <frame_dummy+0x18> 92d: e9 5e ff ff ff jmpq 890 <register_tm_clones> 932: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 938: 48 8b 05 a9 16 20 00 mov 0x2016a9(%rip),%rax # 201fe8 <_DYNAMIC+0x1f8> 93f: 48 85 c0 test %rax,%rax 942: 74 e9 je 92d <frame_dummy+0xd> 944: 55 push %rbp 945: 48 89 e5 mov %rsp,%rbp 948: ff d0 callq *%rax 94a: 5d pop %rbp 94b: e9 40 ff ff ff jmpq 890 <register_tm_clones> 0000000000000950 <readPasswd>: 950: 55 push %rbp 951: 48 89 e5 mov %rsp,%rbp 954: 48 8d a4 24 d0 ef ff lea -0x1030(%rsp),%rsp 95b: ff 95c: 48 83 0c 24 00 orq $0x0,(%rsp) 961: 48 8d a4 24 20 10 00 lea 0x1020(%rsp),%rsp 968: 00 969: 48 8d 35 a8 02 00 00 lea 0x2a8(%rip),%rsi # c18 <_IO_stdin_used+0x8> 970: 48 8d 3d a3 02 00 00 lea 0x2a3(%rip),%rdi # c1a <_IO_stdin_used+0xa> 977: e8 64 fe ff ff callq 7e0 <[email protected]> 97c: 48 89 45 f8 mov %rax,-0x8(%rbp) 980: 48 83 7d f8 00 cmpq $0x0,-0x8(%rbp) 985: 75 16 jne 99d <readPasswd+0x4d> 987: 48 8d 3d a2 02 00 00 lea 0x2a2(%rip),%rdi # c30 <_IO_stdin_used+0x20> 98e: e8 fd fd ff ff callq 790 <[email protected]> 993: bf 01 00 00 00 mov $0x1,%edi 998: e8 63 fe ff ff callq 800 <[email protected]> 99d: 48 8b 45 f8 mov -0x8(%rbp),%rax 9a1: 48 89 c1 mov %rax,%rcx 9a4: ba 20 00 00 00 mov $0x20,%edx 9a9: be 01 00 00 00 mov $0x1,%esi 9ae: 48 8d 3d eb 16 20 00 lea 0x2016eb(%rip),%rdi # 2020a0 <passwd> 9b5: e8 e6 fd ff ff callq 7a0 <[email protected]> 9ba: 90 nop 9bb: c9 leaveq 9bc: c3 retq 00000000000009bd <runShell>: 9bd: 55 push %rbp 9be: 48 89 e5 mov %rsp,%rbp 9c1: 48 8d a4 24 e0 ef ff lea -0x1020(%rsp),%rsp 9c8: ff 9c9: 48 83 0c 24 00 orq $0x0,(%rsp) 9ce: 48 8d a4 24 20 10 00 lea 0x1020(%rsp),%rsp 9d5: 00 9d6: 48 8d 3d 7b 02 00 00 lea 0x27b(%rip),%rdi # c58 <_IO_stdin_used+0x48> 9dd: e8 ce fd ff ff callq 7b0 <[email protected]> 9e2: 90 nop 9e3: 5d pop %rbp 9e4: c3 retq 00000000000009e5 <check_passwd>: 9e5: 55 push %rbp 9e6: 48 89 e5 mov %rsp,%rbp 9e9: 48 8d a4 24 b0 ef ff lea -0x1050(%rsp),%rsp 9f0: ff 9f1: 48 83 0c 24 00 orq $0x0,(%rsp) 9f6: 48 8d a4 24 20 10 00 lea 0x1020(%rsp),%rsp 9fd: 00 9fe: c6 45 ff 00 movb $0x0,-0x1(%rbp) a02: 48 c7 45 d0 00 00 00 movq $0x0,-0x30(%rbp) a09: 00 a0a: 48 c7 45 d8 00 00 00 movq $0x0,-0x28(%rbp) a11: 00 a12: 48 c7 45 e0 00 00 00 movq $0x0,-0x20(%rbp) a19: 00 a1a: 48 c7 45 e8 00 00 00 movq $0x0,-0x18(%rbp) a21: 00 a22: c6 45 f0 00 movb $0x0,-0x10(%rbp) a26: 48 8d 3d 30 02 00 00 lea 0x230(%rip),%rdi # c5d <_IO_stdin_used+0x4d> a2d: e8 5e fd ff ff callq 790 <[email protected]> a32: 48 8b 05 47 16 20 00 mov 0x201647(%rip),%rax # 202080 <[email protected]@GLIBC_2.2.5> a39: 48 89 c7 mov %rax,%rdi a3c: e8 8f fd ff ff callq 7d0 <[email protected]> a41: 48 8d 45 d0 lea -0x30(%rbp),%rax a45: 48 89 c6 mov %rax,%rsi a48: 48 8d 3d 23 02 00 00 lea 0x223(%rip),%rdi # c72 <_IO_stdin_used+0x62> a4f: b8 00 00 00 00 mov $0x0,%eax a54: e8 97 fd ff ff callq 7f0 <[email protected]> a59: 80 7d ff 00 cmpb $0x0,-0x1(%rbp) a5d: 74 27 je a86 <check_passwd+0xa1> a5f: 48 8d 35 57 ff ff ff lea -0xa9(%rip),%rsi # 9bd <runShell> a66: 48 8d 3d 08 02 00 00 lea 0x208(%rip),%rdi # c75 <_IO_stdin_used+0x65> a6d: b8 00 00 00 00 mov $0x0,%eax a72: e8 49 fd ff ff callq 7c0 <[email protected]> a77: 48 8b 05 02 16 20 00 mov 0x201602(%rip),%rax # 202080 <[email protected]@GLIBC_2.2.5> a7e: 48 89 c7 mov %rax,%rdi a81: e8 4a fd ff ff callq 7d0 <[email protected]> a86: 48 8d 45 d0 lea -0x30(%rbp),%rax a8a: ba 20 00 00 00 mov $0x20,%edx a8f: 48 89 c6 mov %rax,%rsi a92: 48 8d 3d 07 16 20 00 lea 0x201607(%rip),%rdi # 2020a0 <passwd> a99: e8 e2 fc ff ff callq 780 <[email protected]> a9e: 85 c0 test %eax,%eax aa0: 74 07 je aa9 <check_passwd+0xc4> aa2: b8 00 00 00 00 mov $0x0,%eax aa7: eb 05 jmp aae <check_passwd+0xc9> aa9: b8 01 00 00 00 mov $0x1,%eax aae: c9 leaveq aaf: c3 retq 0000000000000ab0 <login>: ab0: 55 push %rbp ab1: 48 89 e5 mov %rsp,%rbp ab4: 48 8d a4 24 e0 ef ff lea -0x1020(%rsp),%rsp abb: ff abc: 48 83 0c 24 00 orq $0x0,(%rsp) ac1: 48 8d a4 24 20 10 00 lea 0x1020(%rsp),%rsp ac8: 00 ac9: b8 00 00 00 00 mov $0x0,%eax ace: e8 12 ff ff ff callq 9e5 <check_passwd> ad3: 85 c0 test %eax,%eax ad5: 75 1d jne af4 <login+0x44> ad7: 48 8d 3d a6 01 00 00 lea 0x1a6(%rip),%rdi # c84 <_IO_stdin_used+0x74> ade: e8 ad fc ff ff callq 790 <[email protected]> ae3: 48 8b 05 96 15 20 00 mov 0x201596(%rip),%rax # 202080 <[email protected]@GLIBC_2.2.5> aea: 48 89 c7 mov %rax,%rdi aed: e8 de fc ff ff callq 7d0 <[email protected]> af2: eb d5 jmp ac9 <login+0x19> af4: 90 nop af5: 48 8d 3d 9c 01 00 00 lea 0x19c(%rip),%rdi # c98 <_IO_stdin_used+0x88> afc: e8 8f fc ff ff callq 790 <[email protected]> b01: 48 8b 05 78 15 20 00 mov 0x201578(%rip),%rax # 202080 <[email protected]@GLIBC_2.2.5> b08: 48 89 c7 mov %rax,%rdi b0b: e8 c0 fc ff ff callq 7d0 <[email protected]> b10: b8 00 00 00 00 mov $0x0,%eax b15: e8 a3 fe ff ff callq 9bd <runShell> b1a: 90 nop b1b: 5d pop %rbp b1c: c3 retq 0000000000000b1d <main>: b1d: 55 push %rbp b1e: 48 89 e5 mov %rsp,%rbp b21: 48 8d a4 24 b0 ef ff lea -0x1050(%rsp),%rsp b28: ff b29: 48 83 0c 24 00 orq $0x0,(%rsp) b2e: 48 8d a4 24 20 10 00 lea 0x1020(%rsp),%rsp b35: 00 b36: 48 c7 45 d0 00 00 00 movq $0x0,-0x30(%rbp) b3d: 00 b3e: 48 c7 45 d8 00 00 00 movq $0x0,-0x28(%rbp) b45: 00 b46: 48 c7 45 e0 00 00 00 movq $0x0,-0x20(%rbp) b4d: 00 b4e: 48 c7 45 e8 00 00 00 movq $0x0,-0x18(%rbp) b55: 00 b56: c6 45 f0 00 movb $0x0,-0x10(%rbp) b5a: 48 8d 3d 5f 01 00 00 lea 0x15f(%rip),%rdi # cc0 <_IO_stdin_used+0xb0> b61: e8 2a fc ff ff callq 790 <[email protected]> b66: 48 8b 05 13 15 20 00 mov 0x201513(%rip),%rax # 202080 <[email protected]@GLIBC_2.2.5> b6d: 48 89 c7 mov %rax,%rdi b70: e8 5b fc ff ff callq 7d0 <[email protected]> b75: b8 00 00 00 00 mov $0x0,%eax b7a: e8 d1 fd ff ff callq 950 <readPasswd> b7f: b8 00 00 00 00 mov $0x0,%eax b84: e8 27 ff ff ff callq ab0 <login> b89: b8 00 00 00 00 mov $0x0,%eax b8e: c9 leaveq b8f: c3 retq 0000000000000b90 <__libc_csu_init>: b90: 41 57 push %r15 b92: 41 56 push %r14 b94: 41 89 ff mov %edi,%r15d b97: 41 55 push %r13 b99: 41 54 push %r12 b9b: 4c 8d 25 36 12 20 00 lea 0x201236(%rip),%r12 # 201dd8 <__frame_dummy_init_array_entry> ba2: 55 push %rbp ba3: 48 8d 2d 36 12 20 00 lea 0x201236(%rip),%rbp # 201de0 <__init_array_end> baa: 53 push %rbx bab: 49 89 f6 mov %rsi,%r14 bae: 49 89 d5 mov %rdx,%r13 bb1: 4c 29 e5 sub %r12,%rbp bb4: 48 83 ec 08 sub $0x8,%rsp bb8: 48 c1 fd 03 sar $0x3,%rbp bbc: e8 97 fb ff ff callq 758 <_init> bc1: 48 85 ed test %rbp,%rbp bc4: 74 20 je be6 <__libc_csu_init+0x56> bc6: 31 db xor %ebx,%ebx bc8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) bcf: 00 bd0: 4c 89 ea mov %r13,%rdx bd3: 4c 89 f6 mov %r14,%rsi bd6: 44 89 ff mov %r15d,%edi bd9: 41 ff 14 dc callq *(%r12,%rbx,8) bdd: 48 83 c3 01 add $0x1,%rbx be1: 48 39 dd cmp %rbx,%rbp be4: 75 ea jne bd0 <__libc_csu_init+0x40> be6: 48 83 c4 08 add $0x8,%rsp bea: 5b pop %rbx beb: 5d pop %rbp bec: 41 5c pop %r12 bee: 41 5d pop %r13 bf0: 41 5e pop %r14 bf2: 41 5f pop %r15 bf4: c3 retq bf5: 90 nop bf6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) bfd: 00 00 00 0000000000000c00 <__libc_csu_fini>: c00: f3 c3 repz retq Déassemblage de la section .fini: 0000000000000c04 <_fini>: c04: 48 83 ec 08 sub $0x8,%rsp c08: 48 83 c4 08 add $0x8,%rsp c0c: c3 retq