CBCTFのIncident Responseのwrite-upを見た
高専祭代休、結構無駄にしてしまったような気がします。実は疲れていたのかもしれません。
なんだかんだで日曜日の就寝25:50だし。
月曜日は気分がすぐれず、少し勉強して用事を済ませて洗濯して終わりでした。
何もする気分になれなかったので18:40ぐらいに布団に入って寝てしまいました。
12時間寝た後の火曜日もテンションが低かったのですが、焼きそば食って氷砂糖キメてからはそこそこやる気が出ました。
課題を消化してから先日のCBCTFのwrite-upを見ていました(Incident Response)。
CODE BLUE CTF 2017 - Incident Response - Writeup - yyy
ctf-writeups/codeblue2017/misc-incident_response at master · ymgve/ctf-writeups · GitHub
pcapから取り出したリクエストボディをx86として逆アセンブルしたときに das
という見慣れない命令を見つけたので、意味を調べると BCD(二進化十進数) を用いた特殊な演算をするときに使うものでした。
「こんな問題でるのか...? Incident Responseなのに...?」と思っていたらアーキテクチャを間違っていました。x64だった。
同じく見つけた syscall
はx64にしかない命令なので、ここから判別することもできました(じゃあx86で逆アセンブルしたときに出てきたのはなぜ?)。
でこれを実行したいな〜とか思って objcopy
とか nasm
でアセンブルとか色々試したんですが、以下でバイナリを実行できるみたいです。バイト列をそのまま関数にしている。
char code[] = "\xe9\xab\x01\..."; int main(){ (*(void (*)())code)(); }
gcc
でコンパイルするときに -z execstack
をつけて DEP を無効にしてあげないと、 code
の内容を実行できなかった(DEPとSSPややこしい)。
Linux x86用のシェルコードを書いてみる - ももいろテクノロジー
これを実行するとシェルがでーんと出てくる。
あとは記事見ながらって感じで、 connect
を syscall
しているところでブレークさせて引数を見るらしいのですが、ブレークポイントの張り方がわからず gdb-peda$ s
を連打して無理やり見ました...
こんなんわからん〜
xxd -p file | tr -d '\n'
でバイナリファイルのhexを1行で出力できるobjdump -b binary -D aaa.bin -m i386(:x86-64) -M intel
でELFじゃないファイルを逆アセンブルできる