Late strikes from Filippo Inzaghi and Andriy Shevchenko helped AC Milan produce a hard fought 3-1 win over Lyon to march on to the UEFA Champions League semi-finals. Inzaghi had put Milan ahead in the 25th minute only to be cancelled out by Malian midfielder Mahmadou Diarra six minutes later. Diarra's goal put Milan on the verge of elimination but a second goal from Inzaghi and a final blow from captain Shevchenko secured passage for the Rossoneri. Milan, who were held to a goalless draw in the first-leg that took place in France, will now take on the winner from Wednesday's quarter-final between Barcelona and Benfica. Lyon failed to grab the lead early in the first-half when Milan keeper Dida made a couple of dreadful errors. The Brazilian keeper failed to connect with an easy pass, tipping the ball to Lyon striker Sylvain Wiltord who blasted the ball wide in the 17th minute. Two minutes later, a loose ball fell into Florin Malouda's path but his chip went over the cross bar. Milan's Dutch defender Jaap Stam limped out of the pitch with a foot injury and was replaced by veteran Italian Alessandro Costacurta.
The home side snatched the opener against the run of the play in the 25th minute through a quick counter attack. Shevchenko released Clarence Seedorf down the left and the Dutch midfielder crossed to Inzaghi who headed home leaving Lyon keeper Gregory Coupet motionless. Milan's lead was short-lived as Brazilian playmaker Juninho combined with Diarra for the equalizer in the 31st minute. Juninho released a trademark free-kick that Dida just had the slightest touch on only for Diarra to head into the back of the net on the rebound. The French champions started the second period in explosive style and rocked Milan on their heels but failed to deliver on several occasions. As the game headed towards a draw that sends Lyon to the last four on the away goal rule, Milan's striking duo were yet to say the final word. In the 87th minute, Shevchenko controlled the ball inside the box and arrowed a low shot past Coupet but his effort deflected off the woodwork twice only for Inzaghi to tap into the back of the net. Sheva put the last pin in Lyon's coffin three minutes into injury time when he capitalized on a defensive blunder to scuff a loose ball, round Coupet and bury the ball home.