해킹/시스템해킹

[시스템해킹 도전기 3편] 쉘코드(1)

놀고싶다~ 2021. 1. 30. 16:24

안녕하세요~ 오랜만에 글을 씁니다 ㅎ..

매일 매일 글을 쓰도록 노력해보겠습니다!

 

오늘은 쉘코드에 대해서 알아보고자 합니다!

 

쉘코드(shellcode)

 

1) 쉘코드의 의미

 

시스템의 특정 명령을 실행 할 수 있는 코드

쉘코드의 파생의미는 공격 대상 시스템의 명령어 쉘(Command Shell-etc:bash)을 실행시킨다는 의미

소프트웨어 취약점 이용을 위한 내용에 사용됨

 

2) 쉘코드 제작 방법 구조

 

C언어

 

어셈블리어

 

기계어

 

 

3) 쉘코드 제작 C언어

 

(1) C언어 코드 작성(시스템 콜 함수 작성)

 

(2) /tmp/syswirte.c 에 저장

 

(3) 저장한 파일 컴파일

기존 컴파일 방식에서 static을 붙여서 정적 컴파일 하게 되는데 이는 필요한 함수를 다 포함하여 컴파일 하는 방식이다.(따라서 용량도 크게 나옴을 볼 수 있음)

 

(4) GDBwirte() 분석하기 - 어셈블리어

 

GDB?

 

GDB같은 디버거의 목적은 다른 프로그램 수행 중에 그 프로그램 내부에서무슨 일이 일어나고 있는지 보여주거나 프로그램이 잘못 실행되었을 때 무슨 일이 일어나고 있는지 보여주는 것이다. GDBC, C++ 등으로 짠 프로그램을 디버그 할 수 있다.

쉘에서 gdbGDB를 시작하면 quit로 종료명령을 주기전까지는 터미널로부터 명령라인을 읽어 들인다. help명령을 사용하여 gdb내부에서 도움말을 볼 수 있다.

 

GDB 셋팅 명령어 및 자주 사용하는 명령어

 

1) 셋팅 명령어

 

GDBwrite() 분석

1) gdb로 파일 분석하고 intel로 세팅후에 분석할 write 보기

 

gdb에서 핵심적으로 보아야 할 부분을 아래 그림에 간추렸습니다.

 

 

위 부분을 해석하자면 mov는 어셈블리어에서 이동의 의미를 지니고 있고 edx,ecx,ebx,eax는 각각의 스택공간입니다.

DWORD PTR [공간] 의 의미는 앞에 있는 공간에 복사한다는 의미를 지니고 있습니다.

따라서 edx,ecx,ebx 의 공간에 각각에 스택에 있는 값들을 복사한다는 의미를 지니고 있고 eax에는 16진수로 표현된 4를 넣는다는 의미입니다

 

위 값들이 미리 작성된 C언어에서는 어떤 값들을 가지고 있는지 알아보겠습니다

아래의 그림을 참고하겠습니다.

 

 

오늘은 여기까지 마무리 하겠습니다! (내용이 많기때문에 다음편에서 추가로 진행 하도록 하겠습니다.)

 

쉘코드를 가장 기본적으로 알아야 하는데 어셈블리어도 알아야 하고 기계어도 알아야 해서 저도 처음에는 많이 헤매면서 배운거같습니다 ㅎ 다른 분들의 블로그도 참고하면서 익히다 보니 이제는 조금(?) 익숙해진거같은데요!

 

처음 보시는 분이시라면 자주 익혀보시고 쳐보시는 것을 추천드립니다!

 

수고많으셨습니다!