System Hacking 37

힙풍수 (Heap Feng Shui)

힙풍수가 뭔지 몰라서 정말 간단하게 정리해보았다. 힙풍수란 단어를 처음으로 마주한 곳... 만약 커널 힙과 관련된 취약점을 테스트 하는 경우, user 권한일 때와 root권한일 때의 힙 풍수가 달라지기 때문에 테스트 중에는 user 권한으로 디버깅해야 한다. in [linux kernel] (12) - KADR 우회 What is 힙풍수 ...? 힙풍수란 뭘까? 이름이 뭔가 모르게 구수해보이지만 영어다. (힙 그루밍 이라고도 한다.) 노랑은 해제된 청크, 빨강은 오버플로우 시킬 청크이다. 이때, 빨강을 오버플로우 시키기 위해서 (위에서부터 할당된다고 가정했을 때) 힙을 3개 할당해서 힙풍수(아다리)를 맞춰야 한다. 이 힙은 계속 바뀌기 때문에 힙풍수를 맞춰줘야 한다. 특히 유저 권한일 때랑 루트 권한일..

System Hacking 2021.03.02

Integer issue (정수의 범위, 묵시적 형변환, integer overflow)

ref : dreamhack.io 얼마전에 integer overflow를 마주했었다. 너무 대충 아는 것 같아서 드림핵 강의를 보면서 정리해보려고 한다. 정수의 범위 (signed) char : -2^7 ~ 2^7-1 unsigned char : 0 ~ 2^8-1 (only 양수) (signed) short : -2^15 ~ 2^15-1 unsigned short : 0 ~ 2^16-1 (only 양수) (signed) int : -2^31 ~ 2^31-1 unsigned int : 0 ~ 2^32-1 (only 양수) (signed) long long : -2^63 ~ 2^63-1 unsigned long long : 0 ~ 2^64-1 (only 양수) size_t와 long 자료형은 아키텍쳐에 따..

System Hacking 2021.01.27

Use-After-Free (UAF)

예전에 봤는데.. 까먹은 것 같아서 정리해보려고 한다. 참고 : dreamhack.io 환경 : ubuntu 16.04.7 동적 메모리 관리에서 가장 자주 발생하는 문제는 해제된 메모리를 정확히 관리하지 않아 발생하는 문제이다. Use-After-Free (UAF) 해제된 메모리에 접근해서 값을 쓸 수 있는 취약점이다. // uaf1.c #include #include #include int main(void) { char *a = (char *)malloc(100); memset(a, 0, 100); strcpy(a, "Hello World!"); printf("%s\n", a); free(a); char *b = (char *)malloc(100); strcpy(b, "Hello Pwnable!");..

System Hacking 2021.01.06

Master canary (마스터 카나리)

SSP(Stack Smashing Protector) 보호기법은 스택 버퍼오버플로우를 방지하기 위해 개발된 기법이다. SSP는 스택 buffer와 SFP(Stack Frame Pointer) 사이에 랜덤 값인 canary를 넣어서 함수 종료 시점에서 __stack_chk_fail( 함수 호출을 통해 canary 변조 여부를 체크함으로써 스택이 망가졌는지 확인한다. 다시 정리해서, SSP가 적용되어 있으면 함수에서 스택을 사용할 때 canary가 생성된다. 쓰레드를 생성하면 새로운 프로세스가 생긴다. 참고로 쓰레드는 프로세스 내에서 각각 Stack만 따로 할당받고, code, data, heap 영역은 공윻나다. 마스터 카나리는 main 함수가 호출되기 전에 랜덤으로 생성된 카나리를 쓰레드마다 전역 변수로..

System Hacking 2020.12.21

one-shot gadget (원샷 가젯)

정말 편리한 one-shot gadget(원샷 가젯)에 대해 알아보자. 원샷 가젯은 가젯 하나만으로 쉘을 딸 수 있다. 참고로 가젯이란.. 그냥 코드 덩어리라고 생각하면 될 듯 하다. 원샷 가젯이란 라이브러리 내에 존재하는 가젯으로, 리눅스 시스템에서 특정 조건 하에 pc를 바꾸는 것만으로 쉘을 실행시켜주는 코드이다. 원샷 가젯은 one_gadget이란 툴로 손쉽게 찾을 수 있다. 아래는 ubuntu 18이상 버전에서 설치할 수 있는 명령이다. 16버전에서 사용하려고 해봤는데 잘 안깔려서 그만뒀다... ㅎㅋ.. 방법을 찾는다면 더 추가해서 포스팅하겠다. sudo apt-get install ruby sudo gem install one_gadget 사용법 경로는 부끄러워서(?) 가렸다. constrain..

System Hacking 2020.11.13

32bit에서 FSB (Format String Bug) 이해하기 -(3) (완)

업데이트 : 2020.10.11 - 3번과정 계산법 추가 참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 저번 (2)편에 이어서 32bit에서 FSB(Format String Bug)를 이해해보자. 이제 shell 함수 없이 쉘을 따보자. 쉘을 따려면 system("/bin/sh")를 실행시키면 된다. 이때 알아야 할 것은 system 함수의 주소이다. ASLR이 걸려있으면 system 함수의 주소는 실행할 때 마다 변하게 된다. (ASLR은 base 주소를 변경시키기 때문, 예시는 아래에 있음) 그래도 프로그램을 실행하는 동안에는 한 주소로 고정이 된다. 모든 라이브러리 함수는 고정된 offset 값을 가진다. offset값은.. 상대적 거리라고 생각하면 ..