私はペンテストを実行していて、内部マシンから攻撃者マシンにインタラクティブなリバースシェルを取得しようとしてスタックするのを練習しています。
これは私がこれまでに行ったことです:
私(攻撃者):67.67.67.67(一部のパブリックIP)
Webアプリ(犠牲者):68.68.68.68(一部のパブリックIP)
内部マシン(Webサーバー):10.1.1.80
Webサーバー情報:
68.68.68.68のWebアプリケーションにSQLインジェクションの脆弱性が見つかり、sqlosに--os-Shellオプションを付けて使用したところ、Apacheユーザーとしてこのアプリケーションを介してWebシェルを取得できました。次に、「ifconfig」コマンドを実行して、内部IP 10.1.1.80を取得しました。
私の目標はインタラクティブシェルを取得することです。そのため、リバースシェルを使用して、内部ネットワークから外部の攻撃マシンにトンネルを張ろうとしました。私が実行している問題はファイアウォールだと思います。
これは私が知っていることです(ウェブシェルを使用して):
ファイアウォールルールを表示できません
Webシェルを介してファイルをアップロードできますが、Webシェルを介して内部マシンから直接HTTP/HTTPSをダウンロードまたは使用できないため、httpリバースシェルが機能しません。
また、DNSも許可されていないと思わせるような出力を提供しないWebシェルを介して「Host google.com> /tmp/output.txt」を実行しようとしました。
私はまた、リバースシェルを多数の人気のあるポートでリッスンしてみたので、ファイアウォールが詳細なパケット検査を行っていると思われるため、これらのポートでトンネリングすることはできません。
うまくいったことの1つは、内部のマシンからWebshellを介して公開攻撃者のマシンにpingを送信できたことで、ICMPを使用してリバースシェルをトンネルできると思います。 「icmpsh」というツールを見つけましたが、残念ながら、犠牲PCで動作するクライアントはWindows版Cのみで書かれています。私は内部のlinuxボックスでこれを行うには「ワイン」を使用すると思いましたが、インターネットからプログラムをインストールできず、webshellを介してワインをアップロードすると、多くの依存関係エラーが発生しました。したがって、私の次の計画は、純粋なpythonで独自のICMPリバースシェルを記述することでしたが、SOCK_RAWを使用するにはSudoが必要です。
私の質問は、ICMPがリバースシェルをトンネルする方法であると思いますか、それとも、使用またはテストできる別のプロトコルがあるのですか?たぶん私がアップロードできるワインまたは同等のポータブルバージョンがあるのでしょうか?
PS:これは練習用なので、達成できるように設定されています
問題は解決しました。
TL; DR:TCP 53は着信/発信トラフィックで利用可能でした
ファイアウォール経由で許可されているプロトコルを確認するとき、「Host google.com」と「Host -T google.com」と「Dig @ 8.8.8.8 google.com」を使用してDNSを確認していましたこれはDNSが許可されていないことを意味すると私は思いました。数日後にマシンに戻った後、攻撃マシンに「nc -nvlp port#」をセットアップし、複数のポートを使用して犠牲マシンから接続しようとすることにしました。長い間、ポート53経由で接続できました。そこでペイロードをセットアップし、シェルを取得して、特権を昇格させました。
したがって、私が学んだ教訓は、単一のツールまたは方法からの結果に依存しないことでした。複数の方法を試してください。
余談ですが、53でトラフィックを受け入れても、「Dig」コマンドと「Host」コマンドが機能しない理由を誰かが理解していれば、それはすばらしいことです。特にDNSではなく、53を超えるトラフィックを許可したと思いますか?
提案をありがとう