Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: el_doctor en 13 Octubre 2015, 06:50 am



Título: Login automático autenticación fba
Publicado por: el_doctor en 13 Octubre 2015, 06:50 am
¿Es posible autenticarse de forma automática en un sitio que usa autenticación basada en formularios? Poder enviar mediante un post un usuario y contraseña un membership ya configurado en la base de datos y que estén estáticos en el web.config del sitio externo para ingresar.


Título: Re: Login automático autenticación fba
Publicado por: el_doctor en 16 Octubre 2015, 17:16 pm
Hola haciendo un poco de investigación encontré una posible solución haciendo un post con httpWebRequest; actualmente puedo hacer un post al sitio externo desde mi sitio enviando el post con los mismos valores que el sito externo los envía esto verificándolo con tamper de firefox; y me retorna el contenido html de la página html que muestra después de logearse; pero lo que quiero es validar la autenticación en el navegador por lo que necesito la cookie que entrega el host cuando uno se logea desde el navegador; pero no logro obtenerla; si alguien puede ayudarme se los agradezco. Dejo el código que tengo hasta el momento:

Código
  1. string url = ConfigurationManager.AppSettings.Get("url");
  2.  
  3.            CookieContainer myCookie = new CookieContainer();
  4.  
  5.            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  6.  
  7.            request.CookieContainer = myCookie;
  8.            request.Method = "GET";
  9.            request.KeepAlive = false;
  10.  
  11.            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  12.  
  13.            Stream responseStream = response.GetResponseStream();
  14.  
  15.            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
  16.  
  17.            string src = reader.ReadToEnd();
  18.  
  19.            //Get ViewState
  20.            string VSFlag = "id=\"__VIEWSTATE\" value=\"";
  21.  
  22.            int i = src.IndexOf(VSFlag) + VSFlag.Length;
  23.            int j = src.IndexOf("\"", i);
  24.  
  25.            string viewState = src.Substring(i, j - i);
  26.  
  27.            //Get ViewStateGenerator
  28.            string VSGenF = "id=\"__VIEWSTATEGENERATOR\" value=\"";
  29.  
  30.            i = src.IndexOf(VSGenF) + VSGenF.Length;
  31.            j = src.IndexOf("\"", i);
  32.  
  33.            string viewStateGenerator = src.Substring(i, j - i);
  34.  
  35.            //Event Validation
  36.            string eventValidationF = "id=\"__EVENTVALIDATION\" value=\"";
  37.            i = src.IndexOf(eventValidationF) + eventValidationF.Length;
  38.            j = src.IndexOf("\"", i);
  39.  
  40.            string eventValidation = src.Substring(i, j - i);
  41.  
  42.            string submit = "Sign In";
  43.            string user = ConfigurationManager.AppSettings.Get("user");
  44.            string password = ConfigurationManager.AppSettings.Get("pass");
  45.  
  46.            viewState = HttpUtility.UrlEncode(viewState);
  47.            eventValidation = HttpUtility.UrlEncode(eventValidation);
  48.            viewStateGenerator = HttpUtility.UrlEncode(viewStateGenerator);
  49.            submit = HttpUtility.UrlEncode(submit);
  50.            user = HttpUtility.UrlEncode(user);
  51.            password = HttpUtility.UrlEncode(password);
  52.  
  53.            string strPost = "POSTDATA=__LASTFOCUS=&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}"
  54.                + "&__VIEWSTATEGENERATOR={1}&__EVENTVALIDATION={2}&ctl00%24PlaceHolderMain%24signInControl%24UserName={3}"
  55.                + "&ctl00%24PlaceHolderMain%24signInControl%24password={4}&ctl00%24PlaceHolderMain%24signInControl%24login={5}";
  56.  
  57.            string postStr = string.Format(strPost, viewState, viewStateGenerator, eventValidation, user, password, submit);
  58.  
  59.            byte[] postData = Encoding.ASCII.GetBytes(postStr);
  60.  
  61.            request = WebRequest.Create(url) as HttpWebRequest;
  62.            request.Method = "POST";
  63.            request.Referer = url;
  64.            request.KeepAlive = true;
  65.            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0";
  66.            request.ContentType = "application/x-www-form-urlencoded";
  67.            request.CookieContainer = myCookie;
  68.  
  69.  
  70.  
  71.            Cookie ck = new Cookie("SworkCookie", string.Empty);
  72.  
  73.            ck.Domain = request.RequestUri.Host;
  74.  
  75.            request.CookieContainer.Add(ck);
  76.            request.CookieContainer.Add(response.Cookies);
  77.  
  78.            request.CookieContainer = myCookie;
  79.            request.ContentLength = postData.Length;
  80.  
  81.            //------------
  82.  
  83.  
  84.            //submit
  85.            Stream outputStream = request.GetRequestStream();
  86.            outputStream.Write(postData, 0, postData.Length);
  87.            outputStream.Close();
  88.  
  89.            //accept
  90.            response = request.GetResponse() as HttpWebResponse;          
  91.  
  92.  
  93.            responseStream = response.GetResponseStream();
  94.            reader = new StreamReader(responseStream, Encoding.UTF8);
  95.  
  96.            string srcString = reader.ReadToEnd();


Título: Re: Login automático autenticación fba
Publicado por: OscarCadenas_91 en 24 Octubre 2015, 07:54 am
Hola, si dices que encontraste la posible solucion entonces solo tienes que encontrar  el lugar donde entrega las cookies
la propiedad httpresponse.cookies: https://msdn.microsoft.com/es-es/library/system.net.httpwebresponse.cookies%28v=vs.110%29.aspx
  proporciona una instancia de la CookieCollection clase que contiene las cookies asociadas a esta respuesta.

Supongo que si despues de hacer la peticion para iniciar sesion en el response te mandara las cookies de inicio de sesion.
Solo tendrias que crear una funcion para Iniciar Sesion  y que el tipo de retorno sea CookieCollection
No se si estoy en lo correcto, pero es lo unico que se me ocurre.

con relacion a codigo no te puedo ayudar ya que aun no se mucho.