Middlesbrough kept their Sky Bet Championship play-off hopes alive by beating Stoke 3-0 at the Riverside Stadium.
Hall's opener in the 21st minute arrived out of the blue and from there the hosts never looked back, with McNair adding a second five minutes before half-time.
Substitute Nathaniel Mendez-Laing wrapped things up with the third with two minutes left.
The defeat was Stoke's fourth in five matches and left them five points behind ninth-placed Middlesbrough, who remain eight points off Barnsley in sixth.
Middlesbrough's poor recent home form encouraged Stoke to start on the front foot and Jacob Brown was inches away from putting the visitors in front when his cross hit a post 22 seconds in.
Stoke kept pressing and were clearly intent on establishing an early advantage, but Michael O'Neill's side were unable to turn their possession into a goal.
The only other opportunity they created came when full-back Tommy Smith cut inside Neeskens Kebano and sent a curling effort wide of the near post.
Five minutes later Middlesbrough, whose decision to change formation and switch McNair from defence to midfield paid off, went ahead against the run of play from the first serious threat on Angus Gunn's goal.
That came 10 minutes after Kebano had brushed the side-netting with a shot at the other end and, after he had flashed another effort wide, McNair added Boro's second in style.
Yannick Bolasie played him in down the left and McNair took a touch before opening up his body and rolling a finish inside the far post.
Middlesbrough almost had a third just before the hour mark when Bolasie's headed flick invited Gunn to race out of his area to clear. The ball ended up at the feet of McNair and his strike brushed the side-netting rather than drop into the empty goal.
And with two minutes to go Boro put the game to bed as Mendez-Laing, seven minutes after coming on, ran on to Sam Morsy's through-ball and chipped Gunn to score.