Obter senha através do NTLM

3 respostas
mcsous

Gostaria de saber como faço para obter a senha do usuário logado, hoje eu uso ntlm para isto, mas estou pegando apenas o nome de usuário, domínio..

<%@ page language="java" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title></title>
</head>
<body bgcolor="#FFFFFF">

<%
String auth = request.getHeader("Authorization");
if (auth == null)
{
  response.setStatus(response.SC_UNAUTHORIZED);
  response.setHeader("WWW-Authenticate", "NTLM");
  response.flushBuffer();
  return;
}
if (auth.startsWith("NTLM "))
{
  byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
  int off = 0, length, offset;
  if (msg[8] == 1)
  {
    byte z = 0;
    byte[] msg1 = {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S', (byte)'S', (byte)'P', 
      z,(byte)2, z, z, z, z, z, z, z,(byte)40, z, z, z, 
      (byte)1, (byte)130, z, z,z, (byte)2, (byte)2,
      (byte)2, z, z, z, z, z, z, z, z, z, z, z, z};
    response.setHeader("WWW-Authenticate", "NTLM " + 
       new sun.misc.BASE64Encoder().encodeBuffer(msg1));
    response.sendError(response.SC_UNAUTHORIZED);
    return;
  }
  else if (msg[8] == 3)
  {
    off = 30;

    length = msg[off+17]*256 + msg[off+16];
    offset = msg[off+19]*256 + msg[off+18];
    String remoteHost = new String(msg, offset, length);

    length = msg[off+1]*256 + msg[off];
    offset = msg[off+3]*256 + msg[off+2];
    String domain = new String(msg, offset, length);

    length = msg[off+9]*256 + msg[off+8];
    offset = msg[off+11]*256 + msg[off+10];
    String username = new String(msg, offset, length);

    out.println("Username:"  +username+"<BR>");
    out.println("RemoteHost:"+remoteHost+"<BR>");
    out.println("Domain:"    +domain+"<BR>");
  }
}
%>

</body>
</html>

alguém pode dar uma mãozinha?

:idea:

3 Respostas

T

Por que você quer a senha?
Se você estudou a definição do protocolo NTLM, não há como obter a senha.

http://curl.haxx.se/rfc/ntlm.html

NTLM employs a challenge-response mechanism for authentication, in which clients are able to prove their identities without sending a password to the server.

mcsous

Preciso da senha para fazer a autenticação do usuário no AD. Porque seu eu não tiver a senha, usuários tem a chance de usar a senha de outra pessoa…

T

Se você estivesse usando o IIS seria relativamente transparente.
Mas como você está fazendo isso em Java já não sei exatamente qual é o método para se autenticar no AD a partir de uma aplicação Web - não sei se é possível transportar essa autenticação NTLM para o AD. Questão de perguntar no fórum de segurança do http://forum.java.sun.com.

http://forum.java.sun.com/forum.jspa?forumID=60

Mas não se esqueça: você não vai conseguir a senha de jeito nenhum, pela própria definição do protocolo NTLM. Existe alguma maneira, mas não com senha.

Criado 17 de abril de 2006
Ultima resposta 17 de abr. de 2006
Respostas 3
Participantes 2