[Kernel] 커널에서 외워야할 명령어들
sangjun
·2021. 7. 21. 02:37
명령어
1. CTF에서 xxx.sh BzImage rootfs.cpio 3가지 파일이 주어진다.
--> vmlinux추출해야된다.
--> vmlinux 추출법
/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux
2. Exploit파일을 파일 시스템에 넣고 실행하는법
- 커널을 부팅하면 링커와 gcc등이 없기 때문에 정적링킹으로 컴파일하여 파일 시스템에 넣어줘야 한다.
gcc -static -o my_ex my_ex.c -no-pie
-파일 시스템에 넣는 방법
--> rootfs.cpio를 압축해제하고 Exploit파일을 포함시켜 다시 재압축한다.
- 압축 해제
mkdir rootfs
mv ./rootfs.cpio ./rootfs
cd ./rootfs
cpio -id -v < rootfs.cpio
-재압축
cp ../my_ex .
find .| cpio -o --format=newc > ../rootfs.cpio
rm ./rootfs.cpio
3. Qemu설치
sudo apt-get install qemu-kvm
4. GDB디버깅 할 때
gdb -q ./vmlinux
./start.sh -S -gdb tcp:127.0.0.1:1234
target remote 127.0.0.1:1234
5. Kernel.ko모듈파일 얻는법
mv core.cpio core.gz
gzip -d core.gz
cpio -id -v < core
6. 위의 방법처럼 했는데 모듈 파일 없을 때 아래 파일 위치 확인해보기
/lib/modules/
7. 커널 버전 확인법
file bzImage
8. 디버깅 attach 방법 v.2
gdb -q vmlinux
add-symbol-file baby/lib/modules/4.4.72/babydriver.ko 0xffffffffc0000000
target remote :1234
9. objdump로 vmlinux에서 가젯 뽑기
objdump -M intel -d vmlinux | grep "iretq"
10. 배쉬 스크립트로 압축해제랑 재압축 손쉽게 하기
- 재압축 스크립트 ( tmp/extracted 에 exploit코드 넣어주기)
#!/bin/sh
cp ./exploit ./temp/extracted
cd temp
rm ./initramfs.cpio 2> /dev/null
cd ./extracted
find ./ -print0 | cpio --owner root --null -o --format=newc > ../initramfs.cpio
gzip -f ../initramfs.cpio
cd ../../
cp temp/initramfs.cpio.gz .
- 압축해제 스크립트
#!/bin/sh
mkdir temp
cp initramfs.cpio.gz temp
cd temp
sudo rm -r ./extracted
mkdir extracted
cd extracted
gzip -d ../initramfs.cpio.gz
cpio -id < ../initramfs.cpio
cd ../
echo "[+] Extraction Completed"
- exploit 코드 컴파일 Makefile
all:
gcc -masm=intel -static exploit.c -ggdb -fno-pic -o exploit
11. 커널 디버깅 시에 -no-pie옵션 주고 아래 스크립트 추가해서 어느 포인트에서 레지스터 상태 보기
--> 레지스터에 커널 공간이 남아있으면 /proc/kallsyms를 확인하거나 vmlinux확인해서 오프셋 확인하기
printf("%p", shellcode);
getchar();
12. vmlinuz만 주어졌을 경우 --> vmlinux로 unpack해주기
binwalk e <file>
13. Skeleton Qemu Script
qemu-system-x86-64\
-m 512M\
-kernel ./bzImage\
-initrd ./rootfs.cpio\
-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet nokaslr"\
-s\
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0\
-nographic\
-cpu qemu64,smep\
###################
-m 512M 주메모리를 512mb할당
-kernel ./bzImage bzImage를 사용할 커널 이미지로 지정
-initrd ./rootfs.cpio rootfs.cpio를 사용할 파일 시스템으로 지정
-append "nokaslr" KASLR 보호기법 설정 X
-cpu smep SMEP보호기법 적용 O
-s gdb remote attach를 위해 1234포트 개방
'Pwnable > Kernel exploit' 카테고리의 다른 글
[Kernel] QWB CTF 2018 - core (ret2usr) (0) | 2021.07.25 |
---|---|
[Kernel] Kernel공부를 위한 커널문제 모음 (4) | 2021.07.22 |
[Kernel] ret2usr (0) | 2021.07.20 |
[ Kernel Exploit] Kernel 공부를 위한 C언어 (0) | 2021.07.20 |
[ Kernel Exploit] Kernel 공부를 위한 자료들 (1) | 2021.07.20 |