2010-05-19 5 views
1

J'ai un problème avec mon site ASP.NET, il a été piraté. Un pirate a trouvé un bogue dans mon système de connexion et il peut se connecter avec tous les comptes qu'il souhaite, même si le compte est un utilisateur normal, un modérateur ou un administrateur. Il peut supprimer tout ce qu'il veut.ASP.NET site piraté -> problème de connexion

S'il vous plaît quelqu'un peut me aider, dites-moi s'il y a une fonction vulnérable ou quelque chose

post-scriptum Je ne suis pas moi-même un programmeur ASP.NET, je ne connais que PHP, alors s'il vous plaît dites-moi exactement ce que j'ai besoin d'éditer dans le code, parce que je ne connais pas ASP.NET du tout.

ThanksAS

public void loginButton_Click(object sender, EventArgs e) 
{ 
    string username = nicknameTextBox.Text; 
    string password = passwordTextBox.Text; 

    string returnUrl = Request.QueryString["returnUrl"]; 
    if (returnUrl == null) returnUrl = Convert.ToBase64String(Encoding.ASCII.GetBytes(Request.Url.ToString())); 

    string message = CurrentPlayer.LoginRequest(username, password, returnUrl); 

    if(message != null) 
     Response.Redirect("AccountLogin.aspx?returnUrl=" + returnUrl); 
} 

LoginRequest:

public static string LoginRequest(string username, string password, string returnUrl) 
{ 
    Player player = null; 
    string message = InputValidator.CheckLoginRequest(username, password, out player); 
    if (message != null) return message; 

    message = LoginCookie.CheckLoginRequest(player); 
    if (message != null) return message; 

    SessionPlayer sessionPlayer = new SessionPlayer(
      player.ID, player.ActivationGuid, (PlayerRole)player.IdRole, 
      player.Nickname, player.CreationDate);   
    SessionMessages sessionMessages = new SessionMessages(player.ID); 
    SessionOwnedCounts ownedCounts = new SessionOwnedCounts(player.ID); 
    SessionGuestCounts guestCounts = new SessionGuestCounts(player.ID); 
    SessionMatchCounts matchCounts = new SessionMatchCounts(player.ID); 

    CurrentPlayer.Login(sessionPlayer, sessionMessages, ownedCounts, guestCounts, matchCounts); 
    Player.UpdateLastLogin(player.ID); 

    returnUrl = Encoding.ASCII.GetString(Convert.FromBase64String(returnUrl)); 
    HttpContext.Current.Response.Redirect(returnUrl); 

    return null; 
}[/code] 

Login:

 private static void Login(SessionPlayer player, SessionMessages messages, SessionOwnedCounts ownedCounts, SessionGuestCounts guestCounts, SessionMatchCounts matchCounts) 
{ 
    HttpContext.Current.Session["player"] = player; 
    HttpContext.Current.Session["messages"] = messages; 
    HttpContext.Current.Session["ownedCounts"] = ownedCounts; 
    HttpContext.Current.Session["guestCounts"] = guestCounts; 
    HttpContext.Current.Session["matchCounts"] = matchCounts; 
    if (LoginCookie.Exists() == false) 
     LoginCookie.AddForFirstTime(player.Nickname, player.Guid); 
    else 
     LoginCookie.SetToLoginAction(); 
} 

Et checkloginrequest:

public static string CheckLoginRequest(string username, string password, out Player player) 
{ 
    player = null; 

    object lastLoginTryDateObj = HttpContext.Current.Session["lastLoginTryDate"]; 
    if (lastLoginTryDateObj == null) 
    { 
     HttpContext.Current.Session["lastLoginTryDate"] = DateTime.Now; 
     HttpContext.Current.Session["lastLoginTryCount"] = 1; 
    } 
    else 
    { 
     DateTime lastLoginTryDate = (DateTime)HttpContext.Current.Session["lastLoginTryDate"]; 
     int lastLoginTryCount = (int)HttpContext.Current.Session["lastLoginTryCount"]; 
     TimeSpan ts = DateTime.Now - lastLoginTryDate; 
     if (ts.TotalSeconds < 60) 
     { 
      if (lastLoginTryCount >= Settings.AllowedLoginTriesPerMinute) 
      { 
       return "Ai depasit numarul maxim de incercari pe minut .<br/>Vino inapoi dupa " + (60 - (int)ts.TotalSeconds).ToString() + " secunde."; 
      } 
      else 
      { 
       HttpContext.Current.Session["lastLoginTryCount"] = lastLoginTryCount + 1; 
      } 
     } 
     else 
     { 
      HttpContext.Current.Session["lastLoginTryDate"] = DateTime.Now; 
      HttpContext.Current.Session["lastLoginTryCount"] = 1; 
     } 
    } 

    player = Player.GetPlayer(username, password); 
    if (player == null) 
    { 
     return "Usernameul si parola nu se potrivesc."; 
    } 
    if (player != null && player.IsActive == false) 
    { 
     return "Contul a fost creat dar nu e activat.<br/> Verifica mailul " + player.Email + " si activeaza-ti contul."; 
    } 

    PlayerSuspended ps = BLL.PlayerSuspended.SuspendedGet(player.ID); 
    if (ps != null) 
    { 
     return "Contul tau e suspendat pana in data de " + ps.SuspendedEndDate.ToString("dd-MM-yyyy") + ".<br/>Motivul: " + ps.SuspendedReason; 
    } 

    return null; 
} 

GetPlayer:

 public static Player GetPlayer(string nickname, string password) 
    { 
     Player player = null; 
     object[] values = DAL.Player.GetPlayer(nickname, password); 

     if (values != null) 
     { 
      player = new Player(); 
      player.SetFromValues(values); 
     } 

     return player; 
    } 

DAL.Player.GetPlayer:

public static object[] GetPlayer(string nickname, string password) 
    { 
     password = Convert.ToBase64String(Encoding.ASCII.GetBytes(password)); 

     List<SqlParameter> sqlParams = new List<SqlParameter>(); 
     sqlParams.Add(new SqlParameter("@Nickname", nickname)); 
     sqlParams.Add(new SqlParameter("@Password", password)); 

     return DataBase.GetFirstRow("[spPlayer.Get]", sqlParams); 
    } 
+0

Comment vos pages individuelles sont-elles sécurisées? Comment vérifiez-vous sur les pages si un utilisateur peut les voir? Si vous n'avez pas de sécurité, un simple appui sur une page permettrait à un utilisateur d'accéder à votre application. – Pbirkoff

+2

J'espère que password = Convert.ToBase64String (Encoding.ASCII.GetBytes (mot de passe)) 'ne signifie pas que vous pensez que vos mots de passe sont stockés en toute sécurité –

+0

Oui, je sais qu'ils ne sont pas sûrs, mais je ne comprends pas comment il peut se connecter avec n'importe quel compte, il veut – FinalDestiny

Répondre

2

Votre site est vulnérable aux session fixation

Pourquoi n'êtes-vous pas utiliser l'authentification des formulaires asp.net et l'adhésion?

Questions connexes