これを行うバイナリがあります:
if (strstr(USERCONTROLLERSTRING, "..")) exit;
fopen(CurrentPath+"\\Data\\"+USERCONTROLLEDSTRING, "r");
次に、ファイルのすべてのコンテンツを吐き出します。ここに明らかな脆弱性はありますか?
そのWindowsサービスであり、システムとして実行されます。SAMなどの機密ファイルやその他の脆弱性を読み取らせようとしています。
".."
のみをチェックし、ユーザーが指定した任意の文字列をCURRENTPATH+"\\Data\\"
に追加してから、fopen
を呼び出します。
追伸エンコード、Unicode、base64、%-codingなどは、すべてのデコード後にstrstr
を呼び出す直前にfopen
を実行するため機能しません。しかし、それだけです。他のチェックは行われません。
P.P.S.そのWindows EXE
Windowsのドキュメントには、特にUnicodeの正規化を含む セキュリティの考慮事項:国際的な機能 に関するセクションが含まれています。
あなたの質問に答える:真空で、ユーザーがプログラムを介して以外にシステムにアクセスできないと仮定すると、コードは問題ありません。
つまり、攻撃者がシンボリックリンクやディレクトリジャンクションの作成などの特定の機能にアクセスできる場合、セキュリティチェックを回避できる可能性があります。他の場所を指す\Data
ディレクトリ内にディレクトリジャンクションを作成し、代わりにジャンクションを介してファイルにアクセスする必要があります。
さらに、CurrentPath
としてラベル付けした変数を攻撃者が制御できる可能性があることに注意してください。 Windowsでは、実行可能ファイルが存在するディレクトリがでなくても、指定された作業ディレクトリでプログラムを実行できます。ディレクトリジャンクションと組み合わせると、攻撃者がディレクトリジャンクションを作成できる場所が存在する場合、攻撃者はプログラムを悪用する可能性があります。
最後に、NTFSにはかなりの niche features があることに注意してください。その上、Windowsは複数のファイルとディレクトリ 命名スキーム をサポートしています。これらのいずれかがこの状況で直接悪用可能かどうかはわかりませんが、覚えておく価値はあります。