분류 전체보기(333)
-
FTZ level11포맷 스트링 버그를 이용한 풀이
FTZ 11번문제는 버퍼오버플로우공격을 시도해도 공격이 이루어지지만, 포맷스트링 버그를 사용해서 문제를 풀어보겠습니다.포맷스트링 버그에 관한 자세한 설명은 다음 링크에 있습니다. http://itsaessak.tistory.com/115매우 쉽게 설명해놓았습니다. 읽어보고 해당 문제를 푸시면 많은 도움이 될겁니다 [ 그림1 ] printf()함수의 완벽한 형태가 아니죠 ? 포맷 스트링 버그 취약점이 생깁니다 [ 그림2 ] 취약점을 가진 해당 프로그램의 인자로 " %8x " 스트링을 넣어서 메모리 구조를 살펴볼 수 있습니다 4번째 " %8x "스트링에서 처음입력한 AAAA 문자열이 존재하고 있음이 보입니다이 부분이 우리가 문자를 입력할 수 있는 지점입니다. 해당 지점에 우리가 원하는 주소를 입력시킵시다우리..
2017.05.23 -
FTZ level10 공유메모리
level10 문제는 공유메모리에 관한 문제입니다. 공유메모리와 관련된 개념부터 알아보겠습니다 공유메모리란 여러 프로세스들이 특정한 메모리 공간을 공유해서 데이터를 주고받을 수 있도록 하는 메모리 공간입니다 공유메모리를 사용하는 소스코드를 살펴보도록 합시다 [1] shmget함수 shmget( key_t key , int size , int shmflg ) key_t key 공유 메모리들을 구별할 수 있게하는 식별 번호 int size 공유 메모리의 크기 int shmflg 동작 옵션 => IPC_CREAT key에 해당하는 공유메모리가 없다면 새롭게 생성해라, 있다면 접근권한을 지정해주어야한다 => IPC_EXCL 공유메모리가 이미 있다면 실패로 반환하고 공유메모리에 접근 불가능 ex) int main..
2017.05.23 -
FTZ level9 Buffer OverFlow
level9는 버퍼오버플로우에 관한 문제입니다 하나의 프로그램을 실행하면 해당 프로그램에서 사용하는 환경변수, 지역변수, 함수 들이 메모리에 쌓인다 그 메모리 구조를 스택(Stack)이라고 하고 스택은 특이한 특징을 가지고 있다 버퍼오버플로우는 데이터를 넘치게 함으로써 원하는 메모리 공간에 자신이 원하는 값을 위치시키게 하는 기법입니다 함수의 리턴주소(RET)를 침범하는 경우가 대표적입니다 해당 문제에서는 RET를 공격하지 않고 특정한 변수공간을 침범해서 데이터를 입력시키는 과정입니다 문제를 보면서 이해를 돕도록 하겠습니다 " /usr/bin/bof " 의 소스를 해석해보자면 [1] char형 변수 buf 와 buf2 가 선언되었습니다 [2] fgets( buf , 40 , stdin..
2017.05.23 -
FTZ level8 리눅스 패스워드 파일 크랙
바로 level8 문제풀이 들어가겠습니다 힌트파일을 열어봅시다 용량 2700 이라는 조건을 이용한 find 명령어로 공격할 파일을 찾아내야합니다 [ find명령어의 size옵션 ] -size 1b 512바이트 단위의 블록 사이즈 검색 -size 10c 10바이트 사이즈 검색 -size 10k 10K바이트 사이즈 검색 -size 10w 10워드 사이즈 검색 2700byte 크기의 파일을 검색해서 /etc/rc.d/found.txt파일을 찾았다 ! 해당파일을 열어보니 /etc/passwd 와 같은 형식의 내용이 들어있었다 아마도 level9의 비밀번호에 관련된 내용같다 이제 여기서 새로운 파일을 하나 다운 받아야합니다 유닉스 계열의 대표적인 패스워드 크랙툴인 존 더 리..
2017.05.23 -
FTZ level7 암호화
아주아주 간단한 문제입니다 비밀번호를 입력했더니 나온 이상한 문자가 보이시나요 ? " --_--_- --____- ---_-__ --__-_- " 힌트에서 2진수를 10진수로 바꿀 수 있는지 물어보았습니다 이 이상한 문자들은 2진수일까요 ? " 1101101 1100001 1110100 1100101 " 로 볼 수 있습니다 ! 친절하게 띄어쓰기가 되어있어서 구분하기가 쉽습니다 아스키 테이블을 보고 해당 2진수를 바꿔보도록 합시다 mate ... 정답입니다 level8의 패스워드가 나왔습니다 문제는 쉽게 풀었고 해당 파일을 gdb로 분석해봅시다 !! [1] : call 0x8048344 malloc(0x64) 100byte의 메..
2017.05.23 -
FTZ level6 시스템 인터럽트 ( System Interupt )
level6문제 풀이에 앞서 알아야할 개념부터 설명하겠습니다 [1] 시스템은 신호와 메시지로 정보를 교환합니다 메시지는 Protocol정보규약에 따라서 정의되어 사용되고 리눅스에서 신호는 미리 약속되어있는 signal을 제공합니다 #kill -l signal 명령어를 통해서 신호의 이름과 고유번호를 알 수 있습니다 ㅡ 그림 6.1 #kill -[Signal] [PID] 해당 PID에 해당하는 프로세스에게 신호를 전달합니다 ex) #kill -SGIKILL 100 or #kill -9 100 -> PID가 100번인 프로세스를 종료시키는 신호를 보냄으로써 종료시킨다 각 신호들은 번호가 있고 신호의 이름대신 번호를 사용해서 신호를 보낼 수 있다 [2] 추가로 키보드의 입력을 통해서 시그널..
2017.05.23