스터디 그룹

    ProjectH4C 3개월 1주차 과제(HackCTF - Basic BOF#2)

    포너블... 아직 기초지만 너무 재미있다. 📖 1) 문제 파악 ...? 우선 gdb로 열어보도록 하자. 📖 2) 문제 분석 처음에 nc 접속하게 되었을 때 보았던 부분이 이곳인 것 같다. 함수 자체는 매우 간단하다. v5라는 포인터 변수에 sup 함수의 주소를 넣어준다. 이후 fgets함수를 실행하고 v5를 실행한다. sup함수는 그냥 puts만 진행한다. 한 가지 중요한것은, shell() 이라는 함수가 존재한다는 것이다. (하지만 main 내에서는 등장하지 않는다.) 이 shell 함수는 /bin/dash를 실행하는 함수이다. 즉, 우리는 s에서 BOF를 발생시켜 v5를 shell 함수의 주소로 덮어주어야 한다. 이렇게 스택이 쌓여있다고 보면 되겠다. 📖 3) 문제 분석 128byte를 채우고 she..

    ProjectH4C 3개월 1주차 과제(HackCTF - Basic BOF#1)

    📖 1) 문제 파악 우선, 입력된 값과, 그 값과 관련된 메모리 주소를 출력해주는 것 같다. 아직 잘 모르겠으니 gdb와 IDA를 통해 분석해보자. 코드가 그리 길지는 않다. 그래도 중요한 부분만 따로 보자. 📖 2)문제 분석 0x080484dc :mov DWORD PTR [ebp-0xc],0x4030201 0x080484e3 :mov eax,ds:0x804a040 0x080484e8 :sub esp,0x4 0x080484eb :push eax 0x080484ec :push 0x2d 0x080484ee :lea eax,[ebp-0x34] 0x080484f1 :push eax 0x080484f2 :call 0x8048380 0x080484f7 :add esp,0x10 0x080484fa :sub esp,0..

    ProjectH4C 2개월 4주차 과제 (우리집에 GDB 있는데… 메모리 보고갈래?)

    bpsecblog.wordpress.com/2016/03/08/gdb_memory_1/ - 우리집에 GDB 있는데 ... 메모리 보고갈래? - 사실 이 글, 내가 중학교 3학년 때 봤던 글이다. 물론 제대로 이해하지 못하고 넘어간 내용들도 있을 것이다. 그러니, 다시 한 번 공부하고 넘어가보도록 하자. 📖(1) 먼저 내 노트북 램은 16GB 이다. 1Byte는 컴퓨터에서 주소공간 한 개의 크기다. 그래서 16GB는 2^35Byte이니, 저 만큼의 주소를 가질 수 있다. (엄청 많다 ㄷ ㄷ ㄷ ㄷ ㄷ ㄷ) 하지만 32bit의 cpu를 가지고 있다면 8기가나 16기가에 접근을 할 수 없다. 이 자료를 참고해서, 더 알아보자. 먼저 커널 영역에는 시스템 운영에 필요한 메모리와 운영체제가 올라가 있다. 그래서 ..

    ProjectH4C 2개월 4주차 과제 (코딩도장)

    📖UNIT39 📒문자와 문자열 포인터 include int main() { char c1 = 'a'; char *s1 = "Hello"; printf("%c\n", c1); printf("%s\n", s1); return 0; } 이 코드를 살펴보자. 먼저 c1에는 'a' 라는 값이 직접 들어가진다. 하지만 s1을 보면 포인터 변수로 선언이 되어있고, "Hello"라는 값의 메모리 주소가 들어가게 되는것이다. 그래서 문자열로 사용이 가능한것이다. 배열도 포인터이다. 이런 문자열의 끝에는 null 문자가 들어가있다. 📒문자열 포인터에 인덱스를 통한 값 변경을 ? 문자열 포인터도 인덱싱을 통해 값 변경을 할 수 있을까? 먼저 이런 포인터에서도 특정 인덱스의 값을 출력은 할 수 있다. #include int ..

    ProjectH4C 2개월 4주차 과제 (해커스쿨 ftz)

    해커스쿨 ftz를 해보자. 맥을 이용했기에 VMware Fusion을 사용했다. 📒Trainer1 먼저 ftz에 trainer1로 로그인을 하게 된다면 이렇게 뜬다. 터미널 창에서 순서대로 접속ID/서버/현재위치를 나타낸다. 그다음으로 ls 명령을 치게되면 현재위치에 있는 모든 폴더/파일들이 출력된다. 디렉토리와 파일을 구분해서 출력하고자 하면 ls -l을 치면 된다. 그럼 우리는 이 출력을 보고 디렉토리와 파일을 구분해보자. start.txt 라는 텍스트 파일과 tmp 폴더로 비교해보겠다. start.txt는 -rw-rw---- 로, 가장 왼쪽이 -이다. 하지만 tmp의 경우 drwxr-x--- 처럼 가장 왼쪽이 d이다. 이는, directory임을 의미하는 것이다. 이번엔 설정파일같은 중요한 파일들을..

    ProjectH4C 2개월 3주차 과제 (포인터 5문제)

    문제 풀기에 앞서, 풀 문제들에 대하여 알아보자. 코드업에 포인터를 검색했을 때 나오는 문제이다. 저 문제들을 풀고 더 문제를 찾아보도록 하자. 성공률이 높은 부분 문자열을 먼저 풀어보자. 📒부분문자열 (코드업, 1810) 입력 첫째 줄에 1개의 문자열이 입력된다. 문자열의 최대 길이는 100미만이다. 둘째 줄에 부분문자열의 시작위치 a와 끝위치 b가 정수로 입력된다. (단 0a번째 문자부터 b번째 문자까지를 출력한다. 문제 조건이 있다. 배열을 절대 사용하지 못한다는 것이다. 그러면 우리는 포인터로 풀기로 하자. 먼저 힌트는 배열대신 동적메모리 할당법을 사용하라는 것이다. 매우 이지하다. #include #include int main(){ char *string; int a,b; string = ma..