問題
解いてみた
ソースとプログラムをリンクからダウンロードします。
ソースを開いてみます。
結構短めのソースです。
文字を入力してそれを出力してます。
最後のやつはなんでしょう。
((void (*)())buf)();
サーバを見てみます。
サーバを確認するとflag.txtがあるので、実行ファイルからflag.txtを呼び出す問題のようです。
ではさっきの謎の処理を調べてみます。
(*(void (*)())shellcode) - Qiita
(*(void(*)()) shellcode) - Electric Sheep and Androids
上記2サイト読めば一応理解できました。
とりあえず入力した文字列がここで実行されるということです。
ということは、flag.txtを表示すればいいので
cat flag.txt
と入力すれば良いのでしょうか。
やってみます。
大事なところは「Segmentation fault (core dumped)」になってしまっています。
やはりshellcodeを書く必要がありそうです。
書けません。
とりあえず流れとしては以下
vulnを実行
↓
/bin/shを実行するshellcodeを入力
↓
cat flag.txtでフラグを表示させる
/bin/shを実行するshellcodeが書けないので探します。
ヒントにもshellcode探しましょうのようなことが書かれてますね。
「shellcode」で検索していると検索サイトのようなものを見つけた。
Shellcodes Database - shell-storm
種類がたくさんありすぎてどれを採用すればよいのかわからないので、ひとまず環境を確認する。
Ubuntuの64bitのようです。
これでしょうか?
strに書かれている長い文字を放り込めばよさそうです。
Segmentation faultですね。
調べてみると
echo -e "xxx" | ./aaa
という形ではなく
(echo -e "xxx";cat) | ./aaa
という形にしないと入力を待ち受けてくれないそうです。
ということでこれでやり直し。
入力は待ち受けるようになったので進めた感はありますが、結果は同じSegmentation faultです。
ということはshellcodeが違うということです。
ふと思ったのがOSは64bitということで64bitのshellcode使用していたけど、そうじゃなくてソフトが何bitかということが大事なんじゃないかと思いました。
普段Linuxあまり使用しませんが、Windowsが64bitだとしてもソフトは32bitでも64bitどちらでも基本的には実行できますし。
ということでソフトが何bitか調べる必要があります。
fileコマンドを実行してみると32bitだということがわかりました。
なので32bitのshellcodeを探します。
これですかね。
できましたー。