Trailing 4-2 in the eighth, the Reds scored four times against the Cubs' bullpen with the benefit of only one hit.
Carlos Marmol (2-2) walked Zack Cozart and Joey Votto to begin the frame and then hit Brandon Phillips to load the bases before being pulled. Hector Rondon came in to pitch and promptly allowed an RBI single to Jay Bruce, and Todd Frazier followed with a score-tying sacrifice fly.
An intentional walk to Xavier Paul loaded the bases again, and pinch-hitter Hannahan coaxed an unintentional walk, forcing home Phillips.
Devin Mesoraco finished the rally with another sac fly as the Reds took a second straight against Chicago.
Logan Ondrusek (2-0) got the victory with a scoreless seventh inning and Aroldis Chapman racked up his seventh save for Cincinnati.
Alfonso Soriano cracked a pair of two-run homers for the Cubs.