2008-09-22 52 views

Trả lời

28

Mật khẩu: Không, điều này không được lưu giữ vì lý do bảo mật - nó được sử dụng, sau đó bị loại bỏ. Bạn có thể lấy lại mật khẩu được mã hóa cho người dùng này từ sổ đăng ký, với đầy đủ các đặc quyền, sau đó giải mã nó bằng cách sử dụng một cái gì đó như rainbow tables, nhưng đó là rất tốn thời gian và tốn thời gian sử dụng các phương pháp hiện tại. Tốt hơn nhiều để nhắc người dùng.

Hoặc, nếu bạn muốn thực hiện một số loại hệ thống 'đăng nhập đơn' như Novell, bạn nên thực hiện qua GINA (trước Vista) hoặc Nhà cung cấp thông tin xác thực (Vista), điều này sẽ dẫn đến mã của bạn được cung cấp tên người dùng và mật khẩu khi đăng nhập, lần duy nhất có mật khẩu.

Đối với tên người dùng, hãy nhập tên người dùng hiện tại (người đang chạy mã của bạn) thật dễ dàng: chức năng GetUserName trong AdvApi32.dll thực hiện chính xác điều này cho bạn.

Nếu bạn đang chạy dưới dạng dịch vụ, bạn cần nhớ không có "người dùng đã đăng nhập": có một số bất kỳ lúc nào, chẳng hạn như LocalSystem, NetworkService, SYSTEM và các tài khoản khác, ngoài bất kỳ thực tế nào những người. This article provides some sample code and documentation để làm điều đó.

+0

Cảm ơn bạn - Tôi không muốn crack mật khẩu, tôi chỉ muốn lưu người dùng một bước, nhưng vì không có cách "tốt" để làm điều đó, tôi sẽ chỉ nhắc người dùng cho nó. – dennisV

3

Tôi coi đó là lỗ hổng bảo mật rất lớn nếu có thể!

+1

Vâng, đó là những gì tôi đang suy nghĩ là tốt, nhưng muốn kiểm tra lại rằng tôi đã không bỏ lỡ bất cứ điều gì ... – dennisV

2

GetUserName sẽ đưa bạn tên, nhưng mật khẩu bạn không thể nhận được. Nó thậm chí không phải là một cái gì đó Windows cửa hàng, AFAIK - chỉ có một băm mật khẩu của bạn.

Tùy thuộc vào những gì bạn đang cố gắng đạt được (bạn có thể cho chúng tôi biết thêm một chút ..) có thể mạo danh người dùng đã đăng nhập và thực hiện thay mặt họ.

+0

Cảm ơn - đó là những gì tôi nghĩ. – dennisV

4

Bạn không thể lấy mật khẩu của người dùng kể từ khi được mã hóa (không kể rằng thực hành tiêu chuẩn của nó không lưu trữ mật khẩu trong văn bản thuần túy).

Để nhận được tên người dùng, bạn có thể sử dụng GetUserName hoặc NPGetUser

0

Bạn có thể có được tên người dùng với GetUserName(), nhưng bạn không thể có được mật khẩu; điều này sẽ vi phạm bảo mật cho người giả mạo 101.

+0

Cảm ơn - sẽ phải nhắc người dùng tôi đoán. – dennisV

0

lại "Network Password Recovery" công cụ
Windows (tối đa XP) lưu một bản sao của passwd với một dễ dàng đơn giản hơn để phá vỡ mã hóa - để kết nối với các cổ phiếu mạng lanmanager kiểu cũ hơn. Các công cụ chung thử tất cả các mật khẩu có thể chống lại điều này, bằng cách sử dụng các bảng cầu vồng (phiên bản được mã hóa trước của từ điển) tăng tốc độ này lên.

Trong XPsp2/3 Vista tính năng này bị xóa. Mã hóa mới khó crack hơn nhiều và cần nhiều giờ để thử tất cả các giá trị có thể có, có những dịch vụ trực tuyến sẽ chạy nó trên một số lượng lớn máy để cung cấp cho bạn câu trả lời nhanh cho một mức giá.

Để trả lời áp phích gốc - bạn thường không lưu trữ mật khẩu và so sánh nó với những gì người dùng nhập. Bạn mã hóa (thực sự băm) mật khẩu đã nhập và lưu trữ. Để kiểm tra mật khẩu, bạn thực hiện cùng một mã hóa trên bất kỳ thứ gì người dùng đã enetered và so sánh điều đó. Nó thường không thể đi từ các hình thức mã hóa trở lại mật khẩu thực sự.

EDIT Tôi nghi ngờ bạn đang đặt câu hỏi sai ở đây - tại sao bạn muốn mật khẩu, bạn đang cố gắng xác minh và khi nào?

+0

Vâng, tôi hiểu. Đó là an toàn hơn để nhắc người dùng, chỉ là một chút "bất thường", như tôi đã không nhìn thấy quá nhiều ứng dụng mà làm điều đó. – dennisV

+0

Tôi không muốn xác minh mật khẩu, tôi thực sự muốn đặt cài đặt dịch vụ để đăng nhập với tư cách người dùng và tôi cần tên người dùng và mật khẩu. Tôi nghĩ rằng tôi có thể tiết kiệm cho người dùng một số rắc rối nếu tôi có thể nhận được thông tin đó tự động, nhưng tôi không thể, do đó, sẽ phải có một số GUI để yêu cầu nó. – dennisV

+0

@dennisV bạn có tìm thấy giải pháp nào cho việc này không? – lucacerone

2

Đối với nhiều bình luận người tin rằng nó không thể để lộ mật khẩu của người sử dụng hiện đang đăng nhập, xem Dump cleartext passwords of logged in user(s) trong đó cho thấy làm thế nào để sử dụng mimikatz để làm điều đó:

mimikatz # privilege::debug 
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK 

mimikatz # sekurlsa::logonPasswords full 
... 
Utilisateur principal  : user 
Domaine d'authentification : domain 
     kerberos : 
     * Utilisateur : user 
     * Domaine  : domain 
     * Mot de passe : pass 
1

tôi không biết về mật khẩu đăng nhập cửa sổ ... nhưng bạn chắc chắn có thể lấy mật khẩu thô từ Trình quản lý thông tin xác thực. Ví dụ ở đây là một chương trình để lấy mật khẩu cho TFS. Trong hầu hết các trường hợp, điều này giống với Đăng nhập Windows.

namespace ShowPassword 
{ 
    using Microsoft.TeamFoundation.Client; 
    using System; 
    using System.Net; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var tpc = new TfsTeamProjectCollection(new Uri("http://mycompany.com/tfs")); 
      var nc = tpc.Credentials as NetworkCredential; 
      Console.WriteLine("the password is " + nc.Password); 
     } 
    } 
} 

Tôi đã biên soạn ứng dụng này dưới dạng "giao diện điều khiển" trong năm 2015 với gói Nuget TeamFoundation ExtendedClient.

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