-
ELF Memory Protection - ASLRSystem hacking training/Knowledge 2018. 2. 6. 08:06
참고 : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ 오늘은 리눅스에서 메모리 보호기법에 대해 정리를 해보겠습니다. 먼저 메모리 보호란?-> 컴퓨터 메모리의 사용을 제어하는 방법이다.모든 운영체제에서 중요한 쟁점중 하나이다.운영체제에서 실행하고 있는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이메모리 보호의 주된 목적이다. 메모리 보호기법에도 여러 종류가 있는데, ASLR, NX, ASCII-Armor, Stack canary 등이 있습니다. 먼저 ASLR에 대해 정리하겠습니다. [ASLR] : Address Space Layout Randomization ASLR이란 위의 약자이고, 직역하면 주소 공..
-
Stack4 풀이System hacking training/Protostar 2018. 2. 4. 20:59
[문제] 이전문제와는 다르게 함수 포인터가 없다. 하지만 여전히 gets() 사용으로 인해 bof 취약점이 존재한다. ret 을 win()의 주소로 변조시키면 win()가 실행될것이다. [풀이] gdb로 열어보면 main()에서 80바이트의 공간을 할당한 것을 알 수 있다. 따라서 SFP와 buffer[64] 사이의 dummy가 들어가는지 체크할 필요가 있다. 예상한 스택 구조는 이러하다. | char buffer[64] | dummy | SFP | RET | 따라서 buffer와 dummy, sfp를 A로 모두 덮고 마지막에 win()의 주소를 넣어줬다.
-
Stack3 풀이System hacking training/Protostar 2018. 2. 4. 16:13
[문제] win()를 실행시키면 된다. 이 프로그램 역시 gets()의 사용으로 bof 취약점이 존재하고 이 취약점을 이용하여 함수 포인터 fp에 win()의 주소를 넣어주면 된다. [풀이] dummy값 확인을 위해 gdb로 열어본다. win()의 주소도 함께 알아보았다. 이 프로그램 역시 페이로드에 참고해야할 dummy값이 없다. 즉, 함수 포인터 fp와 char buffer[64]가 붙어있다는 뜻이다. 따라서 gets()의 bof 취약점을 이용하여 64 바이트 A를 넣어주고, 위에서 구한 win()의 주소를 구하면 성공한다. 주소가 정확히 win()의 주소로 변경이 되었음을 확인할 수 있다.
-
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의 위치를 알..
-
Memory 구조System hacking training/Knowledge 2018. 2. 3. 18:39
프로그램이 실행되기 위해서는 프로그램이 메모리 상에 로드 되어 메모리 안에 있어야한다. 운영체제는 프로그램 실행을 위해서 다양한 메모리 공간을 제공한다. 프로그램은 크게 instruction(명령)과 data로 구분되고, 5가지로 세분화 하면 Code/Data/BSS/Heap/Stack 영역으로 이루어져있다. Stack Heap BSS Data Code(text) 1. Code(text) 영역 : 실행할 코드가 저장되는 영역 / HEX 파일 or BIN파일 메모리 2. Data 영역 : 프로그램의 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역 / 프로그램의 시작과 함께 할당, 프로그램 종료시 소멸 3. BSS 영역 : 초기화가 되지 않은 데이터가 저장됨 (Data역역은 초기화된 데이터가 저장..
-
NEWSECU CTFfkillrra ?/CTF 2018. 1. 28. 12:43
NEWSECU-Security Research Group에서 주최한 CTF에 참가해보았습니다. Get Ready for the NEWSECU Winter CTF 2018!!2018년 겨울 NEWSECU CTF 홈페이지를 오픈합니다. 일정과 홈페이지 주소, 문의사항 접수는 아래와 같습니다.사전 가입 일정 > 지금부터 2018년 1월 27일 오후 2시까지 일정 > 2018년 1월 27일 오후 6시 ~ 1월 28일 오후 12시 (18시간) 홈페이지 > https://ctf.newsecu.kr 문의사항 접수 > hyunvis@newsecu.kr or FB 메시지 CTF 홈페이지는 크롬 브라우저에 최적화되어 있습니다상위 입상자에 대한 상품은 아래와 같습니다 :1위 > 25만원 상당의 리플 2위 > 10만원 상당의..