본문 바로가기

전체 글345

가상화방식의 역사(docker의 등장까지) 기존의 가상화 방식 1. vmware, virtualbox 가상머신. host OS 위에 guest OS 전체를 가상화하여 사용하는 방식 무겁고 느려서 운영환경에선 사용하기 힘들다. 2. KVM vm의 그러한 상황을 개선하기 위해 CPU 가상화 기술을 이용한 KVM과 반가상화 방식의 Xen이 등장했다. 이 방식은 guest os가 필요하긴 하지만 전체 os를 가상화하는 방식은 아니었기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었다. 이 기술은 AWS 같은 클라우트 서비스에서 가상 컴퓨팅 기술의 기반이 되었다. 3. 리눅스 컨테이너 전가상화든, 반가상화든 추가적인 os를 설치하여 가상화하는 방법은 성능 문제가 있고, 이를 개선하기 위해 프로세스를 격리하는 방식이 등장했다. CPU와 메모리는 프로세스.. 2021. 8. 12.
docker-compose 개념 및 참고자료 flask 웹 서버에 ELK stack을 적용하려고 한다. 그런데 elk를 찾아보니까 다들 docker-compose를 이용해서 했더라... 블로그 따라 해봐도 이해가 잘 안 가길래 docker compose 개념부터 공부해보기로 했다. docker-compose - 여러 컨테이너를 일괄적으로 관리하는 도구 - 대부분 시스템은 여러 대의 서버가 유기적으로 연결되어 하나의 서비스처럼 동작하기 때문에 그런 도구가 필요하다. - docker-compose.yml 파일로 여러 개의 도커 컨테이너의 정의를 작성하여 한 번에 많은 컨테이너들을 작동시키고 관리할 수 있는 툴 docker-compose.yml - docker-compose의 구성 파일 - 한 파일 안에 여러 컨테이너 설정 내용을 저장한다. - dock.. 2021. 8. 8.
LOB - zombie_assassin(RTL chain) #include #include #include // the inspector int check = 0; void MO(char *cmd) { if(check != 4) exit(0); printf("welcome to the MO!\n"); // olleh! system(cmd); } void YUT(void) { if(check != 3) exit(0); printf("welcome to the YUT!\n"); check = 4; } void GUL(void) { if(check != 2) exit(0); printf("welcome to the GUL!\n"); check = 3; } void GYE(void) { if(check != 1) exit(0); printf("welcome to the.. 2021. 8. 8.
LOB - assassin(semi ROP) 이번엔 ret을 leave, ret 명령어가 연달아 있는 주소로 옮겨서 익스해야 한다. gdb까보면, main 함수 마지막쯤에 leave, ret이 있는데, 그 주소를 따오면 된다. (0x80484df) 그러면, leave - ret - leave - ret 이렇게 실행되며, 마지막 ret에서 쉘 코드가 실행되는 방식이겠거니, 생각이 든다. 내가 생각한 방식대로 하려면, buffer주소 - 8 ---------------------- buffer주소 - 4 ---------------------- buffer[40] ---------------------- sfp ---------------------- ret ---------------------- 이런 스택 구조에서, 익스할 48바이트 중 40-43.. 2021. 8. 7.
LOB - giant (semi ROP) 버퍼 지워버리고, RTL도 안되고, stack도 안된다??? 남은 건 코드 영역 뿐..... objdump -D assassin | grep ret ☞ ret 코드를 찾는다. 여러 개가 뜰텐데 하나 그냥 고르면 된다. 그리고 libc 주소, system 함수 offset, /bin/sh offset 찾으면 된다... buffer[40] --------------------- sfp --------------------- ret --------------------- 이런 스택 구조인데, 다음과 같이 만들면 된다. ▼ ▼ A * 40 ---------------------- AAAA ---------------------- ret -> 다른 ret 주소로 덮기 ---------------------- sy.. 2021. 8. 7.
LOB - bugbear(RTL, execve함수) 대충 해석해보면 친히 execve의 주소를 구해서 char *ret이 execve의 주소와 같아야 한다는 조건이 있다. ret에 argv[1][44]부터 4만큼 복사하므로, 내가 인자로 줄 값의 44-47까지의 값이 ret에 복사되는 것이다. 그러므로, 44-47번 값을 execve 함수의 주소로 주면 되겄지 [*] 참고사항 c언어 execve 함수 execve(char *filename, char *const argv[], char *const envp[]) 파일이름 파일 인자의 포인터 환경변수의 포인터 ☞ filename이 가리키는 파일을 실행한다. 이 파일은 바이너리 실행 파일이거나 스크립트 파일이어야 한다. argv, envp는 포인터 배열로 filename의 인자로 들어간다. * 만약 filen.. 2021. 8. 7.