Jaap Stam scored his first goal for AC Milan and Andriy Shevchenko netted on his return to the side to give them a Champions League edge over Inter Milan.
Stam rose highest to head home Andrea Pirlo's right-wing free-kick to put Milan ahead on the stroke of half-time.
Milan's opener came against the run of play after Inter had dominated, with Dida brilliantly denying Sinisa Mihajlovic, Juan Veron and Julio Cruz.
Shevchenko got Milan's second, glancing in Pirlo's free-kick from close range.
Inter were made to pay for failing to capitalise on their first-half dominance and face an uphill task to recover the quarter-final tie.
Despite AC Milan having the upper hand over Inter in the Italian league, it was Roberto Mancini's men who started the better against their bitter city rivals.
Inter were shorn of the services of regular strikeforce Adriano and Christian Vieri.
But Mancini surprised everyone by directly replacing them with Julio Cruz and Obafemi Martins and opting to go on the attack.
And his decision paid dividends as Inter dominated the opening period with home side Milan struggling to deal with their rivals.
Young Nigerian striker Martins caused the Milan defence all kinds of problems with his pace.
Milan goalkeeper Dida had to make a series of fine saves first to tip away Mihajlovic's rasping free-kick and then to block Veron's well-struck effort from the edge of the area.
As well as being on the back foot for most of the half, Milan were dealt a blow when Gennaro Gattuso was booked for a deliberate handball, with the caution ruling him out of the second leg.
Cruz proved a thorn in the side and almost gave Inter the lead just before half-time with a fierce shot that Dida did well to divert.
But Cruz turned villain moments later when he committed a needless foul in the middle of his own half, allowing Pirlo to whip in a free-kick for Stam to glance home.
Shevchenko celebrates his goal for AC Milan
It was a cruel blow for Inter, who were in the ascendancy until conceding the goal.
Milan made the most of their one-goal cushion and were much more controlled in the second half.
Shevchenko just failed to reach Kaka's cross to add to Milan's advantage, but the Ukrainian striker eventually got his reward.
Mihajlovic recklessly brought him down near the corner flag and Pirlo delivered another perfect cross for Shevchenko to head home with Inter's defence nowhere to be seen.
The striker was booked for taking his shirt off after scoring, but that could not dampen Shevchenko's or Milan's spirits as they took a massive step towards the Champions League semi-finals.
AC Milan coach Carlo Ancelotti:
"It's certainly a good advantage to have, but it won't be easy as Inter are still alive.
"They have showed they can cause us plenty of problems. We will approach the second leg as if it were still 0-0 and try to build on this result.
"We won't think about the semi-finals until we actually go there."
Inter Milan coach Roberto Mancini:
"Milan weren't two goals better than us because the game was pretty even.
"In the first half we were caught out in stoppage time, but before that Dida kept them in it.
"Now we have to concentrate on the second leg. We haven't given up and we will have to play a great match."
AC Milan: Dida, Cafu (Costacurta 90), Maldini, Shevchenko, Gattuso, Crespo (Ambrosini 83), Nesta (Kaladze 71), Seedorf, Pirlo, Kaka, Stam.
Subs Not Used: Abbiati, Rui Costa, Tomasson, Serginho.
Booked: Gattuso, Stam, Shevchenko.
Goals: Stam 45, Shevchenko 74.
Inter Milan: Toldo, Cordoba, Javier Zanetti, Cristiano Zanetti (Van der Meyde 80), Cruz (Vieri 55), Mihajlovic, Veron (Karagounis 70), Favalli, Cambiasso, Stankovic, Martins.
Subs Not Used: Fontana, Ze Maria, Gonzalez, Materazzi.
Booked: Mihajlovic, Cristiano Zanetti.
Ref: Alain Sars (France).