시스템 해킹 27

[Lazenca] NX bit

Protection Tech01.NX Bit(MX : DEP) NX Bit(MS : DEP)프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 줌. DEP마이크로소프트 윈도우 운영 체제에 포함된 보안 기능악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술 DEP는 두 가지 모드로 실행된다.1. 하드웨어 DEP : 메모리에 명시적으로 실행 코드가 포함되어 있는 경우를 제외하고 프로세스의 모든 메모리 위치에서 실행할 수 없도록 표시대부분의 최신 프로세서는 하드웨어 적용 DEP를 지원..

[LOB] cobolt → goblin

cobolt / hacking exposed로 접속 goblin.c 파일을 보면 저번과 비슷한 문제지만 이번에는 gets함수로 문자열을 받아온다. 버퍼의 크기가 16바이트이기 때문에 이번에도 환경변수를 이용해 문제를 풀어볼 것이다. export로 환경변수를 설정하고 export shellcode=`python -c 'print"\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` getenv함수로 쉘 코드의 주소를 구한다. 쉘코드 주소 : bfffff09 gets함수로 문자열을 받아온다는 걸 간과하고 저번처럼 입력했다가 실행이 안되는 것을 알았다. 이번에..

[LOB] gremlin → cobolt

gremlin / hello bof world로 로그인 $bash2 cobolt.c 파일을 확인했다. buffer를 16 할당받고 인자를 버퍼에 복사해 출력해주는 코드인 것 같다. gremlin 문제와 마찬가지로 strcpy함수때문에 bof 취약점이 발생할 수 있다. 일단 버퍼의 크기가 16바이트이므로 버퍼에 쉘코드는 넣을 수 없다. 환경변수를 이용해 문제를 풀어보자. 환경변수 등록 / 해제 방법 export 환경변수이름 unset 환경변수이름 환경변수 참고 shellcode 환경변수 설정 getenv 함수로 쉘 코드의 주소를 구할 것이다. bfffff07 NOP 16byte + SFP 4byte + RET 4byte 16바이트와 SFP를 NOP로 덮고 RET을 환경변수 주소로 채워줄 것이다. ./cob..

[dream hack] NX bit

Linux Exploitation & Mitigation Part1 NX bit 일반적인 프로그램에서의 스택 메모리는 코드를 실행하는 용도로 사용되는 것이 아니라, 일시적으로 데이터를 읽고 쓰는 데 사용되기 때문에 실행 권한이 있을 필요가 없다. 이러한 이유로 프로그램의 공격을 어렵게 하기 위해 메모리에 쓰기 권한과 실행 권한을 동시에 부여하지 않는 No-eXecute bit가 등장하였다. example2.c 셸코드를 데이터 영역에 저장한 후 main 함수에서 이를 실행. #include unsigned char code[] = \ "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80"; i..

[dream hack] NOP Sled

Linux Exploitation & Mitigation Part 1 3. NOP Sled NOP = "No OPeration" xchg eax, eax와 같이 프로그램의 실행에 영향을 주지 않는 명령어이다. 프로그램이 실행 중에 NOP 명령어를 만나면 다음 명령어로 넘어가는 것 같은 효과를 준다. 주로 명령어의 주소 alignment를 맞출 때 사용된다. x86 아키텍처의 NOP 명령어 바이트 코드 0x90 NOP Sled, 혹은 NOP Slide는 주로 셸코드의 셸코드의 주소를 정확히 알아내기 힘들 경우 큰 메모리를 확보해 셸코드의 주소의 오차 범위를 크게 만들 때 사용한다. 익스플로잇 확률을 올리는 데 큰 도우밍 된다. 더보기 0x100 주소에 셸코드가 저장되어 있다고 가정해보자. NOP Sled가..

[dream hack] Return address overwrite

Linux Exploitation & Mitigation Part 1 2. Return Address Overwrite RET Overwrite 스택 버퍼 오버플로우 취약점을 공격하는 방법 스택 버퍼 오버플로우 취약점이 있을 때는 주로 스택의 리턴 주소를 덮는 공격을 한다. 스택에 저장된 리턴 주소를 다른 값으로 바꾸면 실행 흐름을 조작할 수 있다. *리턴주소 : 함수가 끝나고 돌아갈 이전 함수의 주소 example.c // gcc -o example1 example1.c -fno-stack-protector -z execstack -mpreferred-stack-boundary=2 -m32 #include int vuln(char *src) { char buf[32] = {}; strcpy(buf, s..