Home goalkeeper Carl Ikeme's handling error gifted Maikel Kieftenbeld the opener, before David Davis curled in the Blues' second before half-time.
Nouha Dicko's first league goal since 2015 gave Wolves hope after Blues' Paul Robinson was shown a straight red card.
But the visitors survived late pressure to grab a morale-boosting victory.
Victory ended Birmingham's three-match losing run and delivered Zola a second win from his 15 games in charge, while Wolves slipped to 20th in the table following Burton's draw with Blackburn.
The opener came when Kieftenbeld was in the right place to pounce as Ikeme spilled Craig Gardner's right-wing cross, sliding in to net his first goal of the season.
Former Wolves midfielder Davis' finish for Birmingham's second required far more technical skill, as he curled the ball in first time from the edge of the area as Che Adams' ball was deflected into his path.
Those were the only two shots on target in a first half which saw Wolves twice miss headed chances from set-pieces, but the hosts applied significant pressure after the break.
Robinson was dismissed after he was deemed to have swung an arm at Jon Dadi Bodvarsson, and Dicko - who had not netted in the league since the final day of the 2014-15 campaign - swept in Helder Costa's low cross to halve the deficit.
Wolves went close through Matt Doherty and Birmingham were grateful to substitute Krystian Bielik for two last-ditch challenges in the closing stages.
Wolves boss Paul Lambert: "We know that we are in a fight. You have to realise what you are involved in. We can't keep dominating games and come away with nothing. That has to stop.
"We are a really talented group when we are on song. Sometimes when you go through these things it makes you stronger.
"I think you have to be streetwise. It is not an individual blame game, we win together and lose together. You have to do the right things and we will come through it.
"We are above the line and everyone thinks you are okay. But we are not okay. You have to eat, sleep and drink it to make sure you are never in this position again."
Birmingham manager Gianfranco Zola: "I am delighted because of the win and the performance. We have had tough times. In the second half we played very well. We looked like we were stronger.
"The sending-off could have killed a lot of teams but we showed a lot of character.
"The players are relieved, happy and excited because we have been through a lot of suffering in the last few weeks. It is not easy to pick the players up when there are so many bad results.
"This is a break that they deserve as they work very hard and believe in what we are doing. No-one can question the attitude and the passion that everyone has at this club and we will work even harder as we want this to be the beginning of things."
Match ends, Wolverhampton Wanderers 1, Birmingham City 2.
Second Half ends, Wolverhampton Wanderers 1, Birmingham City 2.
Attempt missed. Danny Batth (Wolverhampton Wanderers) header from the centre of the box misses to the left. Assisted by Hélder Costa with a cross following a corner.
Corner,  Wolverhampton Wanderers. Conceded by Cheick Keita.
Delay over. They are ready to continue.
Delay in match Krystian Bielik (Birmingham City) because of an injury.
Attempt missed. Matt Doherty (Wolverhampton Wanderers) header from the centre of the box is just a bit too high. Assisted by Conor Coady with a cross.
Attempt blocked. Danny Batth (Wolverhampton Wanderers) header from the centre of the box is blocked. Assisted by Jack Price.
David Edwards (Wolverhampton Wanderers) wins a free kick in the attacking half.
Foul by Maikel Kieftenbeld (Birmingham City).
Attempt blocked. Matt Doherty (Wolverhampton Wanderers) right footed shot from the centre of the box is blocked. Assisted by Conor Coady.
Corner,  Wolverhampton Wanderers. Conceded by Josh Cogley.
Tomasz Kuszczak (Birmingham City) is shown the yellow card.
Foul by Hélder Costa (Wolverhampton Wanderers).
David Davis (Birmingham City) wins a free kick in the defensive half.
Attempt blocked. David Edwards (Wolverhampton Wanderers) right footed shot from the centre of the box is blocked.
Nouha Dicko (Wolverhampton Wanderers) wins a free kick in the defensive half.
Foul by Maikel Kieftenbeld (Birmingham City).
Attempt missed. Matt Doherty (Wolverhampton Wanderers) header from the centre of the box is close, but misses to the left. Assisted by Jack Price with a cross following a set piece situation.
Hélder Costa (Wolverhampton Wanderers) wins a free kick on the left wing.
Foul by David Davis (Birmingham City).
Offside, Wolverhampton Wanderers. Danny Batth tries a through ball, but Richard Stearman is caught offside.
Attempt missed. Danny Batth (Wolverhampton Wanderers) header from the centre of the box misses to the right. Assisted by Jack Price with a cross following a corner.
Corner,  Wolverhampton Wanderers. Conceded by Tomasz Kuszczak.
Attempt missed. Nouha Dicko (Wolverhampton Wanderers) header from very close range misses to the left. Assisted by Hélder Costa with a cross following a set piece situation.
Greg Stewart (Birmingham City) is shown the yellow card for a bad foul.
Hélder Costa (Wolverhampton Wanderers) wins a free kick on the right wing.
Foul by Greg Stewart (Birmingham City).
Corner,  Wolverhampton Wanderers. Conceded by Cheick Keita.
Substitution, Birmingham City. Greg Stewart replaces Nsue.
Conor Coady (Wolverhampton Wanderers) is shown the yellow card.
Attempt missed. David Edwards (Wolverhampton Wanderers) right footed shot from the centre of the box is close, but misses to the right. Assisted by Conor Coady with a cross.
Attempt blocked. Richard Stearman (Wolverhampton Wanderers) right footed shot from outside the box is blocked.
Goal!  Wolverhampton Wanderers 1, Birmingham City 2. Nouha Dicko (Wolverhampton Wanderers) right footed shot from very close range to the centre of the goal. Assisted by Hélder Costa with a cross.
Foul by Danny Batth (Wolverhampton Wanderers).
Che Adams (Birmingham City) wins a free kick on the left wing.
Foul by Conor Coady (Wolverhampton Wanderers).
Cheick Keita (Birmingham City) wins a free kick in the defensive half.
Foul by Danny Batth (Wolverhampton Wanderers).
Ryan Shotton (Birmingham City) wins a free kick in the defensive half.
Ten-man Birmingham City earned their first away win under Gianfranco Zola as they inflicted a fourth straight league defeat on local rivals Wolves.