전체 글

전체 글

    Intercepting Communication - payload

    보호되어 있는 글입니다.

    Building a Web Server - payload

    보호되어 있는 글입니다.

    Talking web - payload

    보호되어 있는 글입니다.

    Program interaction - 1~142

    대략 2주에 걸쳐서 다 푼 것 같다. 전반적으로 리눅스 기본 명령어 사용법으로부터 시작하여 bash, shellscript, python을 토대로한 기초적인 문법을 공부할 수 있는 문제로 구성되어있다. 나중에는 file description의 사용법에 대한 문제가 나오는데, stdin / out을 어떻게 조작할 수 있는지에 대해 배울 수 있다. file description 문제는 예를 들어 bash script로 stderr인 fd 3을 통해 값을 받는다던지 하는 문제인데, 기본 stdin fd인 1을 어떻게 3으로 바꿀 것인가에 대한 고민의 연속인 셈이다. 다만, 정해진 방법으로 꼭 풀어야하는 것은 아니니 이를 잘 활용하면 된다. (ex. shellscript로 문제 프로그램을 실행해야하는 조건이 있..

    format string bug 관점에서의 printf 함수 분석

    서론 매번 format string bug를 할 때마다 어떻게 작동하는지 원리를 제대로 알지 못하고 방식만 익혀 문제를 푸는데만 집중했는데, 최근 문제를 풀면서 정말 어떻게 작동하길래 이렇게 format string bug가 작동하는지 의문이 들었다. 이에 조금 분석을 해보려한다. source code 무엇보다 단순히 libc 파일 내의 함수라고 생각했는데, 직접 찾아보니 사실은 kernel 내에 존재하는 함수였다는데서 놀랐다. 더불어 architecture마다 해당 함수가 정의되어있는데, 대동소이한 것을 볼 수 있다. printf.c - arch/x86/boot/printf.c - Linux source code (v6.5.5) - Bootlin printf.c - arch/x86/boot/printf..

    kernel security -level 10~12

    1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 level 10 : level9 + ASLR이다. level 11,12 : 유저 영역에 플래그를 읽어들인 뒤 플래그 파일을 삭제하고, 커널 영역에서 쉘코드를 실행한다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 생략 3.2. 공격 준비 level 9와 10의 페이로드가 동일하다. 다만, 주소를 어떻게 설정하느냐인데, 가상 머신을 실행할 때 커널 함수 base address가 매번 변경되지만, 처음 설정된 주소 그대로 유지되기 때문에 dmesg를 통해 적절히 레지스터에서 주소를 가져와 오프셋을 계산하면 된다. 물론 일반적인 상황은 아니지만... level 11과 12의 페이로드가 동일하다. 둘 다 플래그를 삭제해버리지만, 유..

    kernel security level9

    1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 device_write로 유저 영역에서 값을 받아 0x108 위치를 참조하여 call 한다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 임의 함수 실행 가능. 3.2. 공격 준비 임의 함수를 실행 가능하기에 결국은 어떤 함수를 실행하는지가 포인트이다. 커널에서도 execve나 system 함수와 같이 명령어를 실행해주는 함수가 있는데, 그것이 run_cmd 이다. 마찬가지로 rdi에 해당 함수의 인자를 담고있는 주소를 넣고 run_cmd 함수를 실행해주면 된다. 4. exploit 생략

    pwn.college - kernel security payload

    보호되어 있는 글입니다.

    kernel security level8

    1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 특정 바이너리에서 모듈을 load하는데, 이 때 seccomp가 걸려있어 write 함수 이외에는 사용할 수 없게된다. 다만, 모듈 내에서 바이너리로부터 전달받은 쉘코드를 실행해준다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 seccomp bypass 3.2. 공격 준비 개인적으로 내가 이걸 풀었다는게 레전드라고 생각한다. 물론 힌트를 다소 참고하긴 했지만... 유저 영역에서의 seccomp는 결국 커널 영역의 특정 주소에 실행 가능 (또는 불가) 한 함수에 따라 bit setting을 해두고, 이를 참조하며 실행 여부를 판단한다. https://docs.google.com/presentation/d/1YMlOERClX6..

    kernel security level1~7

    1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 기초적인 kernel exploit 기법에 대해서 배울 수 있다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 생략 3.2. 공격 준비 level 1~5까지는 커널 모듈에서 함수 호출 시 특정 값과 비교하며 권한 상승을 일으켜준다. level6~7에서는 모듈에서 쉘코드를 실행시켜주기에 shellcode를 작성해야하는데, 권한 상승을 일으켜주는 부분만 구현하면 쉽게 풀 수 있다. level8부터 시작이나 마찬가지인데, seccomp를 통해 실행 가능한 함수를 제한한다. 즉 prepare_kernel_cred와 같은 함수 사용이 불가능해지며 이를 어떻게 우회할 것인가가 주된 사항이다. 4. exploit 생략.