분류 전체보기
curl ssl certificate problem
4연타... 열받네... curl은 그래도 낫다. -k만 추가해주면 되니까. curl -kfsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh 이런 식이다.
gem ssl verification error
3연타 에러... ㅋㅋㅋㅋㅋ gem은 아래와 같이 해결 가능하다. 오류가 뜨긴 하는데 설치 됨. wyv3rn:~$ sudo gem install one_gadget --source http://rubygems.org ERROR: SSL verification error at depth 1: self-signed certificate in certificate chain (19) ERROR: Root certificate is not trusted (/C=KR/ST=Seoul/L=Guro/O=MonitorApp Corporation/OU=MonitorApp AISWG/CN=MonitorApp Root Certificate Authority (AISWG)) ERROR: SSL verification erro..
git certificate fail
방화벽 문제 등으로 인해 git clone이 되지 않는 경우가 있다. (회사에서 하려니 별짓을 다 한다...) 아래 명령어로 해결. wyv3rn:~$ git config --global http.sslVerify false
pip certificate error
방화벽 문제 등으로 인해 pip 서버에 정상적으로 접속하지 못해 설치가 되지 않는 경우가 있다. wyv3rn:~$ sudo pip3 install pwntools WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1007)'))': /simple/pwntools/ 이 경우 아래와 같이..
Kernel exploit - kernel build 및 file system build
서론 CTF에서 kernel 관련 문제의 경우 기본적으로 관련 시스템 환경이 구성된 상태로 파일로 제공된다. 물론 해당 파일만으로 어떻게 분석하는지, 어떻게 사용하는지만 알면 "문제를 푸는 것"은 충분히 가능하다고 본다. 하지만, 살짝만 더 들어가서 공부해보자. 시작하기 전에 간단히 설명하자면 os를 구동하기 위한 기본적인 파일들이 필요한데 컴퓨터와 명령어를 주고 받기 위한 kernel 파일 그리고 기본적으로 디렉토리가 어떻게 구성되어있는지, 어떻게 관리하는지 등을 위한 file system으로 구성된다. kernel build 1. 패키지 설치 커널을 빌드하기 위해서는 여러 패키지들이 필요하다. 대략 아래와 같다. build-essential libncurses5 libncurses5-dev bin86..
Kernel exploit - 모듈 프로그래밍
모듈이란? 모듈은 동적으로 커널에 등록하거나 제거할 수 있는 프로그램을 이야기한다. 이를 통해 커널을 재 컴파일 하지 않고 기능을 추가하거나 제거할 수 있다. 모듈 프로그래밍 및 컴파일 모듈 코드는 보통 위쪽에 작동할 코드가 작성되고, 가장 아래에 모듈을 실행하는 함수인 module_init(함수 명) 과 종료하는 함수인 module_exit(함수 명) 이 작성된다. 이렇게 코드 작성 후 컴파일을 위해서는 별도 명령어들이 필요한데, Makefile이라는 컴파일 명령어로 구성된 파일을 작성한 뒤 make 명령어를 통해 모듈을 컴파일할 수 있으며, 확장자는 .ko가 된다. 모듈의 등록 및 제거 이렇게 작성된 모듈은 insmod filename rmmod filename 로 등록과 제거가 가능하다. 모듈의 l..
Kernel exploit - 디바이스 드라이버
디바이스 드라이버란? 컴퓨터와 연결된 장치들과 상호작용을 하기 위해 해당 장치로 접근할 수 있게 해주는 소프트웨어를 이야기한다. 커널이 컴파일 될 때부터 포함된 디바이스 드라이버도 있지만, 나중에 커널 부팅 시 또는 부팅 후 로드되는 드라이버도 있다. 이는 모듈의 일종이기에 모듈 프로그래밍을 통해 프로그래밍할 수 있다. 디바이스 드라이버의 종류 character device, block device, network device가 있다. character device 디바이스를 파일과 같이 직접 접근해서 사용할 수 있도록 하는 드라이버다. 키보드, 마우스와 같은 드라이버를 이야기한다. block device 하드디스크와 같은 파일 시스템과 관련된 디바이스 드라이버이다. network device 네트워크 ..
Kernel exploit - 슬랩 할당자
슬랩 할당자란? 커널에서 사용하는 동적 메모리 할당자이다. 쉽게, 유저모드에서 사용하는 heap과 유사하다고 보면 된다. 특이점은 메모리 풀 구조를 가지고 있으며, 미리 고정된 크기의 메모리 블록들을 할당해 놓는다는 것이다. 슬랩 할당자는 slab, slub, slob의 3가지 방식이 있는데, 결론은 현재 대부분 slub을 사용한다. 슬랩 할당자, 슬랩 캐시, 슬랩 객체, 슬랩 페이지 슬랩할당자 kmalloc_cache[]라는 전역 배열을 이용해 각 슬랩 캐시들을 관리한다. slab_common.c - mm/slab_common.c - Linux source code (v6.4.8) - Bootlin slab_common.c - mm/slab_common.c - Linux source code (v6.4..
Kernel exploit - task란
Task란? 다소 검색을 해봤는데 그 의미가 모호한 것 같다. 태스크를 태스크라고도 하고, 스레드라고도하고 프로세스라고 표현한다고 하는데... 지금 공부하고 있는 시점에서는 크게 중요하지 않은 것 같다. 결국은 태스크는 작업 실행 단위를 이야기한다. task_struct란? 결국 모든 태스크들은 task_struct 구조체를 통해 관리하게 된다. 태스크 또는 스레드가 생성되면 do_fork()라는 커널 함수를 거치면서 이 task_struct를 생성하는데, 이 때 권한이나 주소 등을 task_struct 구조체에 넣어두게 된다. 즉, fork(), vfork(), pthread_create() 등의 함수를 어플리케이션에서 실행하면 라이브러리에서 해당 함수를 찾아 실행하며, 라이브러리에서는 다시 clone..