Chicago scored the go-ahead run in the seventh inning, which began on Wellington Castillo's bloop single to right that fell among three players.
After consecutive flyouts to left, the Cubs turned to pinch-hitter Julio Borbon. The Marlins countered with Mike Dunn in relief of starter Alex Sanabia.
Dunn walked Borbon and fell behind 2-1 to David DeJesus before surrendering a single up the middle that drove in Castillo.
"The team battled the whole game and my job was to go in there and get two lefties in a row," said Dunn, who entered the game holding southpaws to a .217 average. "It's on me. The team's battling to the last out of every game. It was on my shoulders tonight and I didn't get the job done."
Miami -- 2-7 in one-run games this season -- couldn't tie it in the bottom of the inning after the first two batters reached against right-hander Kameron Loe. Justin Ruggiano walked and Joe Mahoney singled to left, but Miguel Olivo grounded into a double play and Chris Valaika flied out to right.
In the eighth, Marlins pinch-hitter Juan Pierre reached on an infield hit before Donovan Solano and Placido Polanco flied out against left-hander James Russell. After right-hander Carlos Marmol walked Giancarlo Stanton, Starlin Castro made a diving play on Austin Kearns' hard grounder up the middle, tossing to Darwin Barney at second for the force on a close play.
Stellar defensive play by the Cubs prevented damage earlier in the game.
Alfonso Soriano robbed Kearns of extra bases with a leaping catch at the wall in left-center in the fourth. Nate Schierholtz made a diving grab of Stanton's liner in the sixth.
"The defense played unbelievable," Cubs manager Dale Sveum said. "This is the big leagues. Big plays in big situations. They're what you need all the time in close, one-run ballgames. ... We had a couple of them tonight, and that was the difference -- great plays."
The Cubs took a 1-0 lead in the first on a Sanabia wild pitch that Olivo lost track of behind the plate.
DeJesus opened the game with a double to right. As a sprinting Stanton tried to cut the ball off, his foot accidentally kicked it and it rolled to the wall, advancing DeJesus to third. Sanabia's wild pitch to Castro skipped behind Olivo, permitting DeJesus to score.
Stanton answered with his first long ball of the season -- a two-out solo blast in the first on a 3-1 pitch by left-hander Travis Wood -- that hit off the sliding glass panels in left field above the scoreboard.
The 472-foot homer -- a Miami player's Marlins Park record -- and came in Stanton's 75th plate appearance of the season. In 2012, Stanton began the year with 19 homerless games before connecting on his 67th plate appearance.
Over his past six games, Stanton is 7-for-24 (.292) with a double, five RBIs and two multi-hit games.
"It's always good, but [we] still lost," Stanton said of ending the long-ball drought. "That was pretty good. Here I've hit a few of those foul -- the same type of ones -- so [it's] finally good to get it on the right side of the pole."
Chicago regained the lead in the second when Schierholtz led off with a double to left. Following Castillo's flyout to center, Luis Valbuena produced an RBI single up the middle.
Olivo's full-count, two-out solo shot to left -- his second of the year -- knotted the score at 2 in the bottom half of the inning.
It marked Miami's first multi-homer game of the season. Six Major League players entered Saturday with more home runs than the Marlins as a team.
The starters tossed three consecutive scoreless innings after the second. Sanabia, who took the loss after pitching 6 2/3 innings, dropped back-to-back games for the first time in his career. Former Marlins closer Kevin Gregg pitched a perfect ninth for his third save of the season.
"I feel like I'm saying the same thing every single night -- I really am," Miami manager Mike Redmond said. "We're right there, we're just waiting on that big hit. [Castro] makes a heck of a play on [Kearns] and that's kind of the way it's been all year for us.
"Hopefully we can get on the other end of it. Those are the breaks you get when you're going good, and when you're not, you don't get those calls."