Garcia stepped in as a pinch hitter and was hit in the elbow on the fourth pitch of the at-bat to give the rookie his first career RBI.
"We had some big hits," said Cardinals manager Mike Matheny. "Right now we're focused on a win that aren't easy to come by nowadays."
Seth Maness (1-2) earned the win for pitching a scoreless 12th inning for the Cardinals, who have won two of three.
Cardinals starter Adam Wainwright was charged with two runs on seven hits with four strikeouts over six innings.
Peralta, Matt Adams and Matt Carpenter each drove in a run for St. Louis.
Luis Valbuena homered and drove in two for the Cubs, who scored a Major League season-high 17 runs on Monday night in the series opener.
Chicago starter Jake Arrieta was pulled after four innings, allowing one run on four hits with five strikeouts. The right-hander walked five batters and threw 82 pitches.
Valbuena opened the scoring in the third with a two-run shot to right field that plated Arrieta.
Adams cut the deficit in half with an RBI single in the home half, and St. Louis moved in front with a two-run sixth.
Peter Bourjos reached on a bunt single and moved over to second on a Mark Ellis groundout. As Jon Jay walked, Bourjos stole third to put runners at the corners with one out. Carpenter then reached on a throwing error by Starlin Castro that could have possibly been an inning-ending double play ball, and the Cards tied the game at 2-2.
Peralta followed with a single to left that plated Jay to help the hosts to a 3-2 edge.
Matt Holliday and Craig each grounded out to end the frame.
Following a strikeout by Chris Coghlan, Bonifacio looped a single into right that plated Lake. Valbuena popped out in foul territory to end the inning.