본문 바로가기

system hacking

7. Use After Free (uaf, uaf.c 바이너리, 코드 요청하셔서 올려드립니다.) 8번째 강의는 Use After Free입니다. 말 그대로 사용한 후 해제했을 때 취약점이 일어날 수 있습니다. 정확히는 heap space에서 alloc된 공간을 free하고 reuse할 때에 일어날 수 있는 취약점입니다. 이 use after free는 browser exploit을 할 때에 자주 쓰이는 기법인데 heap spray와 병행해서 사용합니다. 여튼, use after free에 대해 간단한 원리정도? 설명하도록 하겠습니다. 1. Heap? use and free 스택과 힙은 이런 특성을 가지고 있습니다. 스택은 정적으로 할당되기 때문에 컴파일 시 미리 스택에 공간이 할당되어 있습니다. 그렇기 때문에 스택에 생성될 배열 사이즈.. 더보기
6. Return Oriented Programming (ROP) 6. python programming 관련 동영상입니다. 설명은 생략하도록 할게요. 필요하신 분은 참고하세요! python 바이너리 사용법은 ./python [port] 입니다. 7. ROP 6은 건너뛰고 왜 7이냐면, 중간에 python basic programming 이 있었지만 설명할 게 별로 없으므로 넘어가기로 했습니다. 이번 7번째 강의시간은 Return Oriented Programming을 배워보도록 합니다. 이 기법은 리얼월드에서도 자주 쓰이는 기법으로 , 아직까지 ROP를 막는 방법이 연구되지 않았습니다. ROP(Return Oriented Programming)는 현재 수행중인 프로그램 코드 안에 존재하는 서브루틴이 리턴 명령어에 닿기 전에 선별된 기계 명령어 또는 기계 명령어 덩어리.. 더보기
5. Format String Attack (FSB) Shayete 입니다. 5번째 강의는 포맷스트링 버그에 대해 알아보도록 하겠습니다. 포맷스트링버그는 개발자가 printf()함수 구현 시, 해킹 공격을 고려하지 않고 개발하여 생긴 보안 취약점입니다. printf()를 "printf(buf)" 와 같은 형태로 사용했을 때 출력할 buf의 값이 포맷스트링이라면 buf 값을 문자로 취급하는게 아닌, 서식문자로 취급하여 취약점이 일어날 수 있습니다. 위의 그림에서 보이듯이 fgets() 로 buf에 서식문자를 집어넣고 그걸 printf() 로 출력했을 때 출력될 buf 배열에 서식문자가 있을 경우, buf배열을 가리키는 주소의 다음 4바이트 위치를 참조하여 그 서식문자의 기능대로 출력합니다. 이게 무슨말일까요. printf나 scanf에 쓰이는 서식문자는 위와.. 더보기
4. Return to Library (RTL) Shayete입니다. 4번째 시간에는 최신환경의 우분투에서 Return to library 기법을 학습하겠습니다. Return to Libc 기법은 말 그대로, 라이브러리의 함수로 리턴해서 그 함수를 실행할 수 있습니다. 가령, 우리들이 임의로 짠 바이너리에 system() 함수가 없어도 라이브러리의 system()을 호출해서 그 바이너리에서 쓸 수 있지요. 이 기법을 알기 전에 리눅스의 plt, got가 어떤건지 이해하시면 좋습니다. 1. PLT & GOT plt는 procedure linkage table이라고, 외부라이브러리에서 함수를 가져다 쓸 때에 이 프로시져 테이블에서 함수의 실제주소( got ) 를 참조합니다. plt는 어떤 프로시져들(함수들)이 있는지 나열되어있는 테이블이라고 생각하시면 편.. 더보기
3. 핸드레이 & 기본 어셈블리 명령어 Shayete입니다. 3번째 강의는 어셈블리 핸드레이에 대해 포스팅하도록 하겠습니다. 어셈블리 핸드레이는 어셈블리어를 C언어로 복원시키는 걸 의미합니다. C에서 어셈블리어로도 복원시킬 수 있다면 베리 나이스구요. C에서 어셈으로 복원하는 건 우선 바이너리를 많이 뜯어보고 어셈이 눈에 익은 다음에 시도하도록 합니다. 핸드레이를 하려면 기본적인 어셈블리어 명령어를 알아야 합니다. 1. Basic Assembly Instruction # cmp a ,b 부분의 assembly가 at&t형식일 때에 위처럼 zf, cf가 셋팅됩니다. intel 형식일 때는 반대로 봐주세요. 혹시 flag 확인이 헷갈리시다면 info reg 에서 eflags 부분을 계산기에 넣고 이진수로 바꾸신 다음 cf 와 zf 부분이 맞게 세.. 더보기
2. Stack Corruption & gdb 명령어 Shayete입니다. 오늘은 기본적인 Stack Corruption 및 gdb명령어 사용법에 대해 배워보도록 하겠습니다. Stack Corruption은 Buffer Overflow의 현대적 용어로 의미는 같습니다. Buffer Overflow가 스택에 할당된 버퍼의 메모리를 흘러넘치게 해서 메모리를 오염시키는 것처럼 Stack Corruption의 의미는 메모리 오염입니다. 오늘 공부할 Stack Corruption을 이해하려면 기본적인 메모리, 레지스터, 스택 지식이 필요한데, 가령 메모리 구조는 이렇게 생겼습니다. 유저가 침입할 수 없는 Kernel 공간, 유저영역의 스택, 라이브러리, 힙, 초기화된 & 되지않은 전역변수 데이터, 코드영역 등 메모리는 크게 커널과 그 외로 나뉩니다. 메모리는 필요에.. 더보기
1. 시스템 해킹이란? (linux 기초명령어 & vim 명령어 사용법) 안녕하세요. Shayete입니다. 시스템해킹 공부를 하고 싶은데 어떻게 시작해야할지, 어느 책을 보고 공부해야할지 잘 모르시는 분들을 위해 포스팅을 시작했습니다. 시스템해킹은 리버싱과 다르게 특별하게 정리가 잘 된 서적(예를 들어 리버싱 핵심원리 랄지, 리버싱엔지니어링 비밀을 파헤치다 등)이 없기 때문에 공부할 때 불편함을 겪는 분들이 많으실 거라 봅니다. 저도 해킹 공부를 하면서 책을 본 기억이 없습니다. 결론은 인터넷에서 그때그때 자료를 찾아보면서 공부하는 방법밖에 없는데, 막연하게 인터넷에서 어떤 것부터 검색해야할지 모르는 분들이 많으실거라 생각합니다. 그런 분들을 위해 Basic System Hacking Technique 카테고리를 만들어 포스팅을 시작했습니다. 제가 지금부터 포스팅하는 공부환경.. 더보기