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
'System_Hacking' 카테고리의 다른 글
레지스터 이해와 어셈블리 더블 포인터의 이해 (0) | 2012.03.21 |
---|---|
gdb 사용법 우분투에서 연습하기. (0) | 2012.03.21 |
%2f 가 없는 쉘코드 (shellcode without %2f code) (0) | 2012.03.21 |
기본적인 쉘을 얻는 쉘코드를 얻기위한 어셈블리 코딩 (0) | 2012.03.21 |
리눅스 커널 심층 분석 내가 요약한 판.. (0) | 2012.03.21 |