Imperious victory for Vettel at Monza
The Red Bull driver extended his lead at the top of the World Championship to 112 points with Fernando Alonso - who completed the podium for home team Ferrari having snatched that early lead - moving second ahead of Mark Webber, who crashed out in the sister RB7.
Button joins Webber on 167 points - only five behind Alonso - but has won two races while the Australian is yet to win this year, so the Briton is third in the standings.
With Vettel suffering from wheelspin on the line and forced to defend from Hamilton, Alonso executed a brave move using the grass to make it through for the lead.
There was carnage behind the front few cars into turns one and two as Vitantonio Liuzzi slid sideways down the grass at the side of the track and entered the corner as the pack snaked through, taking out Vitaly Petrov and Nico Rosberg. The three cars were retired with the safety car out, while Rubens Barrichello, also involved, managed to pit for a new front wing.
At the restart Hamilton was caught napping by Schumacher. The duo would battle for third over the next 13 laps - until the opening round of pitstops - with the seven-times champion retaking third at the Curve Grande when Hamilton's DRS found a route past at one point.
Schumacher's blocking of the McLaren on the straights was brutal, at one stage putting Hamilton's right wheels on to the grass and forcing him to pull out of what would have been a successful manoeuvre. Button used that opportunity to take the place from his team-mate and soon after passed Schumacher, who came into the pits on the next lap.
Webber had made it past Button for sixth soon after the restart, but lost his front wing trying to put a move on Massa and a few corners later drove off helplessly at Parabolica to end his afternoon.
While Massa dropped to 10th because of the incident despite not suffering any damage, at the front Vettel made it past Alonso to disappoint the Tifosi hordes who had celebrated the dramatic opening to the race. The German pulled away gradually from there and was over 14 seconds clear towards the end of the race before a cautious end saw him win by 9.5s.
To his frustration, Hamilton emerged from the first round of stops behind both Button and Schumacher. Again he took the battle to the German, but Schumacher remained ahead as he seemed to flout the 'one move' rule - which states a driver can move across to defend only once between corners - on several occasions.
Hamilton complained over the radio and ultimately the German had to leave him room to pass with the FIA watching Schumacher's tactics closely.
Ahead of that fight Button had closed on Alonso but the Spaniard held second position with a gutsy drive until the second round of pitstops. Button came in a lap earlier than Alonso and, despite the Ferrari rejoining ahead of him, was able to use his slightly warmer tyres to overtake.
Hamilton was seven seconds behind Alonso and closing but only caught him on the final lap and so never had the chance to put a move on his former team-mate.
Only 15 drivers finished the race, with eight retiring and Daniel Ricciardo not even getting off the line after stalling.