Shellcode(쉘코드) 정의
- Shellcode란 시스템의 특정 명령을 실행할 수 있는 기계어 코드이다
- 아래에서 제작한 Shellcode는 쉘을 떨어뜨리기 위한 쉘코드이다
Shellcode(쉘코드) 제작 순서
-
c언어로 구현
-
gdb로 역 어셈블링하여 필요한 부분 찾기
-
시스템 콜에 필요한 필수 부분만으로 어셈블리어 구현
-
컴파일 후 objdump로 기계어를 출력
-
null이 존재할 시 null값을 변환 처리하여 없앤다
-
기계어 코드들을 하나의 문장으로 완성
1. c언어로 구현
2. gdb로 역 어셈블링하여 필요한 부분 찾기
eax | ebx | ecx | edx |
execve(11번) 16진수 - 0b |
/bin/sh | 배열의 시작 주소 (/bin/sh의 주소) |
0 |
함수 호출 번호 | 첫 번째 인자 자리 | 두 번째 인자 자리 | 세 번째 인자 자리 |
3. 시스템 콜에 필요한 필수 부분만으로 어셈블리어 구현
4. 컴파일 후 objdump로 기계어를 출력
5. null이 존재할 시 null값을 변환 처리하여 없앤다
null 값 이후에 값들을 복사하지않아 정상적으로 동작하지 않는다는 문제점이 있기 때문에 null값을 다 지워준다
- 레지스터 너비 수정 ( 8비트, 16비트 레지스터 사용)
ex) 32bit : eax, 16bit : ax, 8bit : al
- XOR ( 자기 자신을 XOR하여 0삽입)
ex) xor eax, eax
6. 기계어 코드들을 하나의 문장으로 완성
추출 명령어
for i in $(objdump -d ./shellcode | grep "^ "|cut -f2);do echo -n \\x$i;done
7. 6번에서 추출해낸 기계어 코드를 테스트해 본다
'시스템 해킹' 카테고리의 다른 글
ASCII Armor (0) | 2020.11.10 |
---|---|
ASLR ( Address Space Layout Randomization ) (0) | 2020.11.10 |
RTL ( Return to Libc ) (0) | 2020.11.06 |
DEP (Data Execution Prevention) (0) | 2020.11.06 |
Stack Buffer Overflow (스택 버퍼 오버플로우) (0) | 2020.11.06 |