Penny earned his 120th career win as the Marlins were able to manufacture several runs early.
Christian Yelich opened the game with a double, and after a Donovan Solano sacrifice bunt, scored first against Alfredo Simon on a Giancarlo Stanton sacrifice fly.
Jay Bruce tied the game in the bottom of the first with a home run to right field, but after Jarrod Saltalamacchia and Adeiny Hechavarria walked and singled respectively in the second, Yelich hit a ground ball to shortstop to give the Marlins a one run lead.
Todd Frazier tied the game with a single against Penny, but Marcell Ozuna threw Jay Bruce out at home plate to keep it a 2-2 contest.
Over his five innings, Penny walked four and struck out three.
Sam LeCure walked Saltalamacchia and allowed a single to Hechavarria before, following a Jordany Valdespin sacrifice bunt, Yelich added another RBI with a sacrifice fly and Solano doubled to right center field.
A.J. Ramos pitched a pair of scoreless innings in relief, and Bryan Morris allowed a run in the eighth before Steve Cishek picked Chris Heisey off first base with nobody out and saved the second game in as many nights.
After dropping consecutive series against the Reds and Pirates, the Marlins will go for the sweep on Sunday afternoon.
Hero of The Game: Steve Cishek (+.176 WPA)
Goat of The Game: Marcell Ozuna (-.164 WPA)
Play of The Game: Donovan Solano doubled in the sixth, allowing Adeiny Hechavarria to score. (+.124 WPA)