この記事では、サイトの25番目のタスクを解決します
組織情報特に、情報とコンピュータ セキュリティのあらゆる分野で何か新しいことを学び、発展させたいと考えている人のために、次のカテゴリについて書き、話します。
- PWN;
- 暗号化 (クリプト);
- ネットワーク技術 (ネットワーク);
- リバース (リバースエンジニアリング);
- ステガノグラフィー (ステガノ);
- WEB の脆弱性の検索と悪用。
これに加えて、コンピューターフォレンジック、マルウェアとファームウェアの分析、ワイヤレスネットワークとローカルエリアネットワークへの攻撃、ペネトレーションテストの実施、エクスプロイトの作成における私の経験を共有します。
新しい記事、ソフトウェア、その他の情報を知ることができるように、
すべての情報は教育目的のみに提供されます。 この文書の作成者は、この文書を学習した結果得られた知識や方法を使用した結果、誰かに生じた損害については一切の責任を負いません。
OTP タスクの解決
XNUMX 番目のセクションに進みましょう。 最初のものよりも複雑であることはすぐに言いますが、今回はプログラムのソースコードは提供されていません。 ここ (https://t.me/RalfHackerPublicChat) とここ (https://t.me/RalfHackerChannel) での議論を忘れないでください。 さぁ、始めよう。
OTP の署名が付いたアイコンをクリックします。 接続するアドレスとポートが与えられます。
接続してサーバーを見回します。
私たちが読めないフラグ、プログラムとそのソースコード。 ソースを見てみましょう。
整理してみましょう。 プログラムはパスワードを引数として受け取ります。
次に、ランダムな 16 バイトが otp 変数に格納されます。
ランダムな名前のファイルが tmp フォルダーに作成され (最初の 8 バイトは otp)、ランダムな 8 バイトがそのファイルに書き込まれます (8 番目の XNUMX バイトは otp)。
何らかの理由で、作成されたファイルの値が読み取られ、入力されたパスワードと比較されます。
ここで脆弱性が発生します。 これは、生成された番号をファイルに中間的に保存することで構成されます。 たとえば、ファイル サイズを 0 に制限すると、書き込みおよび読み取り時に 0 がパスワードと比較されます。これは次のように実行できます。
# ulimit -f 0
それでは、プログラムを実行してみましょう。
エラーが発生します。 問題ありません。同じ Python を使用して処理できます。
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')"
旗を獲得し、簡単に 100 点を獲得しました。 そして続きます。次の記事では Web について触れます。 から参加できます
出所: habr.com