memory
-
[Linux Memory Protection] - DEPSystem hacking training/Knowledge 2019. 5. 14. 12:38
복습겸 리눅스 환경의 메모리 보호 기법에 대해 알아봅시다. Ref : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ linux 환경에서의 메모리 보호기법을 알아보자(1) 지금부터 Linux 환경에서의 메모리 보호 기법에 대해 알아봅시다! 이번 편에서는 ASLR, NX, ASCII-Armor, Stack canary에 대해 알아보겠습니다. 위키를 통해 “메모리 보호”라는 말의 정의를 알아보고 넘어갑시다. 실습 환경: CentOS 6.7 (32bit) ASLR : Address Space Layout Randomizati… bpsecblog.wordpress.com 이 글을 토대로 공부한 내용을 포스팅하겠습니다. ASLR DEP(NX)
-
[Linux Memory Protection] - ASLRSystem hacking training/Knowledge 2019. 5. 14. 11:48
복습겸 리눅스 환경의 메모리 보호 기법에 대해 알아봅시다. Ref : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ linux 환경에서의 메모리 보호기법을 알아보자(1) 지금부터 Linux 환경에서의 메모리 보호 기법에 대해 알아봅시다! 이번 편에서는 ASLR, NX, ASCII-Armor, Stack canary에 대해 알아보겠습니다. 위키를 통해 “메모리 보호”라는 말의 정의를 알아보고 넘어갑시다. 실습 환경: CentOS 6.7 (32bit) ASLR : Address Space Layout Randomizati… bpsecblog.wordpress.com 이 글을 토대로 공부한 내용을 포스팅하겠습니다. ASLR /proc/s..
-
ELF Memory Protection - RELROSystem hacking training/Knowledge 2018. 3. 7. 15:52
codegate 2013 문제를 풀이하려고 보호기법을 확인해 보니 partial RELRO가 걸려있었다. 이 보호기법에 대해 공부를 해본적이 없어서 정리를 해본다. 먼저 RELRO를 이해하기 위해 배경지식이 필요한데 Lazy Binding 이라는 개념에 대해 정리를 하겠다. Lazy Binding 이란?-> 모든 외부 함수의 주소를 한 번에 로딩하지 않고, 함수 호출 시점에 해당 함수의 주소만 공유 라이브러리로부터 알아오는 것을 의미한다. Dynamic Linking 방식으로 컴파일된 ELF 바이너리는 공유 라이브러리 내에 위치한 함수의 주소를 동적으로 알아오기 위해 GOT(Global Offset Table)를 이용한다. Dynamic Link 방식은 공유 라이브러리를 하나의 메모리 공간에 매핑하고 여..
-
Stack2 풀이System hacking training/Protostar 2018. 2. 4. 15:49
[문제] 문제를 보면 variable에 getenv()를 이용하여 환경변수의 값을 넣어주는것을 볼 수 있다. 그리고 취약점은 역시 strcpy() ! 문자열의 길이를 검사하지 않기 때문에 bof 취약점이 존재한다. 풀이를 위해 buffer[64] 와 modified 사이의 offset을 구해야한다. 이는 gcc 컴파일 과정에서 들어가는 쓰레기값 즉, dummy 값이 존재하는지 확인을 하기 위함이다. [풀이] 먼저 gdb로 열어본다. dummy 값만 체크를 해보자. 아 여기서 dummy 값은 문제 풀이를 위해 modified 와 buffer[64] 사이만 확인을 했다. 결과는 이전 문제와 동일하게 없었다. 따라서 이 프로그램의 스택 구조를 확인해보면 이러하다. | char *variable(esp) | d..
-
Stack1 풀이System hacking training/Protostar 2018. 2. 3. 21:00
[문제] [풀이] 역시 stack0와 같이 modified 의 값을 변경해야 하는 문제인데 다른점은 if 문 참 조건이 modified 의 값이 0x61626364 이다. 또 다른점은 이 문제의 취약점은 strcpy()에 의해 bof가 발생한다는 점이다. strcpy()는 문자열의 길이를 검사하지 않는다. 정확한 계산을 위해 gdb로 열어본다. 소스 코드가 주어졌기 때문에 분석은 어렵지가 않다. 역시 esp+0x5c 가 modified esp+0x1c 가 buffer 시작 위치다. [Stack] [low address] | char buffer[64] | int modified | SFP | RET | [high address] 이전 문제와 동일하다. 따라서 페이로드를 (python -c 'print "..
-
Stack0 풀이System hacking training/Protostar 2018. 2. 3. 20:24
[문제] [풀이] main()안의 변수를 보면 int형 변수 modified와 char 64크기의 배열 buffer가 존재한다. modified의 값을 바꿀 수 있는가를 시험하는 문제인것같다. 여기서 bof 취약점을 발견할 수 있었는데 gets()는 경계를 검사하지 않는 함수가 쓰였기 때문에 bof 공격이 가능하다. bof 취약점을 이용하여 modified의 값을 바꿔주면 된다. [Stack] [low address] | char buffer[64] | int modified | SFP | RET | [high address] buffer와 modified 중간에 더미값이 없는 쉬운 문제다.(5c(hex) - lc(hex) == 64(dec)) esp+5c 에 0을 넣는것으로 modified의 위치를 알..