cakectf 2021 hwdbg
chall
1 | #include <stdio.h> |
solve
問題の解析
実装されている内容は、Hardware (I/O port) debugging utility
という形で物理メモリへのmem write
のみが実装されています。これを使って特権を得ることが問題です。
特権昇格の方法
セキュリティは何もない状態の想定では、以下が簡単なものらしい…(ほかにもあるらしいがあんま分かってない)
- modprobe_path/core_patternの上書き
- commit_creds(prepare_kernel_cred(0))の実行
- cred structureの上書き
今回は、物理メモリを任意に書き換えできるので、1がよさそうです。
とはいっても、modprobe_pathは/sbin/modprobe_path
の書き換えで、core_patternはcore
の書き換えです。
今回は/sbin/modprobe_path
の書き換えをしてみることに…
準備
/sbin/modprobe_path
の書き換えに必要なのは、AAWとこれが存在するアドレスです。
AAWは問題で渡されているのですでに解決しています。アドレス側は、手元でどうにかして知る必要があります。
root権限で\dev\memの中はみれるので*dd if=/dev/mem of=kernel_data.bin bs=1M skip=30 count=1*
で物理メモリの内容をkernel_data.bin
に保存して/sbin/modprobe
を探す形でアドレスを特定しました。
あとは、そのアドレスにこちら側が用意したファイルを適当なfile((/tmp/hogehogee)
)を実行することで、書き換えた先のfile(/tmp/a
)を実行してもらえれば終わりです。
e.g./tmp/hogehogee
: #!/bin/sh\ncat /flag.txt > /tmp/flag\n
e.g./tmp/a
: '\xff\xff\xff\xff'
これで、/tmp/flag
にflagが記載されるのでこれを読めば勝ちです。
CakeCTF{phys1c4l_4ddr3ss_1s_th3_m0st_h0n3st_4ddr3ss_083f63}
知らないことが多すぎて勉強になった…