execve 셸코드?
임의의 프로그램을 실행하는 셸코드이다.
execve를 이용하면 서버의 셸을 획득할 수 있음.특징으론 execve 시스템 콜만으로 구성이 됨.
syscall
|
rax
|
arg0 (rdi)
|
arg1 (rsi)
|
arg2 (rdx)
|
execve
|
0x3b
|
const char *filename
|
const char *const *argv
|
const char *const *envp
|
*argv: 실행파일에 넘겨줄 인자, envp: 환경변수
우리는 sh만 실행하면 되기 때문에 execve("/bin/sh", null, null)을 실행하는 것을 목표로 셸코드를 작성해볼거임.
# execve.c 파일 생성
nano execve.c
# execve.c 파일 컴파일
gcc -o execve execve.c -masm=intel
#컴파일 후 실행
bash$ ./execve
sh$ id
uid=1000(실행중인 사용자 계정) gid=1000(실행중인 사용자 계정) groups=1000(실행중인 사용자 계정)
execve Shellcode 와 orw Shellcode 어케 다름
execve는 shell을 여는 코드이다. 파일을 읽거나 쓰지는 않고, shell을 실행한 뒤에 공격자가 직접 명령을 입력할 수 있도록 한다.반면에, orw Shellcode는 파일을 열고, 읽고, 출력하는 shell코드임. 즉, 파일을 직접 조작하는 것을 목표로 한다.
objdump 로 assembly code -> byte code 형태로 추출
Assembly code → Byte Code(Opcode) 변환은 어셈블리 코드(Assembly Code)를 기계어(바이너리) 코드로 변환하는 과정을 의미한다.
즉, 사람이 이해할 수 있는 어셈블리 코드를 *CPU가 실행할 수 있는 16진수 코드로 변환 하는 것임.
objdump를 사용해 추출해볼거임.
# shellcode.asm 파일 생성
nano shellcode.asm
먼저 shellcode( Assembly code )가 들어있는 파일을 생성해준다.
$ sudo apt-get install nasm # NASM(어셈블러) 패키지 설치
$ nasm -f elf shellcode.asm # shellcode.asm 파일을 ELF 오브젝트 파일로 변환
$ objdump -d shellcode.o # 오브젝트 파일에서 디스어셈블 실행
* NASM(넷와이드 어셈블러)은 x86 및 x86-64용 어셈블리 코드를 작성할 때 사용하는 어셈블러.
* objdump : ELF 파일의 기계어 코드를 분석하는 유틸리티.
위에 명령어를 실행해서 바이트 코드로 추출해줌.
추출 후에 objcopy 명령어를 이용하면 shellcode.bin 파일을 얻을 수 있다.
그리고 xxd 명령어로 shellcode.bin 파일의 내용의 바이트 값들을 16진수 형태로 확인.
# .text 섹션의 기계어 코드만 추출하여 shellcode.bin 파일로 저장
$ objcopy --dump-section .text=shellcode.bin shellcode.o # .text 섹션의 기계어 코드만 추출하여 shellcode.bin 파일로 저장
# shellcode.bin 파일의 내용을 16진수(Hex)로 출력하여 바이트 코드(Opcode) 확인
$ xxd shellcode.bin
'System Hacking > Basics' 카테고리의 다른 글
[시스템 해킹] Memory Corruption / Stack Buffer Overflow (0) | 2025.03.12 |
---|---|
[시스템 해킹] 함수 호출 규약/ x86, x86-64 (0) | 2025.03.11 |
[시스템 해킹] 셸코드(Shellcode) 2- orw 셸코드 컴파일, 실행, 디버깅 (0) | 2025.03.10 |
[시스템 해킹] 셸코드(Shellcode) 1- orw 셸코드 작성 open & read & write (0) | 2025.03.10 |
[시스템 해킹] pwntools 사용법 (0) | 2025.03.07 |