The off-spinner took four wickets as Saurashtra crumbled to 170 all out in their second innings.
Punjab, who were bowled out for 299 in their first innings, ended the day on 45 for two and still need 304 runs to win on the final day with eight wickets in hand.
Punjab, who resumed the day on 294 for nine and added just four more runs before being bowled out.
Saurashtra started their second innings well with openers Shitanshu Kotak (53) and Sagar Jogiyani (29) forging a 50-run stand.
Kotak and Rahul Dave added another 52 runs for the second wicket before it all turned sour for the hosts.
Harbhajan took the all important wicket of Kotak and was ably supported by pacer Siddharth Kaul, who returned with figures of three for 53.
More From This Section
Sheldon Jackson (44 not out) was left stranded as the rest of the team fell like ninepins.
Saurashtra lost eight wickets for just 68 runs giving away any advantage they held in the match.
Bipul Sharma too chipped in with two wickets to add to the woes of the hosts.
Meanwhile, in Delhi, play failed to resume for the second consecutive day between Mumbai and Services as Friday's heavy shower seemed to have taken a toll on the Palam cricket ground.
Despite the sun beating down brightly all day, poor pitch and ground conditions made for another drab day.
Mumbai in their first innings are on 380 for six with the hosts yet to bat in the match.
Brief Scores:
At Rajkot: Saurashtra 477 all out and 170 all out (Shitanshu Kotak 53, Sagar Jogiyani 29, Sheldon Jackson 44; Harbhajan Singh 4/60, Siddharth Kaul 3/53) vs Punjab 299 all out in 110.1 overs (Inder Singh 74, Jiwanjot Singh 68, Taruwar Kohli 59; Vishal Joshi 4/59, Jaydev Unadkat 3/52)
At Delhi: Mumbai 380 for six in 143 overs (Sachin Tendulkar 56, Abhishek Nayar 70, Ajit Agarkar 113 batting, Aditya Tare 108 batting; Suraj Yadav 2/49, Shadab Nazar 2/104) vs Services