Kiwis captain McCullum blasted 195 on the opening day in Christchurch, including a fastest hundred in New Zealand history (74 balls), before his team checked out on 441 all out.
Tourists Sri Lanka quickly collapsed to 138 all out themselves and were forced to bat again in the day.
They fared better second time around, reaching 84 with loss at the close, but remain 219 behind with three days to go.
Dimuth Karunaratne was the first man to go just four balls in for a duck, getting trapped playing across the line by Trent Boult (3-25).
Kaushal Silva was quickly back in the hutch with his opening partner, going in the same way to the same man for four.
Kumar Sangakkara was unable to hang around and make things better, caught at third slip for six off Boult to leave his side 15 for three.
Lahiru Thirimanne at least added some runs before he went, making 24 before Tim Southee had him caught at second slip, while Niroshan Dickwella made only two before holing out.
Prasanna Jayawardene got to 10 but hit Neil Wagner to gully, before skipper Angelo Mathews – the only man with credit as he got to 50 – hit Wagner to third man where he was taken.
After that it was over quickly enough, with Tharindu Kaushal (six), Dhammika Prasad (18) and Suranga Lakmal (two) unable to make a better fist of it.
Karunaratne at least made 49 and Kaushal Silva 33 in an unbeaten second knock after New Zealand opted not to bat again immediately, but plenty of work remains to be done.
The Black Caps added only 15 to their overnight score but lost three wickets, Mathews and Lakmal (two) taking the trio cheaply.
New Zealand seamer Trent Boult said: ???To get through Sri Lanka for 138 and force them to follow on was good. The ball came out of the hand pretty nicely, there was a bit of swing and it seamed around a bit as well. Those are the conditions you dream of. To get a couple more wickets would have been nice but the boys bowled tremendously well. We’re in a brilliant position but there are still three big days to go.???