Birmingham produced a dramatic comeback to earn a point and deny local rivals Aston Villa a fifth successive victory.
Villa went in front through Darius Vassell's fourth goal in as many games after he had been set up by his team-mate Gareth Barry.
Vassell missed several chances to extend their lead before Thomas Hitzlsperger's fierce shot made it 2-0.
But Clinton Morrison set up Mikael Forssell to ensure a tense finale and in the 94th minute Stern John pounced.
Villa did most of the early running and carved out enough chances to have put the game beyond Steve Bruce's side.
Inside 10 minutes they had hit the woodwork after Blues defender Darren Purse inadvertently deflected a Nolberto Solano free-kick off his own post.
The ball fell into the path of Vassell whose low shot skidded just past the post.
Hitzlsperger then went close with a shot from outside the box that flashed just past the post.
Birmingham's early chances were restricted to a Christophe Dugarry header from a Robbie Savage corner that went over the bar.
Villa went into the game without a Premiership goal against Blues.
But that all changed after 21 minutes when Damien Johnson allowed Barry to turn and he set up Vassell who made no mistake from three yards out.
Birmingham seemed somewhat shell-shocked at the goal and Barry again found room down the left.
He picked out Juan Pablo Angel but from the corner of the box he fired at Maik Taylor who gathered at the second attempt.
Solano and Lee Hendrie combined to set up Vassell but with acres of space he should have tested Taylor more.
21 mins: Vassell puts Villa in front
47 mins: Hitzlsperger fires in the second for Villa
60 mins: Forssell grabs a goal back for Blues
90 mins: John pounces from two yards to earn a point
The lively Vassell was handed two good chances to double Villa's lead towards the end of the first half.
Angel found him completely unmarked but he opted to shoot first time and Taylor saved comfortably.
Moments later the England international was left totally unmarked but he seemed more concerned at looking for an offside flag and produced a weak header.
Birmingham's task got even harder two minutes after the break when Villa extended their advantage.
Vassell was again involved as he cut in from the right, but when he lost possession the ball fell in the path of Hitzlsperger and he drove a fierce shot that gave a diving Taylor no chance.
Villa had further chances to put the game beyond their rivals with Angel given time and space to pick his spot, but he failed to seriously test Taylor.
Birmingham grabbed a goal back completely against the run of play.
Savage rolled the ball into Morrison who showed good strength to hold off Dion Dublin and lay it off for strike partner Forssell to sidefoot past Thomas Sorensen on the edge of the box.
Vassell should have immediately restored the two-goal advantage but when he got behind the Birmingham defence he attempted a spectacular volley that finished over the bar.
Villa were rattled and Forssell took advantage of some slack defending to cut inside and flash a shot that Sorensen did well to hold onto.
Birmingham had turned the game on its head and Sorensen again did well to block an attempt from Morrison.
But with Birmingham pouring forward Jlloyd Samuel set up an unmarked Angel, who side-footed wide.
It looked all over for Birmingham until Morrison's shot was saved by Sorensen and the ball fell kindly to John to tap home from two yards in the fourth minute of injury time.
Aston Villa: Sorensen, De la Cruz, Mellberg, Johnsen (Dublin 52), Samuel, Hendrie (Luke Moore 81), Solano, Hitzlsperger, Barry (Whittingham 56), Vassell, Angel.
Subs Not Used: Postma, Crouch.
Birmingham: Maik Taylor, Tebily, Cunningham, Purse, Kenna (John 83), Johnson, Clemence (Morrison 55), Savage, Hughes, Dugarry (Dunn 55), Forssell.
Subs Not Used: Bennett, Martin Taylor.
Referee: J Winter (Cleveland).