Universal Shellcode for Windows ( 윈도우 범용 쉘코드 )
·
System Hacking(OS)/Shellcode
보호되어 있는 글입니다.
Shellcode 만들기 - 4 (쉘코드 동작 원리 이해 및 제작)
·
System Hacking(OS)/Shellcode
(대부분) 시스템의 명령어 쉘을 실행시키는 기계어 코드로 작성된 쉘코드를 만들기 위해, 먼저 시스템의 명령어 쉘을 실행시키는 간단한 C 언어 프로그램을 작성하고, 이를 어셈블리어 코드로 변환한 뒤, 끝으로 불필요한 부분을 제거하여 최적화된 기계어 코드를 얻는 과정을 거친다. 먼저 시스템의 명령어 쉘을 실행시키는 간단한 프로그램을 작성한다. 본 프로그램에서는 unistd.h 헤더 파일에 정의된 execve 함수를 사용하여 "/bin/sh"에 있는 명령어 쉘을 실해시킨다. execve 함수는 파일 이름이 가리키는 실행 가능한 바이너리 파일이나 스크립트 파일을 실행하는 함수로, 함수 프로토타입(함수 원형)은 다음과 같이 정의되어 있다. * 사진이 잘렸을 경우 사진 클릭시 원본 사이즈로 보여짐 각 인자는 con..
Shellcode 만들기 - 3 (메모리 세그먼트 구조)
·
System Hacking(OS)/Shellcode
일반적으로 운영체제는 하나의 프로세스를 실행하게 되면 이 프로세스를 세그먼트(Segment) 단위로 메모리에 저장한다. 이 세그먼트는 다시 세 영역으로 구분되어, 컴파일러(Compiler)에 의해 기계어 코드로 변환된 명령어 집합이 저장되는 코드 세그먼트(Code Segment), 프로그램이 참조하는 데이터(주로 전역(global) 변수들)가 저장되는 스택 세그먼트(Stack Segment)로 나뉜다. 이 때 메모리에 저장되는 위치는 보통 실행 시간(Run Time, 실행되는 순간)에 정해지기 때문에, 컴파일 과정에서 각 명령어의 정확한 위치를 지정해 줄 수 없다. 따라서 각 세그먼트는 가상 주소인 논리적 주소(Logical Address)를 사용하여 상대적인 위치를 지정한 후, 실행 시간에 정해지는 자..
Shellcode 만들기 - 2 (시스템 및 프로그래밍 기본 사항)
·
System Hacking(OS)/Shellcode
시스템 및 프로그래밍 기본 사항 쉘코드의 동작 원리에 대한 설명에 앞서, 앞으로 이를 이해하는 데 필요한 기본적인 시스템의 메모리 구조 및 어셈블리 명령어, 그리고 프로그램 세부 동작 과정을 차례로 살펴본다. 1. 인텔(Intel) x86 32비트 레지스터 인텔 x86 아키텍쳐에서 제공하는 32비트 레지스터는 크게 범용(General-Purpose) 레지스터, 세그먼트(Segment) 레지스터, 명령어 포인터(Instruction Pointer), 플래그(Flag) 레지스터로 나누어 볼 수 있다. 먼저 범용 레지스터는 일반적인 연산이나 데이터 저장 등의 용도로 사용되는 4개의 일반 레지스터와(EAX,EBX,ECX,EDX), 간접 주소 지정 및 문자열 비교에 사용되는 2개의 인덱스(Index) 레지스터(E..
Shellcode 만들기 - 1 (쉘코드 정의 및 종류)
·
System Hacking(OS)/Shellcode
쉘코드의 정의 쉘코드(Shellcode)는 시스템의 특정 명령을 실행하는 작은 사이즈의 프로그램을 뜻하여, 일반적으로 기계어 코드(Machine Code)로 작성되어 있다. 쉘코드란 단어는 공격 대상 시스템의 명령어 쉘(Command Shell-etc:bash)을 실행시킨다는 의미로부터 파생되었으며, 주로 소프트웨어 취약점을 통한 공격(Exploitation) 이후 실행될 작은 규모의 프로그램(Payload)으로 사용된다. 실제 쉘코드의 예는 아래와 같다. \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2..