Miguel Ángel Guerrero had opened the scoring for the visitors against the run of play in the 14th minute, but his header was cancelled out by substitute Patrick Cutrone, who headed home for the Rossoneri with 20 minutes to go.
Check out our breakdown of the game below.
Key Talking Point
Milan started well and would have gone in front in the fifth minute when Suso's cross was headed goalwards by Giacomo Bonaventura, but Samu Castillejo needlessly helped the ball on its way from an offside position and the goal was chalked off.
The Spaniard's decision to get involved in that move proved costly for the Italians, as their Greek counterparts went in front nine minutes later and Castillejo was subsequently substituted in the second-half for Cutrone, who headed home the leveller from Ricardo Rodríguez's pin-point cross.
Higuaín returned to the starting line-up tonight after a two match absence and despite showing earlier signs of lacking match-fitness, the Argentine latched onto substitute Hakan
Gattuso's alterations paid off and two of his substitutes combined to make it three when Cutrone tapped-in from
Starting XI: Reina (6); Calabria (6), Zapata (6), Romagnoli (6), Rodríguez (6); Biglia (6), Bakayoko (6), Bonaventura (6); Suso (7), Higuaín (7), Castillejo (4)
Substitutes: Borini (N/A), Cutrone (8),
Cutrone came off the bench and scored two great goals to change the complexion of the game. His movement off the ball was pivotal for the leveller, he did well to stay onside and guide his header into the far-corner past José Sá. He also showed good instincts to read exactly where fellow substitute
Castillejo bizarrely took Bonaventura's would-be goal away from him and in doing so, was caught offside. It was a selfish thing to do and it initially proved costly as his side fell behind soon after.
Castillejo seemed to lose confidence after that moment, squandering opportunities and dribbling into cul-de-sacs. He didn't get a chance to properly redeem himself in the second-half, as he was replaced by match-winner Cutrone eight minutes into the restart.
Key Talking Point
The Piraeus outfit didn't see too much of the ball and didn't create many opportunities after scoring. They were susceptible to Milan on the counter-attack - which ultimately came to fruition and they couldn't recover from three goals in the space of nine second-half minutes.
Starting XI: Sá (6); Torosidis (6), Miranda (6), Cissé (5), Koutris (7); Natcho (7), Guilherme (6), Fetfatzidis (6), Touré (6), Nahuel (6); Guerrero (7)
Koutris was a real threat in attack for the visitors. He was assured tonight and contributed to Guerrero's opener by sending a terrific cross for the Spaniard to head home and nearly repeated the feat in the second-half, only for the striker to head wide.
Pape Abou Cissé had a disappointing game. He looked nervous on the ball in the first-half and didn't improve in the second. The defender's
Next up, Milan host bottom-placed Chievo, who are in search of their first league victory of the season, ahead of the Derby della Madonnina against city rivals Inter, which follows the international break.
Meanwhile, Olympiacos travel to third-placed AEK Athens in the hope of bouncing back from their 1-0 defeat against PAOK.