The Rossoneri began with intent, scoring twice inside the opening 16 minutes, but they were ultimately indebted to their goalkeeper and good luck for a much-needed win
The Rossoneri made a rip-roaring start to the game, racking up two goals in the space of three first-half minutes through Urby Emanuelson and Stephan El Shaarawy. However, Hulk dragged Zenit back into the game with a fine strike just before the break before then setting up Roman Shirokov for the equaliser early in the second period.
Milan weren't done, though, and they snatched a precious win courtesy of an unfortunate own goal by Tomas Hubocan that consigned Zenit to a first home defeat in Uefa competition since September 2008.
Having netted four times in his previous three games, El Shaarawy seemed certain to lead the Milan attack. However, the in-form forward actually began the match wide on the left-hand side, with Kevin-Prince Boateng taking up a more advanced position in support of Bojan Krkic.
El Shaarawy’s redeployment very nearly reaped dividends just five minutes in, though, the teenager driving infield at the heart of the Zenit defence before slipping the ball off to Bojan. The former Barcelona man produced a sharp turn and well-struck low drive towards the bottom left corner of Vyacheslav Malakeev’s goal, but the former Russia international was equal to it – and even managed to prevent an offside El Shaarawy from pouncing on the rebound.
As it was, it took an element of fortune for Milan to break the deadlock 13 minutes in, with Malakeev unable to change direction quick enough to keep out an Emanuelson free kick that had taken a wicked deflection off Shirokov.
What followed just moments later, though, bore the hallmarks of greatness, El Shaarawy picking the ball up some 35 yards from goal before gliding past Viktor Fayzulin, then flicked the ball around the outside of Nicolas Lombaerts before finishing with the confidence of a player who is in the form of his young life.
Zenit’s players were visibly stunned by the concession of two goals in quick succession and it took them some time to regain their composure. However, after spending the first half hour on his backside, appealing for nonexistent free kicks, Hulk gradually began to prove his significant worth to the home side’s cause.
The Brazil international produced two wonderful deliveries towards the tail end of the half, both of which resulted in Abbiati being called into action, with the first cross taking a nick off Riccardo Montlivo and the second very nearly redirected into the bottom corner by Roman Shirokov.
Hulk also twice stung the hands of the Rossoneri keeper with well-struck the drives - the second of which was a free kick - before he deservedly halved the hosts’ deficit right on the stroke of half-time, driving the ball home left-footed after being slipped in on goal by Shirokov.
That goal came in injury time at the end of an absorbing opening period, and Zenit were level within four minutes of the restart, Shirokov making amends for his part in Emanuelson’s goal by popping up unmarked at the far post to head home Hulk’s corner from the right-hand side.
The momentum was now very much with the Russians but Milan really should have reclaimed the lead six minutes later but Boateng headed wide from some eight yards out, after stretching to get his head on the end of Ignazio Abate’s cross.
Buoyed by that near-miss, Milan continued to press and they sneaked back in front when Hubocan, under pressure from Giampaolo Pazzini, made a mess of a cross from Montolivo and put through his own net.
Zenit came storming back and the Rossoneri were indebted to Abbiati for keeping out a terrific volley from Aleksandr Anyukov right at the death.
The victory ensures they will now go into their crunch double-header header with Malaga with confidence renewed. Their Russian rivals, by contrast, are now facing elimination ahead of their meetings with Anderlecht after back-to-back defeats.