분류 전체보기
kernel - ret2usr
서론 가장 기본적인 커널 익스 기법인 ret2usr에 대해서 알아보자. 간단히 먼저 설명하자면, ret2usr는 stack buffer overflow에서 return to shellcode와 같다고 보면 된다. 본론 우선 테스트는 유명한 커널 익스 사이트인 포냐블의 LK01 파일을 기본으로 한다. Holstein 모듈 분석 및 취약성 실행 | 전당포! (pawnyable.cafe) Holsteinモジュールの解析と脆弱性の発火 | PAWNYABLE! Holsteinモジュールの解析と脆弱性の発火 LK01(Holstein)の章ではKernel Exploitの基礎的な攻撃手法について学びます。導入の章でLK01をダウンロードしていない方は、まず練習問題LK01のファイルをダ pawnyable.cafe 압축을 풀어보면 2개의 폴..
kernel debuging with pwndbg - pwndbg 설치
서론 gef가 익숙하고 편해서 사용하고 있었으나, 무슨 이유인지 모르겠지만 kernel debuging 시 register, stack, code 모든 영역의 값이 제대로 나오지 않는 문제가 발생했다. 지원은 하긴 할텐데 정확히 이유를 알 수 없어 어쩔 수 없이 pwndbg를 설치하였다. 설치 방법 아래를 차례로 실행하면 끝. git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh kernel debuging 기본 셋팅 아래 스크립트를 기준으로 실행하면 된다. #! /bin/sh gdb \ -ex "add-auto-load-safe-path $(pwd)" \ -ex "file vmlinux" \ -ex 'set arch i386:x86-64' \..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYHwVI%2FbtsrH76da64%2FOe9jl0dZPpd2USlEWTWuLk%2Fimg.png)
Dynamic Allocator Misuse - level 1~20
1. intro 2. code 및 분석 2.1. code 생략 2.2. 분석 heap을 할당하고 해제하는 기능들을 가지고 있으며, 일부 문제에서는 stack을 free할 수 있다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 use after free, double free, tcache poisonning 3.2. 공격 준비 앞쪽 문제들은 use after free, double free와 tcache poisonning으로 풀 수 있다. 그러다가 레벨 9에서 아마 한번 막힐텐데, 일부 secret 값을 찾을 수 없어 브루트포스로 풀었다. 근데 후반에 레벨 14에서 다시 한번 유사한 문제가 나오게 되며, 이 때 secret 값을 굳이 찾을 필요가 없다(?)는 것을 깨닫게 된다. 아마 레벨 9도 동일..
rootfs.cpio 파일 추가 shell script
아무래도 반복적으로 파일 압축 / 해제를 해야할 것 같아서 간단히 shell script를 만들어 보았다. 일부 명령어가 룻 권한으로 실행되어야하기에 미리 root으로 권한을 유저를 변경한 뒤 실행하자. rootfs.cpio 파일과 추가할 파일이 같은 폴더에 있을 때 ./cpio.sh 파일1 파일2 파일3 ... 과 같은 방식으로 사용하면 된다. #! /bin/bash if [ $# -eq 0 ] ; then echo "useage : cpio.sh file1 file2 ..." exit 0 else for var in "$@" do if [ ! -e $var ] ; then echo $var : "file not exist" exit 0 fi done mkdir unzip cp ./rootfs.cpio..
Kernel 보호기법 및 우회법
서론 커널 공간도 유저 공간과 마찬가지로 보호기법이 있다. 다행이라면 유저 공간의 보호기법과 대동소이한다는 점. 아직 각 보호기법에 따른 공격법을 공부하지 않았기에 느낌적인 느낌으로 써내려가본다. 보호기법 확인 방법 checksec 먹힌다. /proc/cpuinfo와 /etc/default/grub 파일을 확인 qemu script에 보통 설정되어있음. 제일 좋은건 두번째, 세번째 방법이고 cat /proc/cpuinfo | grep flags 로 smep, smap /etc/default/grub 에서 kaslr을 확인하거나 qemu script에 -append nokaslr -cpu smep, smap 와 같이 확인 가능하다. KASLR 이름부터 ASLR이다. 말 그대로 주소 랜덤화. qemu scr..
exploit binary를 커널 이미지에 삽입하기.
앞서 생성한 것과 같이 bzImage는 kernel, rootfs.cpio는 기본적인 파일 시스템의 구조만 가지고 있으며, qemu로 실행 시 rootfs.cpio의 파일들만 나타날 것이다. 그러므로 익스코드 작성 후 해당 익스 바이너리를 rootfs.cpio 파일 내에 넣어줘야한다. cpio 파일 압축 해제 명령어는 아래와 같고 cpio -idv rootfs.cpio 더불어 바이너리는 커널과 파일 시스템 내에 링커가 없기 때문에 -static 옵션을 주고 컴파일해야한다. 또는 base64로 인코딩..
vmlinux 추출하기
vmlinux 앞선 kernel image build 시에도 언급한 것과 같이 vmlinux는 커널 디버깅에 사용할 여러 주소들과 값들을 가지고 있으며, 보통 CTF에서는 제공되지 않는 경우가 많다. (용량이 커서?!) 그러므로 아래와 같이 추출 가능하다. extract-vmlinux bzImage 파일에서 vmlinux를 추출할 수 있는데, 다음과 같은 명령어로 추출할 수 있다. /usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux 다만 추출된 파일에서는 심볼들이 삭제된 상태이지만, objdump, ROPgadget 등으로 ROP을 위한 gadget의 주소는 구할 수 있다.
qemu 및 gdb setting
qemu란? vmware와 같은 가상 머신 에뮬레이터이다. 보통 ctf에서는 앞서 만든 bzImage와 rootfs.cpio (+vmlinux는 주어지기도하고 아닐수도 있음) 파일로 qemu를 통해 가상 머신을 실행할 수 있다. run.sh qemu가 어떻게 구동될지 설정을 담고 있는 파일이다. #!/bin/sh qemu-system-x86_64 \ -m 64M \ -nographic \ -kernel bzImage \ -append "console=ttyS0 loglevel=3 oops=panic panic=-1 nopti nokaslr" \ -no-reboot \ -smp 1 \ -monitor /dev/null \ -initrd rootfs.cpio \ -net nic,model=virtio \ -..
vs code - wsl 연동 간 certificate error 발생 시.
간단히 설명하자면 결국 vs code에서 ubuntu와 연결하기 위한 파일을 설치하는데, wget으로 파일을 다운로드 받을 때 인증서 문제로 다운로드가 되지 않아서 그렇다. 아래와 같이 설정을 추가해주자. echo "check_certificate = off" >> ~/.wgetrc 회사 방화벽 문제로 좋은 경험 많이 한다 ㅋㅋㅋㅋ