web-dev-qa-db-ja.com

strstrとfopen、バイパスはありますか?

これを行うバイナリがあります:

if (strstr(USERCONTROLLERSTRING, "..")) exit;
fopen(CurrentPath+"\\Data\\"+USERCONTROLLEDSTRING, "r");

次に、ファイルのすべてのコンテンツを吐き出します。ここに明らかな脆弱性はありますか?

そのWindowsサービスであり、システムとして実行されます。SAMなどの機密ファイルやその他の脆弱性を読み取らせようとしています。

".."のみをチェックし、ユーザーが指定した任意の文字列をCURRENTPATH+"\\Data\\"に追加してから、fopenを呼び出します。

追伸エンコード、Unicode、base64、%-codingなどは、すべてのデコード後にstrstrを呼び出す直前にfopenを実行するため機能しません。しかし、それだけです。他のチェックは行われません。

P.P.S.そのWindows EXE

4
JohnDoes

Windowsのドキュメントには、特にUnicodeの正規化を含む セキュリティの考慮事項:国際的な機能 に関するセクションが含まれています。

あなたの質問に答える:真空で、ユーザーがプログラムを介して以外にシステムにアクセスできないと仮定すると、コードは問題ありません。
つまり、攻撃者がシンボリックリンクやディレクトリジャンクションの作成などの特定の機能にアクセスできる場合、セキュリティチェックを回避できる可能性があります。他の場所を指す\Dataディレクトリ内にディレクトリジャンクションを作成し、代わりにジャンクションを介してファイルにアクセスする必要があります。

さらに、CurrentPathとしてラベル付けした変数を攻撃者が制御できる可能性があることに注意してください。 Windowsでは、実行可能ファイルが存在するディレクトリでなくても、指定された作業ディレクトリでプログラムを実行できます。ディレクトリジャンクションと組み合わせると、攻撃者がディレクトリジャンクションを作成できる場所が存在する場合、攻撃者はプログラムを悪用する可能性があります。

最後に、NTFSにはかなりの niche features があることに注意してください。その上、Windowsは複数のファイルとディレクトリ 命名スキーム をサポートしています。これらのいずれかがこの状況で直接悪用可能かどうかはわかりませんが、覚えておく価値はあります。

1
Mr. Llama