web-dev-qa-db-ja.com

クラシックASP偽装| Windows認証|ファイルアクセス拒否IIS 7

Scripting.FileSystemObjectを介してWebサイトのユーザーアクセス(LOGON_USER)アクティビティを単純なtxtファイルに書き込む従来のASP/VBScript Webサイト(ランディングページ-default.asp)があります。

VBScriptは、フォルダ「logs」の下に新しいファイルを開く/作成するためのFSOを作成します

Windows 2008 R2 64ビット環境

IIS 7.5-

  • 認証-Windows認証が有効になっています。他のすべての認証は無効になっています。
  • クラシックパイプラインモードで実行されているAppPool。
  • Trueに設定された32ビットアプリケーションを有効にします。
  • IDはNetworkServiceです。
  • ユーザープロファイルの読み込みをfalseに設定
  • ASP:executeInMtaをfalseに設定

ログフォルダのACL

  • ユーザーグループ-読み取りと実行。
  • システム-フルコントロール(継承);
  • 管理者-フルコントロール(継承);
  • IIS_IUSRS-フルコントロール;
  • ネットワークサービス-フルコントロール。

この設定により、'800A0046 --Permission Denied'。 Windows認証が有効になっていることに注意してください。そして、LOGON_USER値をDBの値にマップして、ユーザーが自分のWebサイトにアクセスできるようにします。 AppPoolはNTAuthority\NetworkServiceに設定されています。アプリプールIDはNetworkServiceに設定されていますが、ユーザーが認証した後、ファイルは認証されたユーザー(偽装)を介してアクセスされます。以下のサンプルプロセスモニターアクティビティ。

プロセスモニターファイルシステムアクティビティ

  • default.asp-必要なアクセス-成功-偽装:ドメイン名\ユーザー名
  • logs\log3011.txt-必要なアクセス-拒否-偽装:ドメイン名\ユーザー名

これで、「logs」フォルダのセキュリティプロパティに移動し、許可されているすべてのユーザーに読み取り/書き込み権限を付与する必要がある状況になります。私が探しているのは、私のアプリプールはNetworkServiceとして実行されるため(logsフォルダーはNetworkServiceのフルコントロールを与えられます)、Windows認証で認証されたユーザーではなくNetworkServiceを介してlogsフォルダーにアクセスすることです。これは、Windows認証を使用した場合に期待される結果であることを理解しています。ただし、ユーザーがWebサイトへのアクセスを許可されているかどうかを確認するためだけに、Windowsの自動化を使用しています。 NT Authority\NetworkServiceを使用するには、他のすべてのWebサイトアクティビティが必要です。 (Classic ASP Windows認証ユーザーになりすますのをやめ、むしろappoolIDを使用する解決策を求めています-私の場合はnetworkservice -リソースにアクセスするには)

頼むには多すぎますか?適切な説明を教えてください。どうも。

3
gmaran23

うん。クラシックASP偽装。ASPに組み込まれているこれを回避する方法がわからない-私が思うように、StackOverflowはこれについてより知識があるかもしれませんそれがプログラミングのトピックであることを示唆します。

必要なモデルは通常、ASP.Netのパターンとプラクティスのドキュメント(数年前から)では「信頼できるサブシステム」モデルと呼ばれています。

以前は、ASP.netページを使用して書き込みを行っていました。これはWinHTTPを介してASPページから呼び出されます。独自のIDが指定されたCOMオブジェクトを使用することもできます。 (簡単に)ページをASP.Netに変換し、それを偽装をオフにして使用することができます。次に、スレッドIDを忘れる「callRevertToSelf()」オプションがあります。これを行うには、COMオブジェクトが必要になる場合があります。スレッドもメモリから。

編集:または、別のIDとして実行されるデータベースを使用します。とても使いやすいので、ファイルシステムの唯一の問題です!

また、すべてのユーザーが同じファイルに書き込む場合、複数のユーザーが同時にアクセスするときに「ログに書き込む」スキームは実行できず、せいぜいそのシナリオで遅延が発生します。

各ユーザーが自分のログに書き込むだけでよい場合(同時実行の問題を回避するために、書き込み中に更新をすぐに実行しないことを希望する場合)、それらのユーザーにそのフォルダーへの書き込みアクセス許可を付与できる場合があります。 Readがなければ、それは少し役に立たない。ボックスを実際に攻撃することなく(Windows統合であるため、イントラネットを使用している)、誤ってユーザー名とDoSをマシンに過剰に入力することは困難です。

2
TristanK

ExecuteinMTAがtrueに設定されていないことを確認します。これは、Webサイトのasp設定で確認します。

1
Jim B