The 35-year-old was just three runs away from his ninth Test hundred as he took Pakistan to 146-3 at close on the third day at Sharjah stadium, leading by 74 runs with seven wickets intact.
Nightwatchman Rahat Ali was the other not out batsman on nought as Pakistan lost the key wicket of Younis Khan for 14, trapped leg-before by fast bowler Stuart Broad with just two overs to go in the day.
But Hafeez held the innings together well, smashing nine boundaries and three sixes during his aggressive 155-ball knock as Pakistan seek to avoid squandering a 1-0 lead in the three-match series.
Pakistan won the second Test in Dubai while the first Test ended in a draw in Abu Dhabi.
Earlier, off-spinner Shoaib Malik took a career best 4-33 as England were bowled out for 306 in their first innings, taking a 72-run lead over Pakistan's total of 234.
James Taylor top-scored with 76.
Pakistan were lucky not to lose Hafeez after Australian umpire Bruce Oxenford gave him caught behind off paceman James Anderson in the fifth over of the innings with the score on four.
But Hafeez, then on two, challenged the decision and got away on referral as television replays showed there was a gap between ball and bat, much to the relief of the Pakistan camp.
Pakistan were off to a confident start of 101 -- only their second 50-plus opening stand in Sharjah -- with Hafeez earning the lead by hitting spinner Samit Patel for a boundary and then taking three runs.
He completed his 13th Test half-century with another boundary off Patel and then hoisted James Anderson for a six and boundary to post the 100-mark.
Azhar Ali was unfortunate to be run out for 34, as he drove spinner Adil Rashid to extra cover and saw Hafeez scampering for a single. Ali reacted late and was run out at the non-striker's end.
Malik, who scored a brilliant 245 in the first Test, was caught napping by a sharp inswinger from Anderson which struck him right in front of the wicket, continuing his slide in form.
Earlier, it was Malik's off-breaks which derailed England who lost their last six wickets on either side of lunch.
Rashid helped Patel add an invaluable 40 for the seventh wicket before England lost their last four wickets for 21.
Patel, playing his first Test in three years, hit six well-timed fours to frustrate Pakistan before he was bowled by leg-spinner Yasir Shah who finished with 3-99.
Malik then had the wickets of Anderson (seven) and Ben Stokes (nought) to improve on his previous best of 4-42 he took against South Africa in Lahore in 2003.
Stokes, who suffered a shoulder injury on Sunday, batted at number 11 in an attempt to increase England's lead.
When England resumed, on their overnight score of 222-4, their hopes of a big lead rested on the shoulders of Taylor and Bairstow but Rahat broke through in the fifth over of the day, forcing an edge off Taylor to wicketkeeper Sarfraz Ahmed.
Taylor's 226-minute vigil had six fours and he added 89 for the fifth wicket with Bairstow who also didn't last long.
Left-arm spinner Zulfiqar Babar claimed Bairstow with a sharp delivery which came with the arm as the batsman failed to connect a cut and was bowled.
Pakistan start well after conceding lead
Pakistan started their second innings on a confident note, reaching 58-0 at tea on the third day of the third Test against England in Sharjah on Tuesday.
Openers Mohammad Hafeez (33) and Azhar Ali (24) were at the crease as Pakistan needed another 14 runs to overhaul England's first innings lead of 72 at Sharjah stadium.
Earlier, off-spinner Shoaib Malik took a career best 4-33 as England were bowled out for 306 in their first innings, taking lead over Pakistan's total of 234.
3rd Test: Bowlers helps England dominate Pakistan on day one
Pakistan were lucky not to lose Hafeez after Australian umpire Bruce Oxenford gave him caught behind off pacer James Anderson in the fifth over of the innings with the score on four.
But Hafeez, then on two, challenged the decision and got away on referral as television replays showed there was a gap between ball and bat, much to the relief of the Pakistan camp.
Hafeez has so far hit two sixes and a four in 72 balls.
England, seeking to level the three-match series after losing the second Test in Dubai and drawing the first in Abu Dhabi, lost their last six wickets on either side of lunch.
England's last four wickets fell for 21 runs with Adil Rashid dismissed in the last over before lunch by Malik caught by Ali for eight.
Adil helped Patel add an invaluable 40 for the seventh wicket with Patel.
Patel, playing his first Test in three years, hit six well-timed fours to frustrate Pakistan before he was bowled by leg-spinner Yasir Shah who finished with 3-99.
Malik then had the wickets of Anderson (seven) and Ben Stokes (nought) to improve on his previous best of 4-42 be took against South Africa in Lahore in 2003.
Stokes, who suffered a shoulder injury on Sunday, batted at number eleven in an attempt to increase England's lead.
When England resumed, on their overnight score of 222-4, their hopes of a big lead rested on the shoulders of Taylor and Bairstow but Rahat broke through in the fifth over of the day, forcing an edge off Taylor to wicketkeeper Sarfraz Ahmed.
Taylor's 226-minute vigil had six fours and he added 89 for the fifth wicket with Bairstow who also didn't last long.
Left-arm spinner Zulfiqar Babar had Bairstow with a sharp delivery which came with the arm as the batsman failed to connect a cut and was bowled.
England 285-7, lead by 51 in third Test
England, replying to Pakistan's first innings total of 234, were 285-7 at lunch on the third day of the third and final Test on Tuesday, a lead of 51.
Adil Rashid was dismissed for eight by the last ball before lunch, while Samit Patel was unbeaten on 41.
Taylor's maiden fifty keeps England in hunt
England had started the day on 222-4 at Sharjah stadium.
Pakistan lead the three-match series 1-0 after winning the second Test in Dubai by 178 runs. The first Test in Abu Dhabi ended in a draw.
COMMENTS
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ