New Zealand started the session on 54-3 following a difficult morning in Auckland for the hosts, who took advantage of the better conditions after the lunch interval as the ball started to do less for the Indian seamers.
However, it could have got worse before getting better for New Zealand but Murali Vijay dropped a routine catch to give Williamson a second life.
India struggled to build pressure as a result of the lack of movement and Williamson looked relaxed at the crease as he reached his 50 with a six over fine-leg off Zaheer Khan's bowling.
Black Caps captain McCullum quickly joined his partner in passing 50 from just 85 balls despite showing signs of an injury in the second half of the session.
Williamson (79*) and McCullum (71*) will both be targeting centuries in the final session of the day.