[lazenca] Protection Tech / NX bit(MS: DEP)
2021. 2. 2. 19:28
Study/System Hacking
NX bit(Never eXecute bit, 실행 방지 비트)란 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU 기술이다. NX 특성으로 지정된 메모리 구역은 데이터 저장을 위해서만 사용된다. DEP(Data Execution Prevention)이란 마이크로소프트 윈도우 운영 체제에 포함된 보안 기능이며, 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술이다. DEP에는 하드웨어 DEP, 소프트웨어 DEP 두 가지 모드가 있다. 하드웨어 DEP는 메모리에 명시적으로 실행 코드가 포함되어 있는 경우를 제외하고 프로세스의 모든 메모리 위치에서 실행할 수 없도록 표시한다. 대부분의 최신 프로세서는 하드웨어 DEP를 지원하고..
[dreamhack] Linux Exploitation & Mitigation Part 1 / NX bit
2021. 2. 2. 17:01
Study/System Hacking
이전 글에서는 스택 메모리에 셀코드를 삽입한 후 실행 흐름을 조작하여 쉘을 획득했다. 하지만 일반적으로 스택 메모리는 코드를 실행시키는 용도로 쓰이지 않고 데이터를 읽고 쓰는데 사용되기 때문에 실행 권한이 있을 필요가 없다. 때문에 메모리를 이용한 공격을 어렵게 하기 위해 NX bit(No-eXecute bit)가 등장했다. NX bit가 설정되었을 경우 쓰기 권한과 실행 권한이 동시에 있는 메모리 영역이 존재하지 않는다. 따라서 전처럼 쉘코드를 스택 영역에 저장해 실행 흐름을 바꾸는 공격방법은 통하지 않는다. 다만 프로그램에 스택 오버플로우 취약점이 있다면 실행권한이 있는 메모리 영역의 코드를 활용해서 익스플로잇 할 수 있다. C언어에서 printf와 같은 라이브러리 함수가 사용될 때 프로그램은 메모리..
[WEB]: XSS game 04
2021. 2. 1. 16:34
Study/Web Hacking
[Mission] [해결방법] 문제 페이지에 기본 value로 주어진 3으로 타이머를 작동시켜보았다. 그 결과 사용자의 입력이 timer라는 파라미터로 전송된다는 것을 알게 됐다. timer.html에서 위 코드를 보면 startTimer 함수에 사용자가 입력한 timer 값을 인자로 사용하는 것 같다. 더 정확하게 하기 위해 입력창에 333을 입력하고, 우클릭 -> 검사로 들어가서 소스코드를 확인해봤다. 사용자의 입력 333이 startTimer 함수의 인자로 사용되는 것을 확인했다. 사용자 입력으로 alert 함수를 주면 해결할 수 있을 것 같다. 3'); alert('XSS을 입력으로 주었더니 문제를 해결할 수 있었다. [결과]
[LOB] cobolt -> goblin
2021. 1. 28. 00:01
Study/System Hacking
오늘은 goblin으로 가는 password를 찾아보겠다. 먼저 지난 번에 알아낸 password로 로그인을 해준다. 그리고 현재 위치에서 파일 목록을 확인했다. goblin.c 파일이 있다. 이 파일 내용을 출력해보도록 하자. 지난 시간에 했던 cobolt.c 파일과 크게 다를 것 없지만 입력을 인자가 아닌 표준 입력을 통해서 받고 있다. gets 함수는 입력의 크기를 따로 지정하지 않기 때문에 버퍼 오버플로우가 발생할 수 있다. 이번에도 역시 BOF를 이용해서 쉘코드를 실행시킬 수 있다. 하지만 buffer의 크기가 16바이트이기 때문에 쉘코드를 넣을 수 없어 보인다. 따라서 환경변수를 이용해서 해결하겠다. nop sled와 쉘코드를 합친 환경변수 SHELLCODE를 만들었다. 그 후 getenv.c..
[LOB] gremlin -> cobolt
2021. 1. 27. 22:20
Study/System Hacking
오늘은 cobolt로 가는 password를 찾아보겠다. ls 명령어로 cobolt.c 파일이 있는 것을 봤고, cobolt.c 파일 내용을 출력해봤다. strcpy 함수가 사용됐고 buffer의 크기는 16바이트다. strcpy 함수 때문에 버퍼 오버플로우가 발생할 수 있다는 것은 이전 레벨과 동일하지만, buffer의 크기가 16바이트이기 때문에 쉘코드를 넣을 수 없다. 대신에 환경변수를 사용해서 해결할 수 있다. 먼저 쉘코드를 값으로 갖는 환경변수를 만들어야 한다. 나는 SHELLCODE 환경변수를 만들었다. 이때 환경변수의 주소가 조금씩 바뀔 수 있는 것을 고려해 쉘코드 앞에 nop sled를 붙였다. 그리고 환경변수의 주소를 얻어야 한다. getenv 함수로 환경변수의 주소를 얻을 수 있다. 나..
[dreamhack] Linux Exploitation1 & Minigation Part 1 / Return Address Overwrite & NOP Sled
2021. 1. 27. 18:00
Study/System Hacking
스택 버퍼 오버플로우 취약점이 있을 때 스택의 리턴 주소를 덮어서 실행 흐름을 조작한다. 리턴 주소는 현재 함수가 종료된 후 이전 함수로 되돌아가기 위한 주소로 스택에 저장된 리턴 주소를 바꾸면 프로그램 실행 흐름을 공격자가 원하는대로 조작할 수 있다. // 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, src); return 0; } int main(int argc, char *argv[], char *environ[]) { if (argc < 2){ exit(-1); }..
[WEB]: XSS game 03
2021. 1. 27. 00:49
Study/Web Hacking
[Mission] [해결방법] script를 살펴보니 html코드가 삽입된 걸 볼 수 있었다. 사용자가 URL의 #뒤에 입력하는 값이 num으로 전달된다는 사실을 알 수 있다. 따라서 num으로 전달되는 값으로 존재하지 않는 이미지의 이름과 onerror 속성을 사용하면 된다. 나는 이미지의 이름을 0으로 설정하고 URL을 작성했다. "0.jpg' onerror='alert()'>" [결과]
[LOB] gate -> gremlin
2021. 1. 24. 17:58
Study/System Hacking
포스팅을 하기 앞서 나는 Xshell을 사용해서 진행했다. gate로 로그인하고 나서 ls 명령어로 파일 목록을 확인했다. cat 명령으로 gremlin.c 파일 내용을 확인했다. 확인결과 256바이트 크기의 buffer가 있고, strcpy 함수를 사용해서 버퍼 오버플로우의 발생 가능성이 있다는 것을 알아냈다. 일단 실습을 진행하기 앞서 gremlin의 소유주는 gremlin이기 때문에 파일을 따로 복사해둬야 한다. 파일 복사를 완료했으면 gdb를 실행시킨다. 그리고 disas 명령으로 main의 어셈블리 코드를 확인한다. 아래 사진을 보면 main+54에 strcpy를 실행시키고, main+62에서 buffer[256]을 %eax에 복사하는 것을 확인할 수 있다. buffer의 주소를 알아내기 위해 ..
[dreamhack] Memory Corruption - C (I) / 스택 버퍼 오버플로우
2021. 1. 24. 16:35
Study/System Hacking
버퍼 오버플로우는 할당된 버퍼의 영역을 넘어서는 데이터를 입력해서 다른 데이터를 오염시키는 것을 말한다. 버퍼 오버플로우가 발상하는 영역에 따라 지칭하는 명이 다른데, 스택에서 일어나는 경우 스택 버퍼 오버플로우라고 하고 힙 영역에서 일어나는 경우 힙 버퍼 오버플로우라고 한다. 보통 버퍼 오버플로우 취약점은 프로그래머가 버퍼의 길이에 대한 가정을 올바르지 않게 하여 발생한다. 길이 제한이 없는 API 함수들을 사용하거나 버퍼의 크기보다 입력받는 데이터의 길이가 더 크게 될 때 자주 일어나는 실수다. 아래는 버퍼 오버플로우를 발생시키기 위한 실습이다. - Ex1 // stack-1.c #include #include int main(void) { char buf[16]; gets(buf); printf("..