Lake finished 3-for-6 with a three-run homer and a pair of doubles, while Bonifacio posted four hits for Chicago, which pounded out 20 hits to snap a three-game losing skid.
Mike Olt hit a two-run shot and scored twice, while Travis Wood (3-4) allowed five runs -- four earned -- on five hits and three walks over six frames in the triumph.
Tyler Lyons (0-3) gave up nine runs on nine hits and a walk over four innings for St. Louis, which has dropped three of its last four games.
The Cubs raced out to a 7-0 lead after plating four runs in the first and three more in the second.
Bonifacio led off the game with a double, advanced to third on Lake's groundout and scored on a passed ball. Anthony Rizzo reached with a single and came home on Starlin Castro's triple down the right-field line. Olt then sent an opposite-field drive into the seats in right for a 4-0 Cubs advantage.
In the second, Wood and Bonifacio tallied base hits before Lake crushed a three-run shot to left for a 7-0 spread.
The Cardinals got a pair of runs back in the home half on Mark Ellis' two-out, two-run single, but Chicago answered back with two more in the fourth.
Darwin Barney began the inning with a single and Bonifacio worked a one-out walk before Lake doubled into right-center to plate Barney. Bonifacio scored when Rizzo reached on a fielder's choice to make it 9-2.
St. Louis pushed across a trio of runs in the fifth before Chicago countered with two in the top of the sixth.
Greg Garcia and Jhonny Peralta were each hit by a pitch around a Matt Carpenter fly out and Garcia scored on Matt Holliday's double into right. Allen Craig's RBI groundout brought home Peralta and Yadier Molina's base hit plated Holliday.
Rizzo's sacrifice fly and Castro's RBI double in the sixth made it 11-5.
Chicago added six runs in the ninth. Lake had a two-run double, Nate Schierholtz tallied a sacrifice fly, Rizzo posted an RBI groundout and Barney and Castro each added an RBI single.