Luis Valbuena smacked a two-run shot and crossed the plate three times for the Cubs, who handed the Cardinals their fourth straight loss.
Kevin Siegrist (1-2) gave up the tie-breaking two-run homer to Valbuena in the seventh and was tagged with the loss.
Justin Grimm (3-2) struck out two in a scoreless seventh inning to earn the win.
Cardinals starter Joe Kelly only lasted 4 2/3 innings, allowing eight hits and five runs, but added a run of support for the Cardinals with home run in the fourth.
Chicago starter Travis Wood, who hasn't recorded a win since June 15, allowed seven hits and five runs -- two earned -- in five innings of work, but ended his personal three-game losing streak.