SROP 기법을 오랜만에 복습하고 싶어서 이렇게 블로그에 SROP 풀이 방법을 정리하고자 한다. 이 문제는 SROP에 대해서 제대로 익힐 수 있고, 그뿐만 아니라 다른 테크니컬적인 부분도 굉장히 배울 점이 많아 추천하는 문제이다. SROP에 대한 자세한 설명은 예전에 작성해놓았으니 필요하면 아래를 참고하면 된다. [Pwnable] SROP (SigRetrun Oriented Programming) [Pwnable] Exploit Tech: SigReturn-Oriented Programming 아래 포스트는 내가 적은 건 아닌데 SROP 공부하는데 도움된 포스트이다. SROP. Sigreturn-oriented programming (SROP)… | by trustie_rity | Medium 문제 분석..
들어가며 원격 코드 실행(Remote Code Execution)과 같은 취약점은 사전 예방 방법이 없음. 따라서 제한된 환경에서만 코드를 실행할 수 있게 하는 샌드박스 기법이 도입됨. 샌드박스에 대해서는 아래 포스트를 참고하자. [Security] 샌드박스(Sandbox)와 샌드박스의 취약점 시스템콜(syscall), 셸, 커널모드 vs 유저모드 실제 코드에서 seccomp을 설정하려면 prctl 함수에 PR_SET_SECCOMP를 첫번째 인자로 전달하면 된다. 구성 struct seccomp { int mode; struct seccomp_filter *filter; }; /* struct seccomp - the state of a seccomp'ed process * * @mode: indicat..
.init_array & .fini_array .init_array와 .fini_array는 바이너리가 실행되고 종료될 때 초기화를 위해 참조하는 함수 포인터들이 저장되어 있는 섹션 이 배열들은 데이터 섹션에 존재하고 RELRO가 적용되면 overwrite 불가. $ objdump -h ./array array: file format elf64-x86-64 18 .init_array 00000008 00000000006008c0 00000000006008c0 000008c0 2**3 CONTENTS, ALLOC, LOAD, DATA 19 .fini_array 00000008 00000000006008c8 00000000006008c8 000008c8 2**3 위처럼 objdump로 .init_arrary..
들어가며 ASLR : 스택, 힙, 라이브러리 등의 위치가 무작위로 랜덤하게 설정됨 한계 : 코드 영역과 데이터 영역의 위치는 고정되는 단점 우회 : 라이브러리 주소를 알아내면 고정된 오프셋을 통해 원하는 함수로 overwrite할 수 있음 PIE가 적용되지 않으면 코드 세그먼트의 주소는 고정되므로 PLT를 overwrite할 수 있음 고정된 주소의 리턴 가젯(코드 영역에 위치) 등을 이용하여 실행 흐름을 조작할 수 있음 아래는 addr.c라는 파일을 PIE를 적용하지 않고 컴파일한 경우이다. buf_stack, buf_heap, libc_base, printf의 주소는 바뀌지만 main 함수와 사용자 정의 함수 my_func의 위치는 고정되고 있음 -> 만약 리턴 가젯등의 주소가 실행마다 달라진다면 저런..
서버의 라이브러리 정보 찾는 방법 서버에서 어떻게든 주소 하나 leak해서 뒤에 3자리(16진수) 입력해주면 됨 (왜냐하면 aslr나 pie 적용되어있어도 뒤에 12bit는 똑같음 페이지 기법 때문에) https://libc.blukat.me/?q=__libc_start_main_ret%3A18a libc database search Matches Not found. Sorry! libc.blukat.me 아래는 서버의 main return 주소 익스플로잇 한것임 라이브러리가 동일하면 bf7이 일정한 것을 볼 수 있음. 따라서 위 프로그램 이용하면됨 예) 이렇게 서버의 라이브러리가 어떤 라이브러리인지 나온다. 오프셋도 쉽게 찾을 수 있음. 위에 All Symbols에 들어가면 이런식으로 심볼들의 주소 혹..