목록Writeup (4)
trash houz
보호되어 있는 글입니다.
- 분석 device 파일 open() 시에 실행되는 함수. 전역 변수. bss영역에 babydev_struct라는 구조체가 있고, 구조체 변수중 device_buf에 64바이트만큼 동적 할당해준다. 이후 구조체 변수 device_buf_len에 크기까지 저장. 여기까지 open() 완료 close() 통해 디바이스를 종료하면 실행되는 babyrelease() 함수. babydev_struct 구조체의 device_buf를 참조하여 kfree() 해버린다. 다만 따로 전역변수 .bss 영역을 초기화하지는 않는다. 만약 디바이스를 두개 열게 되면 두 개의 디바이스는 똑같은 babydev_struct 구조체를 가리킨다. 이렇게 된다면 free() 후에도 참조할 수 있는 UAF 취약점이 발생하게 된다. bab..
CSAW CTF 2015에서 출제된 stringIPC라는 Kernel Exploitation 문제이다. 로드되어있는 모듈은 IPC를 통하여 통신할 수 있는 기능을 제공하며 새로운 IPC 채널을 생성, 찾기, 크기 변경 등이 가능하다. 각 채널은 생성 시 채널 ID 와 버퍼가 커널 메모리에 할당되고, 버퍼에 내용을 쓰거나 수정, 버퍼크기 변경 등이 가능하다. 문제 출제시 소스코드를 제공했으므로 IDA로 분석하는 참극은 일어나지 않도록 하자. https://github.com/mncoppola/StringIPC/blob/master/main.c mncoppola/StringIPC CSAW CTF 2015 Linux kernel exploitation challenge. Contribute to mncoppo..
리눅스 커널 익스플로잇 문제입니다. .ko 파일, 이미지 파일등이 제공되는데, ko 파일을 ida 로 분석해보겟습니다. ioctl 을 이용해 0x30000(malloc), 0x30001(read), 0x30002(write), 0x30003(free) 가 구현되어있습니다. 취약점은 write() 와 read() 의 offset 을 체크하는곳에 있습니다. offset 을 내부적으로 unsigned 형을 사용하지 않아 사용자 입력으로 offset 에 음수값을 입력했을때 memory leak 이 가능합니다. read() 에서 음수값을 넣게되면 요청한 fd 기준으로 음수값 만큼의 전까지 메모리를 전부 읽어옵니다. 또 코드를 보면 pool 이라는 배열이 있습니다. kmalloc() 으로 동적할당한 공간의 주소를 ..