2012. 3. 21. 00:10

execstack -q BINARY

했을때
X 나오면
스택이 executable 한거라네요 ㅎㅎ

일단 확인을 했으니 설정하고 다시 코드로 확인 하는방법!  



2) 최근 lnx kernel 문제

kernel 옵션 중 kernel.randomize_va_space랑 kernel.exec-shield 라는 옵션이 있심...
kernel.randomize_va_space는 random stack기능에 대한거고..
kernel.exec-shield는 executable-stack기능에 대한거고..
0으로 설정하면 Off 1로 설정하면 On
kernel 옵션을 설정하는 파일은 /etc/sysctl.conf이고 이 파일을 다음과 같이 수정한 후 리붓하면 해당 기능들이 꺼짐:

kernel.randomize_va_space = 0
kernel.exec-shield = 0

같은 맥락에서 gcc 옵션도 해 줘야 할 것이 있는데 다음과 같은 옵션이 있음:

-mpreferred-stack-boundary=2
-fno-stack-protector
-z exec-stack

각 옵션이 뭘 뜻하는지는 찾아보삼..

이 설정들을 다 하면 다음과 같은 코드로 테스트 해 볼 수 있삼...

----- rand_stack_test.c
// 다음 코드를 컴파일 한 후 두 번 이상 실행 했을 때 같은 주소가 나온다면
// random-stack 기능이 off 되었다고 할 수 있음
#include <stdio.h>

int main(void)
{
char buf[128];
fprintf(stdout, "buf variable address: 0x%08X\n", buf);
return 0;
}
----- rand_stack_test.c

----- exec_stack_test.c
// 다음 코드를 컴파일 한 후 실행 했을 때 정상적으로 쉘이 실행된다면
// stack-shield 기능이 off 되었다고 할 수 있음
#include <stdio.h>

char sc[] = 
"\x31\xd2\x89\xd0\x52\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89"
"\xe1\xb0\x0b\xcd\x80";

int main(void)
{
void (*f)(void);
f = (void*)sc;
f();
return 0;
}
----- exec_stack_test.c

Posted by k1rha