본문 바로가기

shellcode

Insertion Encoder Insertion Encoder 이번에는 Insertion Encode에 대해서 알아보도록 하겠습니다. Insertion이라는 뜻은 삽입이라는 뜻입니다. 즉, 인코딩을 하는데 임의의 값을 삽입하여 인코딩을 한다는 것이죠.임의의 쉘 코드에 임의의 값을 사이사이에 넣어서 인코딩하는 방식입니다. 마찬가지로 execve 소스코드를 가지고 해보도록 하겠습니다. objdump를 이용해서 셀 코드를 만듭니다. 해당 셀 코드를 Insertion Encoding을 하도록 하겠습니다. 해당 python 소스코드를 이용해서 쉘 코드 사이사이에 0xAA라는 값을 넣는 프로그램입니다. 해당 python을 실행하면 헥스값 사이사이에 0xaa값이 들어갔습니다. 디코더 만들기 컴파일 후 objdump를 이용해 쉘 코드를 만듭니다. .. 더보기
execve shellcode execve shellcode 본격적으로? 쉘을 실행시켜보도록 하겠습니다. execv를 이용하여 /bin/sh를 실행하는 쉘 코드를 만들어보도록 하겠습니다. execve의 인자 값은 다음과 같습니다.int execve(const char *filename, char *const argv[], char *const envp[]) 입니다. filename에 /bin/sh가 들어가고, argv[]에 /bin/sh의 주소를 넣고, envp[]에 널을 넣습니다. 소스코드 작성하기 x86 eax값에 11을 넣고 pop을 이용해 스택에 저장된 /bin/sh의 주소를 가져옵니다. ecx에 널을 넣고 커널에 넘겨줍니다. 컴파일 후 실행하면 정상적으로 쉘이 실행된 것을 확인할 수 있습니다. 소스코드 작성하기 x64 x86.. 더보기
JMP-CALL-POP 기술 JMP-CALL-POP 기술 점프, 콜, 팝 기술은 매우 중요합니다. 중요한 이유는 자신이 작성한 코드를 실행시킬 수 있기 때문이죠. 앞 포스팅에서 HelloWorld가 실행되지 않았는데, 이 것을 JMP-CALL-POP을 이용해서 실행이 되도록 해보겠습니다. JMP-CALL-POP 변경 JMP-CALL-POP를 이용하여 소스코드를 수정했습니다.왜 이러한 방식으로 소스코드를 작성 했을까요? 소스코드 분석을 해보도록 하겠습니다. 5 : call_shellcode로 점프합니다.25: shellcode를 호출합니다.※ 왜 jmp를 이용해서 넘어가도 되는데 굳이 call를 이용하나요? call을 이용하는 이유는 call를 실행하게 되면 호출된 해당 함수가 끝난 후에 다시 돌아오기 위해서 주소를 stack에 저장.. 더보기
Hello World Shellcode Hello World Shellcode 앞서서 계속 만들어본 Hello World ASM 코드를 가지고 Shellcode를 만들어 보겠습니다. HelloWorld.nasm 소스코드 입니다. 이 코드를 objdump를 이용하여 NULL이 존재하는지 확인해 보도록 하겠습니다. 역시 NULL이 존재하게 됩니다. 이제 이 소스코드를 NULL이 나오지 않게 바꿔보도록 하겠습니다. objdump 를 이용하여 확인한 결과 0x00값이 없는 것을 알 수 있습니다.이제 이 실행파일을 objdump를 이용하여 쉘 코드를 만듭니다. 쉘 코드가 만들어 졌으므로 테스트를 해봅시다. GCC로 컴파일 후 실행 시켰지만 뭔가 실행이 되긴 했습니다. 하지만 HelloWorld는 출력되지 않았습니다.이 이유는 문자열이 저장된 hello.. 더보기
Shellcoding Shellcoding 쉘 코딩이란 무엇 일까요?쉘 코드는 특별한 목적으로 사용하기 위한 기계어? 라고 하면 좋을 것 같습니다. 쉘을 실행시키는 것이 목적이죠.쉘을 실행시킨다는 것은 보안적인 관점에서 매우 중요한 부분입니다. 쉘이 실행된다는 것은 명령어를 실행 시킬 수 있다는 것이고, 명령어가 실행이 된다는 것은 어떠한 작업도 가능하다는 이야기 입니다. 쉘 코드를 만들 때 유의사항쉘 코드는 크기가 중요한데, 작은 크기일 수록 좋습니다.또한 0x00(NULL)이 들어가지 않아야 합니다. NULL 값이 들어가면 실행이 되지 않습니다. Exit Shellcode 간단하게 Exit가 실행되는 쉘 코드를 만들어 보겠습니다. exit()가 실행되는 ASM코드 입니다. 쉘 코드를 만들때 NULL이 들어가면 안된다고 했.. 더보기