Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

trash houz

[Linux Kernel] CTF Tip - 부팅까지 본문

Pwnable

[Linux Kernel] CTF Tip - 부팅까지

applemasterz17 2019. 8. 21. 00:45

예시: 0CTF zer0fs 

보통 커널 익스 문제를 풀게되면 위와같은 파일들을 받게 된다

 

zerofs.ko 와 같은 .ko 파일은 디바이스 드라이버 파일로 원본 소스코드가 제공되지 않는다면 우리가 직접 분석해야할 파일

 

run.sh 같은 .sh 스크립트 파일들은 제공 될수도 있고 안될수도 있는데 아마 대부분 qemu 가상머신을 실행시켜주는 스크립트 파일들이다. 

꼭 제공되는 스크립트를 사용하지 않아도 qemu 설정을 할수있다면 맘대로 옵션을 바꿔도 된다. 

 

bzImage 는 압축된 커널 이미지로 부팅시 사용된다. 

extract-vmlinux 스크립트를 이용해서 압축을 푼뒤 vmlinux 를 만들어 분석시 활용할수 있다. 

 

rootfs.cpio 같은 .cpio 파일들은 대부분 file system 을 압축시켜놓은 파일이다.  

이름에 fs 같은 프리픽스가 들어가있으면 100000% 맞으니까 압축풀어서 사용하면 되겟다.

 

대충 파일들의 용도에 대해서 알아보았으니 실제로 세팅을 해보자.

 

1. bzImage 를 이용해 vmlinux 생성 

아래의 extract-vmlinux 스크립트를 이용해 추출해내면 된다.

https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux 

$ ./extract-vmlinux bzImage > ./vmlinux 

 

 

2. file system 압축풀기, 세팅

위에서 설명한것처럼 .cpio 파일이면 아마 96.87% 의 확률로 fs 압축해놓은걸테니 그냥 풀어버린다.

참고로 rootfs.cpio 는 zer0fs 문제를 예시로 들은것, 다른문제는 파일 이름이 다를수도 있으니 잘 보고 풀어야한다.

아래 명령어 그냥 복붙하고 안된다고 하면 도와줄 자신이 없다...

압축푸는 이유는 분석할때 파일 추가해야하기 때애문.

마지막 명령어는 다시 압축해서 rootfs.cpio 로 돌리는것. 

$ mkdir fs

$ cd fs

$ cpio -idm  < ../rootfs.cpio

$ find . -print0 | cpio --null -ov --format=newc > ../rootfs.cpio

 

 

3. 스크립트 수정

멀쩡한데 안멀쩡함

왜때문인지는 모르겟으나 기본제공 스크립트중에 멀쩡한걸 못봤다.

이걸로 부팅하면 한번에 성공한걸 본적이없다. 요상하다.

아래의 것을 복붙해서 새로 만들어버리자. 

빨간칠 해놓은 core.cpio 부분은 문제마다 다르니까 알아서 쓱싹 하자 

 

#! /bin/sh
qemu-system-x86_64 \
    -m 256M \
    -nographic \
    -kernel bzImage \
    -append 'console=ttyS0 loglevel=3 oops=panic panic=1 nokaslr' \
    -monitor /dev/null \
    -initrd core.cpio \
    -smp cores=4,threads=2 \
    -cpu qemu64,smep,smap 2>/dev/null \
    -gdb tcp::1234

 

 

깔끔하게 부팅성공. 

분석할일만 남았다.