Aston Martin's Fernando Alonso climbed to fifth after a fantastic tussle with Mercedes driver Lewis Hamilton.