OS/Linux

[RedHat] 쉘코드(Shellcode) 만들기 실습

Dexter_- 2020. 4. 22. 16:17
728x90
반응형

 

Shellcode 만들기


 

 

 

참고 블로그

 

쉘코드 (shellcode) 만들기

- 쉘코드 함수의 return address를 임의의 주소로 변경할 경우 임의의 주소에 있는 프로그램을 실행시킬수 있다. 이때 프로그램이 Set-UID나 deamon으로 실행되고 있는 경우에 발생한다면 상당히 위험하

5log.tistory.com

 

 

쉘코드

함수의 return address를 임의의 주소로 변경할 경우 임의의 주소에 있는 프로그램을 실행시킬 수 있다.

 

 

레지스터 용도

  • EAX 시스템 콜(system call) 함수 번호
  • EBX 첫번째 함수 인자
  • ECX 두번째 함수 인자
  • EDX 세번째 함수 인자

 

 

execve 함수 사용

execve 실행

 

 

execve 의 호출 번호 확인

 

 

어셈블리 코드 작성

 

 

- 코드 풀이

. glbal _start

_start:

C 언어에서 main과 같은 부분 형식

 

xor %eax, %eax
xor %edx, %edx

xor은 다르면 1이고 같은 값을 xor 하면 0으로 초기화 된다.

 

push %eax
push %0x68732f2f
push %0x6e69622f
mov %esp, %ebx

 

  1. 스택에 eax를 넣는다.
  2. 0x68732f2f (//sh)을 넣는다.
  3. 0x6e69622f (/bin)을 넣는다
  4. 주소 ebx에 저장한다.

 

/bin/sh 는 7byte로 /bin//sh는 같은 동작을 함으로 8byte로 맞춰 주었다.

0x68732f2f, 0x6e69622f 은 "//sh", "/bin" 각각 아스키코드 16진수 값을 리틀 엔디언 방식으로 변환 된 값이다.

 

push %edx
push %ebx
mov %esp, %ecx

 

  1. 스택에 edx를 넣는다.
  2. ebx를 넣는다. (위에서 ebx는 /bin//sh의 주소를 저장)
  3. 주소를 ecx에 저장한다. (ecx는 /bin//sh의 주소를 저장한다.)

 

movb $0x0B, %al
int $0x80

 

  1. execve 함수를 호출한다. (앞서 확인한 호출번호 11을 16진수로 변환)
  2. int %0x80 인터럽트를 호출한다. (실행)

 

오브텍트 코드 생성 및 실행 파일 생성

 

 

objdump 프로그램을 이용한 OP CODE 추출

 

쉘코드 실행

위에서 추출한 16진수를 문자열로 변경하여 쉘 코드 생성

 

 

 

 

 

 

728x90
반응형