Leonardo Ulloa gave the visitors the lead after 13 minutes when he tapped in from close range after a mistake from Brad Guzan, but Villa were soon level as Ciaran Clark headed home Ashley Westwood’s free-kick a few minutes later.
Westwood was carried off on a stretcher before half-time after a challenge from Jamie Vardy but Villa secured victory when Alan Hutton fired a low shot past Kasper Schmeichel in the 71st minute.
Leicester ended the game with 10 men after Paul Konchesky was shown a straight red card following an altercation with Hutton.
The win moves Villa up to 11th in the Premier League table while Leicester remain bottom.
Both sides made two changes from their midweek matches, Charles N’Zogbia and Carlos Sanchez coming in for Villa and Danny Simpson and Liam Moore starting for Leicester.
The Foxes had struggled for goals on their travels this season – scoring just three in their previous seven matches – but they were given a helping hand for the opener by Guzan.
The Villa goalkeeper should have gathered Riyad Mahrez’s low shot in the 13th minute but looked to be wrong-footed and instead could only deflect it out for Ulloa to tap in.
Fortunately for the American it did not take his side long to respond as just four minutes later Westwood curled in a fine free-kick that Clark stooped to head home from eight yards out.
Buoyed by the goal, Villa looked the better side for the rest of the half as they worked the ball around well without creating too many chances.
Guzan was also largely untroubled at the other end but did narrowly avoid conceding a penalty when he came rushing out to try to beat Vardy to a ball over the top and just got there ahead of the forward.
The half ended on a sour note for Villa when Westwood had to be carried off on a stretcher after a tackle from Vardy.
Leicester were also forced into a change at the interval after Ulloa picked up a knock late in the half and was replaced by David Nugent.
Both sides went close during a bright start to the second half as Tom Cleverley and Jeffrey Schlupp failed to hit the target from promising positions.
Christian Benteke then spurned an excellent opportunity to give Villa the lead when he was played in by Kieran Richardso only to be foiled by Schmeichel who came diving out at his feet.
Schmeichel saved from Agbonlahor a few minutes later while at the other end Guzan also had to make a sharp stop to palm Nugent’s dipping half-volley over the bar.
A few minutes later Villa found the winning goal when Agbonlahor broke away down the left and passed inside for Benteke, who clipped a pass over the top for Hutton as he came charging up from right-back.
The defender had not scored for four years but showed good composure to take a touch and volley a low shot past Schmeichel.
It was the first time Villa had scored in the second half since April 5 but their efforts to add to their lead were thwarted by Schmeichel, who saved well from a Benteke header and then kept out another effort from the following corner.
Leicester’s task was made more difficult when Konchesky was shown a straight red card in the 80th minute following a clash with Hutton.
It was unclear whether the defender was dismissed for the challenge or the following altercation with Hutton, but Leicester could not stage a late comeback with 10 men as their run without a victory extended to 10 matches.
Aston Villa: Guzan (5), Hutton (7), Okore (6), Clark (7), Cissokho (6), Cleverley (5), Westwood (6), Sanchez (6), N’Zogbia (6), Benteke (6), Agbonlahor (7).
Subs: Bacuna (5), Richardson (6), Grealish (6).
Leicester City: Schmeichel (7), Simpson (6), Wasilewski (5), Moore (6), Konchesky (4), Mahrez (6), James (6), Cambiasso (5), Schlupp (5), Ulloa (6), Vardy (5).
Subs: Albrighton (5), Nugent (6), Wood (5).
Man of the match: Gabriel Agbonlahor.