Pittsburgh evened its record at 3-3, while Cincinnati lost its third straight game to fall to 3-4.
Cincinnati went 80 yards on 15 plays on its opening possession of the game, capped by a 5-yard touchdown run by Cedric Peerman, but managed just 105 yards the rest of the game.
Bengals quarterback Andy Dalton finished 14-for-28 for 105 yards, one touchdown and one interception as he fell to 0-6 in his career against Pittsburgh and the Baltimore Ravens.
The Steelers held Bengals wide receiver A.J. Green to just one catch for 8 yards. The catch was a good for a touchdown, but after Green came into the game with 43 receptions for 628 yards, he was no factor.
Jonathan Dwyer, a third-teamer on the Steelers' depth chart, rushed for 122 yards on 17 carries. Dwyer had gained 70 yards on 24 carries coming into the game.
The Steelers took a 24-17 lead on the second play of the fourth quarter. Chris Rainey's 11-yard touchdown run put Pittsburgh in front for the first time since the opening possession of the game.
The teams were tied 14-14 at halftime and traded field goals on their first possessions of the third quarter.
Shaun Shisham made a 42-yard field goal on the opening possession of the game to give Pittsburgh a 3-0 lead with 10:36 left in the first quarter.
Cincinnati then charged to a 14-3 lead. After Peerman scored late in the first quarter, Green made his touchdown grab in the middle of the second quarter.
Pittsburgh rallied to tie the score before halftime.
Shisham connected on a 47-yard field goal, cutting the lead to 14-6 with 3:11 to play in the second quarter.
LaMarr Woodley intercepted a Dalton pass to give the Steelers the ball back with 1:23 to go in the quarter. Roethlisberger capped a 29-yard drive with a 9-yard touchdown pass to tight end Heath Miller. The same pair hooked up on a two-point conversion pass with 24 seconds left in the half.
Cincinnati's BenJarvus Green-Ellis ran 18 times for 69 yards. Ryan Whalen had a team-high four catches for the Bengals, gaining 31 yards.
Steelers receiver Mike Wallace caught a game-high eight passes for 52 yards, while teammate Antonio Brown had a game-high 96 receiving yards on seven catches.
A loss by Baltimore (5-2) earlier in the day gave both teams an opportunity to make up a game against the AFC North-leading Ravens, and Pittsburgh took advantage. The Steelers return home next week to play host to the Washington Redskins (3-4). The Bengals have a bye before resuming action Nov. 4 at home against the Denver Broncos (3-3).