분류 전체보기
-
[F.T.Z] Level 13Wargame/F.T.Z 2022. 9. 26. 17:42
Level 13을 풀어보자. Level 13은 앞의 문제들과 비슷한데, 한 가지 방어 개념이 추가되었다. 책에서 설명으로만 보던 것이라 신기한 느낌이다. (유니콘..??) 우선 Level 13의 hint를 살펴보자. 이번에도 strcpy를 사용하고 있으니 공격이 가능할 것 같다. 그런데 long 타입의 i라는 변수가 선언되어있다. (이것이 방어를 위한 장치이다.) 다른 명령어들은 앞의 Level 들에서 충분히 해석을 한 것 같고, 마지막의 kill에 대해서만 알아보자. 구글링을 해보니 Kill 시그널을 보내는 명령어이다. 간단하게 허가되지 않은 메모리 영역으로의 접근을 종료한다고 생각하자. gdb를 이용해 attackme 파일을 분석을 해보자. 를 보면 ebp와 buf 사이에는 1048 바이트의 크기만큼..
-
[정보보안기사] I/O 인터페이스Certificate/정보보안기사 2022. 9. 26. 11:02
1. 프로그램에 의한 I/O - 메모리에 기록된 I/O 명령에 의해 수행 - I/O을 수행할 때 모든 작업을 CPU가 하기 때문에 CPU는 I/O 동안 다른 작업을 못함 2. 인터럽트에 의한 I/O - CPU가 I/O 인터럽트 요청을 감지하면 수행 중이던 작업을 중단하고 데이터 전송 수행 - 프로그램에 의한 I/O보다는 CPU의 관여가 적지만, 그래도 CPU가 I/O을 대기해야 함 3. DMA(Direct Memory Access)에 의한 I/O - DMA 제어기를 이용해 주기억장치와 입출력장치를 직접 연결해 CPU의 간섭 최소화 - Cycle Stealing : DMA 제어기와 CPU가 Bus를 공유 - Burst Mode : DMA 제어기가 Bus 를 점유 4. 입출력 채널에 의한 I/O - I/O를..
-
[정보보안기사] 메모리 시스템(Memory System)Certificate/정보보안기사 2022. 9. 26. 10:53
1. 메모리 계층구조 정의 - 메모리를 필요에 따라 계층으로 나누어 평균 액세스 속도는 높이고, 가격 대비 성능비도 유지하기 위한 아키텍처 2. 메모리 계층구조 - 레지스터 - 캐시 메모리 - 주기억장치 - 보조기억장치 3. 캐시 메모리(Cache Memory) - 데이터나 값을 미리 복사해 놓는 임시 저장소로, CPU와 주기억장치 사이의 속도 차이를 완화해주는 메모리 - 직접사상(Direct Mapping) : 메인 메모리를 여러 구역으로 분할하여 Cache 슬롯과 매핑 - 연관사상(Associate Mapping) : 메인 메모리의 각 블록이 Cache의 어느 슬롯이든 적재 - 집합 연관사상(Set Associate Mapping) : 캐시와 메모리가 N 대 1로 대응 4. 캐시 메모리 교체 알고리즘..
-
[Python] enumerate - 인덱스 표현Programming/Python 2022. 9. 26. 09:38
enumerate 함수에 대해 알아보자. enumerate는 단어의 뜻에 따르면 '열거하다'라는 의미를 가지고 있다. 아래의 예시들을 보면 무슨 의민지 알 수 있지만, 간단하게 값들에 대한 인덱스를 열거한다고 생각하자. for문에서의 활용이 대표적이므로 예시를 통해 확인해보도록 하자. 1. range rainbow라는 리스트를 만들고 각 색깔들을 값으로 입력한다. for 문의 range와 len으로 범위를 정하고 순서대로 값들을 출력해보자. 그런데, 이런 방식은 파이썬스럽지 않다고 한다. (??) 무슨 말인지는 모르겠지만 조금 더 파이썬스럽게 할 수 있는 방법이 enumerate를 이용하는 것이다. 2. enumerate 기본 사용 for 문에서 range를 사용할 때는 반복적인 변수가 하나만 있었다. ..
-
[F.T.Z] Level 12Wargame/F.T.Z 2022. 9. 25. 14:05
Level 12를 풀어보자. Level 11과 굉장히 유사하지만, 마지막에 차이가 있고 이에 대한 개념이 필요하다. Level 12의 hint를 살펴보자. 이번에도 attackme라는 실행 파일의 소스 코드인 듯하다. 간략히 분석을 해보자면, str에 char형으로 256의 크기를 가진 배열을 선언한다. 그 후 setreuid로 Level 13의 권한을 획득하고, 문장을 출력한다. 이번에는 strcpy가 아닌, gets 명령어로 str에 문자열을 입력받는다. 마지막으로 str의 내용을 출력하며 프로그램이 종료된다. 프로그램을 실행해보면 문장을 입력받고, 그 문장을 출력한 후 종료되는 것을 알 수 있다. attackme 파일을 분석해보자. Level 11과 마찬가지로 gets 함수 윗부분을 살펴보면 eax..
-
[F.T.Z] Level 11Wargame/F.T.Z 2022. 9. 25. 11:06
Level 11을 풀어보자. Level 9부터 overflow 문제가 나오는 줄 알았지만, 그건 맛보기에 불과했다.. 이제부터 진짜 시작인 것 같다. Level 11에 접속해 hint를 살펴보려는데 attackme라는 실행 파일도 함께 있다. 그래도 역시 hint부터 보도록 하자. 아무래도 hint의 내용은 attackme의 소스 코드인 듯하다. 간단하게 분석해보자면, str에 256의 크기를 가진 char형 배열을 선언한다. 그 후 setreuid로 Level 12의 권한을 가질 수 있도록 하고, strcpy로 argv[1]의 내용을 str에 복사 후 출력한다. 여기서 strcpy 함수로 인해 overflow 공격이 가능할 것이라고 생각할 수 있다. 소스 코드의 내용을 간략하게 알 수 있었으니 atta..
-
[F.T.Z] Level 10Wargame/F.T.Z 2022. 9. 24. 10:40
Level 10을 풀어보자. Level 10을 풀기 위해서는 새로운 개념인 공유 메모리에 대한 것을 알아야 한다. 또, 간단하다면 간단한 코드를 작성해야 하는데 아직까지는 코드를 만들어 문제를 푼다는 것이 많이 어렵다. 다른 문제들처럼 Level 10에 접속을 하고, hint 파일을 살펴보자. 두 명의 사용자가 공유 메모리를 이용한 대화방을 만들어 대화를 나누고 있다고 한다. key_t 라는 값이 나와 있는데, 무슨 말인지 모르겠다. 열심히 구글링을 해보도록 하자. 우선적으로 해야 할 것은 공유 메모리에 대한 개념을 아는 것이다. 쉽게 설명하자면, 공유 메모리는 '여러 프로세서들이 공유하여 사용할 수 있는 메모리'라는 것이다. 이게 왜 필요할까를 생각해보면, 각 프로그램들은 실행되면서 메모리를 사용하는데..
-
[F.T.Z] Level 9Wargame/F.T.Z 2022. 9. 21. 22:31
Level 9를 풀어보자. Level 9에 접속해 hint를 읽어보면 /usr/bin/bof 파일의 내용이 나타난다. 이름을 보니 이제부터 오버플로 문제가 나타나는 듯하다. 소스코드만 살펴보아도 문제 해결이 가능하다고 생각한다. 우선 buf2와 buf에 10의 공간이 할당된 배열을 char 형식으로 선언한다. 다음으로 "It can be overflow : "라는 문구가 출력된다. 그 후 fgets 함수를 통해 문자열을 입력받는데, 그 문자열은 크기가 40이고 표준입력에서 입력을 받는다. 끝으로 buf2의 문자열과 "go"라는 문자열을 2의 길이만큼 비교하여 같으면 Good Skill 출력, setreuid를 설정하며, /bin/bash 명령어를 실행해 bash 쉘을 실행한다. 그래서 프로그램을 실행한 ..