The game was scoreless through two periods before the Penguins finally broke through 3:52 into the final period.
On the play, Evegni Malkin skated around the perimeter of the Anaheim zone and fed a pass into the slot, where Gibbons sent a wrist shot past Viktor Fasth.
Gibbons assisted on Brandon Sutter's goal 1:02 later, doubling the Penguins' lead.
The Ducks' Ryan Getzlaff responded with a goal just 26 seconds after that, but Sidney Crosby notched his 10th of the season off a Malkin feed to restore the two-goal lead.
Marc-Andre Fleury made 27 saves for Pittsburgh.
Fasth finished with 24 saves as Anaheim completed a winless four-game road trip.