본문 바로가기

High Level Technique/Shellcoding

JMP-CALL-POP 기술

JMP-CALL-POP 기술


점프, 콜, 팝 기술은 매우 중요합니다. 중요한 이유는 자신이 작성한 코드를 실행시킬 수 있기 때문이죠. 


앞 포스팅에서 HelloWorld가 실행되지 않았는데, 이 것을 JMP-CALL-POP을 이용해서 실행이 되도록 해보겠습니다.










JMP-CALL-POP 변경





JMP-CALL-POP를 이용하여 소스코드를 수정했습니다.

왜 이러한 방식으로 소스코드를 작성 했을까요? 소스코드 분석을 해보도록 하겠습니다.


5 : call_shellcode로 점프합니다.

25: shellcode를 호출합니다.

왜 jmp를 이용해서 넘어가도 되는데 굳이 call를 이용하나요?

call을 이용하는 이유는 call를 실행하게 되면 호출된 해당 함수가 끝난 후에 다시 돌아오기 위해서 주소를 stack에 저장하게 됩니다.

이 스택에 저장한 값을 pop을 이용해 사용하는 것이죠.


13 : 스택에 있는 값을 pop하여 ecx에 저장합니다.

※ 출력하는 함수인 write()는 ecx 레지스터에 문자열 포인터가 들어갑니다.

따라서, ecx에 값을 저장하기 위해서 25줄에서 스택에 쌓았던 Hello World 문자열을 pop을 통하여 가져옵니다.


그 이후는 전과 같습니다.









objdump로 확인하기




0x00 값이 없는 것을 확인합니다.












objudmp로 쉘 코드 만들기














쉘 코드 테스트





정상적으로 Hello World가 출력된 것을 확인할 수 있습니다.


'High Level Technique > Shellcoding' 카테고리의 다른 글

execve shellcode  (0) 2016.03.13
RIP 상대주소 이용하기  (0) 2016.03.13
Hello World Shellcode  (0) 2016.03.13
Shellcoding  (0) 2016.03.13
Libc, Nasm  (0) 2016.03.11