메모리

    [해커스쿨] FTZ level16 풀이과정

    [해커스쿨] FTZ level16 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level15 풀이과정 힌트 볼깝숑~ㅋㅋㅋㅋㅋshell()함수가 정의되고, printit()함수가 정의되고, main함수에서 printit()함수가 불러지는 것을 확인 할 수 있다.딱 보니 감이 오지 않는가? shell()함수는 정의해놓고 안불러오는것을 보니, printit()함수를 불러오는 버퍼에 shell()함수의 주소를 대체해서 넣으면, printit()함수가 아닌 shell()함수를 불러오게 되면서 해결될 것 같지 않은가? 음하하하하하하하하하하하하하하~ㅋㅋㅋ; [ebp-16]에 "0x8048419"주소를 넣는다. 그리고 부분에보면 [ebp-16]의 값을 eax에 넣고, eax의 값으로 call을 한다. 이부분이 분명 prin..

    [해커스쿨] FTZ level15 풀이과정

    [해커스쿨] FTZ level15 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level14 풀이과정 level14(http://eunice513.tistory.com/59)랑 매우 흡시하지만.. 이번엔 check라는 변수가 포인터이다. 이것만 다르고 다 똑같다.gdb로 파헤쳐보자~ 0x38(56byte)만큼 공간 할당하고... 사용자로 부터 입력받은 값을 [ebp-56]에 저장하고..[ebp-16]의 주소를 eax에 넣어서 , eax에 있는 주소의 접근한 값이 "0xdeadbeef"인지 확인.. 맞으면 setreuid를 실행...일단, 사용자로부터 입력받은 값은 [ebp-56]이고, "0xdeadbeef"의 주소가 들어있는 값은 [ebp-16]이니까, 40byte만큼 떨어져있다는것을 확인 할 수 있다.에 B..

    [해커스쿨] FTZ level14 풀이과정

    [해커스쿨] FTZ level14 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level13 풀이과정 보자보자!! 힌트를 보자!!!int 변수를 2개 선언하고, 20byte 배열 하나 선언하고 ... 그런데 45byte만큼 buf로 fgets 하네...check라는 변수에 0xdeadbeef가 들어있나 확인하네.. 정확하게 gdb로 파헤쳐보자. 보아하니.. 0x38(56byte)만큼 공간 할당하고, [ebp-56]에 fgets로 받은 문자열을 저장하고, [ebp-16]에 0xdeadbeef가 있구먼... fgets함수 바로 다음인 에 BP걸고 대충 아무 값인 "AAAAAAAA"을 넣고 실행해보니..일단 입력 받은 문자열이 들어가는 주소는 "0xbffff210"이네... 그런데 "0xdeadbeef"값이 안보인..

    [해커스쿨] FTZ level13 풀이과정

    [해커스쿨] FTZ level13 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level12 풀이과정 소스코드를 보니 long형 변수 i가 존재하고, i의 값이 0x1234567이 아니면 경고 메시지가 출력하는걸 볼 수 있다. 즉, i라는 변수의 값을 체크해서 오버플로우됬는지 판단하는 보안코드라고 볼 수 있겠다.하지만, 이는 너무 단순한 보안코드이다. 그러면 i형 변수가 가리키는 버퍼에 0x1234567을 넣으면 되지 않을까? 공격하자! gdb로 분석해보면, 일단 0x418(1048)만큼 공간을 확보하고, 0x1234567을 [ebp-12]에 저장한다.그리고 strcpy로 argv[1]인자를 복사하고나서 부분에 ebp-12의 값이 0x1234567의 값으로 잘 저장되어 있는지 체크한다.그럼 우리는 앞서 했던 ..

    [해커스쿨] FTZ level11 풀이과정

    [해커스쿨] FTZ level11 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level10 풀이과정 힌트!!! 보자고~ attackme 라는 파일이 보이고, 힌트에는 어떤 소스코드가 들어있다. attackme 를 실행시켜 보니. 역시 소스코드데로 실행된다. 즉, 힌트가 attackme의 소스코드 인것이다. 그러면 이 문제는 어떻게 풀어야 될까... 소스 코드를 보니 단순히 256byte의 str배열을 선언하고 setreuid를 실행하고 argv[1]의 인자값을 str에 복사하고 str를 출력하는게 끝이다. 그런데.. strcpy를 사용하는 것을 보니 이또한 버퍼 오버플로우에 취약하다. level9 풀이(http://eunice513.tistory.com/54)를 보면 Buffer Overflow에 대한 설명..

    [해커스쿨] FTZ level10 풀이과정

    [해커스쿨] FTZ level10 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level9 풀이과정 힌트를 보자...(맨날 똑같은 시작문구 ㅋㅋㅋ) 공유메모리... key_t의 값이 7530... 뭔지 모르겠지만, 일단 공유 메모리에 대해서 검색해보자. 공유 메모리에 대하여 : http://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory 위의 그림과 링크를 참조해보면, 2가지 이상의 프로세스들이 공유하는 메모리공간을 말한다. 그리고 공유메모리에 접근을 하기 위해서는 고유의 공유메모리 key 를 통해서 접근가능해지며, 이 key값을 통해서 다른 여러개의 공유메모리들과 구분되어 질수 있다.또, ipcs 명령어로 공유메모리 정보를 알 수 있으며, int shm..

    리버싱, 레지스터(Register)

    리버싱, 레지스터(Register)

    레지스터(Register) 범용 레지스터 CPU는 연산, 처리도 하지만, 레지스터라는 곳에 저장도 한다. 범용 레지스터란, 이름처럼 범용적으로 사용되는 레지스터들을 의미한다.즉, CPU가 필요할 때 쓰는 레지스터라고 생각하면 된다.보통은 상수/주소값 등을 저장할 때 주로 사용되며, 특정 어셈블러 명령어에서는특정 레지스터를 조작하여 값을 저장 및 사용하기도 한다. EAX, EBX, ECX, EDX 주로 산술 연산(ADD, SUB, XOR, OR 등...) 명령어에서 상수/변수 값의 저장 용도로 사용 된다.추가적으로 ECX와 EAX는 특수한 용도로 사용되기도 한다. EBP, ESP, ESI, EDI 주로 메모리 주소를 저장하는 포인터 용도로 사용된다.ESP는 Stack 메모리 주소를 가리킨다. (PUSH, ..

    포렌식, 저장 장치에 대하여(Storage Device)

    포렌식, 저장 장치에 대하여(Storage Device)

    포렌식, 저장 장치에 대해서(Storage Device) ​포렌식 관점에서 저장 장치에 대한 지식은 매우 중요합니다.사건현장에서 수집된 디지털 데이터가 담겨있는 장치이기도 합니다. 저장 장치에 따라 특징을 알아야하며, 원리도 어느정도 알고있어야 합니다. ​저장 장치 (Storage Device) ​컴퓨터가 처리하는 데이터들과 프로그램들을 반영구적으로 담고 있는 장치를 의미한다.컴퓨터의 기억 장치 중에서 가장 큰 기억 용량을 가지고 있다. ​저장 장치 분류 ​1. 자기방식자기적인 특성을 이용하여 데이터를 저장하는 방식종류 : 자기테이프, 자기드럼, 플로피디스크, 하드디스크, Zip드라이브, DAT 등등... 자기테이프 : 플라스틱 테이프에 금속의 자성체를 입혀서 데이터를 기록, 순차적인 접근만 가능, 단위..