2010-02-25 24 views
9

Hãy tưởng tượng tôi có một quy trình hiện có đang chạy dưới cửa sổ với tư cách người dùng cụ thể. Nó sẽ được cho phép cho quá trình đó để có token hiện tại của nó (với một cái gì đó như OpenThreadToken và DuplicateTokenEx), vượt qua nó đến một quá trình trên cùng một máy (có lẽ thông qua một ổ cắm mạng hoặc một số IPC khác), và sau đó hy vọng rằng quá trình để có thể sử dụng nó để gọi CreateProcessAsUser?Đang chuyển mã bảo vệ cửa sổ giữa các quá trình được phép

Từ tài liệu tôi đã đọc (http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx), tôi đã thấy không có gì cấm điều này nhưng có lẽ mã thông báo chỉ có thể được sử dụng bởi luồng hoặc quy trình tạo ra nó. Tôi muốn có một yêu cầu web đến IIS, được xác thực, có IIS sắp xếp sự mạo danh của người dùng từ xa và sau đó chuyển mã thông báo mạo danh đến một quy trình máy chủ khác (trên cùng một máy) sao cho quy trình máy chủ có thể thực hiện một số kiểm tra bảo mật trong ngữ cảnh của người dùng từ xa)

Trả lời

8

Có, điều đó là có thể. Bạn có thể sử dụng DuplicateHandle để có được một xử lý hợp lệ cho quá trình đích (gửi giá trị xử lý mới cho quá trình đích, vì vậy nó biết nó.). Tuy nhiên, quá trình đích vẫn phải có các đặc quyền để sử dụng mã thông báo tương ứng. Ví dụ. SE_IMPERSONATE để mạo danh người dùng và SE_ASSIGN_PRIMARY để được CPAU sử dụng. Tất nhiên có một số ngoại lệ mà bạn có thể đọc trong MSDN cho ImpersonateLoggedOnUser và CPAU.

5

Tôi chưa thử, nhưng có vẻ như đây là cùng một câu hỏi asked here. Mô tả có vẻ hợp lý. Chuyển ID quá trình qua bất kỳ cơ chế nào bạn chọn (ví dụ: IPC), sau đó gọi OpenProcess, OpenProcessToken và cuối cùng là ImpersonateLoggedOnUser. Việc xử lý kết quả có thể được chuyển đến CreateProcessAsUser. Vâng ... Tôi biết nó có thể được chuyển cho chức năng đó nhưng liệu nó có kết quả mong muốn mà tôi không biết. Câu hỏi thú vị, mặc dù.

+0

Cảm ơn bạn đã liên kết - rất hữu ích –

4

Tại sao không chỉ sử dụng các đường ống có tên, và sau đó gọi ImpersonateNamedPipeUser() - nó an toàn và bảo mật và dễ dàng! Lưu ý rằng quá trình thực hiện mạo danh PHẢI có đặc quyền Mạo danh.

+0

oops- làm cho ImpersonateNamedPipeClient() :) –

+0

Ý tưởng thú vị, nhưng tôi không thực sự chắc chắn cách sắp xếp nó trong trường hợp của tôi (máy chủ ở Java, và tôi dự định gọi CreateProcessAsUser thông qua JNI khi tắt một tiến trình con cần thực hiện một số kiểm tra bảo mật). Tôi sẽ xem xét nó một chút mặc dù, cảm ơn. –

Các vấn đề liên quan