Inter gave a few reserve players a run out, as Aleksandar Kolarov and Alexis Sanchez started with Lautaro Martinez on the substitutes' bench, while Zlatan Ibrahimovic started for Milan.
It was Milan who made the promising start after only two minutes as Rafael Leao drilled a low shot from range following good work by Alexis Saelaemaekers wide of target.
Another threat came towards the midway stage when Ibrahimovic's glancing attempt from a cross by Diogo Dalot flew across goal with Brahim Diaz unable to get on the end of the move.
The deadlocked was final broken following the half-hour mark after Ibrahimovic brought down a tee-up from Meite to fire into off the left-hand post.
Inter, who were totally out of it in the first half, brought a fresh pair of legs from the bench in Achraf Hakimi who entered for Matteo Darmian as the second half commenced.
There was a slight glimmer for the Nerazzurri five minutes from resumption through a first-time shot from Sanchez following a short-corner, but Ciprian Tatarusanu saved.
Milan went down to ten players on 58 minutes after Ibrahimovic was sent packing for a second bookable offence following a foul on Kolarov.
The host made use of the numerical advantage inside the final 20 minutes and drew level from the spot through Romelu Lukaku after the Video Assistant Referee (VAR) called a foul on Nicolo Barella.
Inter grabbed the winner at the death when Christian Eriksen send a free-kick over the wall and into the net to give his side a spot in the semi-finals.