본문 바로가기

wargame/LOB FC

LOB FC3 [dark_eyes -> hell_fire] 를 풀다가 생긴 의문점에 대한 분석

1.왜 <do_system+1124>로 ret을 바꾸면 쉘이 따지는가?


먼저 그부분의 어셈블리를 한번 살펴보자.


0x75077f <do_system+1119>:    call   0x743d30 <sigprocmask>

0x750784 <do_system+1124>:      mov    ecx,DWORD PTR [ebx-316]

0x75078a <do_system+1130>:      xor    edx,edx

0x75078c <do_system+1132>:      xor    eax,eax

0x75078e <do_system+1134>:      mov    DWORD PTR [ebx+5820],edx

0x750794 <do_system+1140>:      lea    edx,[ebx-47601]

0x75079a <do_system+1146>:      mov    edi,DWORD PTR [ecx]

0x75079c <do_system+1148>:      mov    DWORD PTR [ebx+5816],eax

0x7507a2 <do_system+1154>:      mov    DWORD PTR [esp+4],esi

0x7507a6 <do_system+1158>:      mov    DWORD PTR [esp+8],edi

0x7507aa <do_system+1162>:      mov    DWORD PTR [esp],edx

0x7507ad <do_system+1165>:      call   0x7a5490 <execve>


do_system+1124는 sigprocmask 함수를 call하고 난뒤의 바로 뒤따라오는 어셈명령어 부분이다. 
이부분은 execve의 인자를 구성하는 단계로 call하기 바로 직전 인자의 상태를 확인해보면 다음과 같다.

execve("/bin/sh",{"/home/dark_eyes/hell_fire",NULL},envp)

이 구문을 해석해보자면, sh쉘을 hell_fire라는 이름으로 실행시키는 것이다.

그러므로 당연히 쉘이 따진다.