분류 전체보기 57

shellcode (0x2f 없애기)

간혹가다 디렉터리명/파일명에 쉘코드를 넣어놓고 argv[0]나 스택의 끝부분을 활용해야하는 상황이 있습니다. 우리가 만들어논 25byte 쉘코드로는 실행이 되지 않습니다. 왜 그럴까요? 0x2f때문인데요, 0x2f은 /(슬래쉬)로 디렉터리를 구분하는데 쓰이는 문자죠 물론 기존 쉘코드에 맞추어서 분리시키는 방법도 있겠네요,,, 생각만해도 귀찮,,, ... 0x2f ... 0x2f ... 이번 포스팅에서는 0x2f 없이 작동되는 쉘코드를 만들어볼까 합니다. 문자열 "/bin//sh"를 넘겨주는 코드에서 0x2f가 포함되네요. 그럼 0x2f부분을 0x2e+1로 바꾸는 식으로 코딩을 해 봅시다. eax 레지스터를 통해 연산 수행 후 스택에 push 해줍니다. 코드는 잘 실행 됩니다. 정말 0x2f가 없어졌나 확..

shellcode (4)

지금까지 shellcode의 원리, 제작에 관한 전반적인 과정들을 함께 진행해 보았습니다. 이번 포스팅에서는 최종적으로 /bin/sh, shell을 실행시키는 shellcode를 만들어보면서 마무리를 해볼까 합니다. eds000n.github.io/syscalls-x86.html Linux Syscall Reference eds000n.github.io systemcall 11번 execve의 인자를 우선 살펴봅시다. reg eax ebx ecx edx type 0xd *filename *argv[ ] *envp[ ] value 11(syscall 번호) "/bin/sh"의 주소 배열 ["/bin/sh", NULL] 의 주소 배열 [NULL] 의 주소 filename (ebx) 실행하고자 하는 프로그램,..

shellcode (3)

지난번 만들었던 shellcode에서 0x00을 제거해 봅시다. 크게 두가지의 부분에서 널바이트가 포함되네요. mov {reg}, {value} mov {reg}, 0 첫번째 문제는 입력되는 값을 레지스터의 크기에 맞추기 위해 널 바이트를 포함시키면서 발생합니다. eax레지스터로 예를 들어보자면, mov eax, 4 : eax(32bit = 4byte)에 전달하기 위해선, 값이 0x4가 아닌 0x00000004가 되는겁니다. 이를 바로잡기위해 최소한의 공간을 이용하는데, 이러한 경우에는 al(1byte)을 이용합니다. eax레지스터 안에서도 구역이 나뉘어져 있습니다. 31 16 8 0 ah al 여기서 명심해야할 부분이 있습니다. eax에 어떠한 data가 들어있는지 모르기 때문에 초기화를 한번 해주어야..

shellcode (2)

1편에 이어서 system call 호출 부분만을 따로 shellcode를 만들어봅시다. 저는 개인적으로 더 편한 intel 문법으로 코딩해 볼게요. hello.asm → hello.o → hello assembly source file assembler (nasm) object file linker (ld) executable file 1 BITS 32 2 3 global _start 4 5 section .text 6 _start: 7 ; write(4, "hello world!" addr, 13) 8 mov eax, 4 9 mov ebx, 1 10 push 0x0a 11 push 0x21646c72 12 push 0x6f77206f 13 push 0x6c6c6568 14 mov ecx, esp 15..

shellcode (1)

shellcode란, 취약한 프로그램에 대하여 공격자가 실행시키고자 하는 코드임다. 흔히 쉘(shell)을 실행시키기 떄문에 shellcode라는 이름이 붙었지요. 상황에따라 사용되는 쉘코드의 종류는 굉장히 다양한데, 매번 우리가 원하는 쉘코드를 구글링해서 붙여쓸수는 없겠죠? 그래서 이번 기회에 쉘코드 제작에 관한 전반적인 과정들을 같이 알아볼까 합니다. 첫 코딩 국룰, "세상에게 인사하기" 우선, 이번시간에는 c언어 프로그램의 함수 호출과정을 분석해보기까지 해봅시다. 깔끔하게 분석하고자 보호기법들을 대강 꺼주었습니다. -fno-stack-protector -no-pie -fno-pic 글고 정적 할당과 32bit 컴파일 옵션 -static -m32 각 보호기법들의 세세한 작동 과정은 따로 포스팅 해 놓..