where is flag in kernel ctf
항상 헷갈려서 정리해 놀려고 한다.
Shell
#!/bin/sh
# timeout --foreground/ 300 qemu-system-x86_64 \
qemu-system-x86_64 \
-m 64M \
-nographic \
-kernel bzImage \
-initrd rootfs.cpio.gz \
-hda flag \
-append "console=ttyS0 quiet oops=panic loglevel=3 panic=-1 panic_on_warn=1 pti=on kaslr page_alloc.shuffle=1 root=/dev/sda" \
-no-reboot \
-cpu kvm64,+smap,+smep \
-monitor /dev/null \
-net nic,model=virtio \
-net user \
-S -gdb tcp:0.0.0.0:41234
보통 run.sh 에서 다음과 같이 시작을 하는데
여기서 -hda flag 을 보면 flag를 드라이브로 넣는다( 호스트(또는 컨테이너) 파일 flag를 VM의 첫 번째 하드디스크(주로 첫 번째 디스크 = /dev/sda )로 붙인다) 라는 의미이다. 즉, 실제 커널 안에서는
/dev/sda 라는 이름으로 첫번째로 붙게된다.
따라서 다음과 같이 데이터를 가져오던가,
Shell
dd if=/dev/sda bs=4096 count=16 2>/dev/null | hexdump -C | head아니면 다음과 같이 파일로 열어야 한다.
Shell
open("/dev/sda",O_RDWR);