The win snapped Milwaukee's four-game losing streak even though the Brewers have stayed in first place in the NL Central through a 4-7 stretch.
In this one, the Brewers trailed their former AL Central foes 2-0 after a run-scoring double by A.J. Pierzynski and an RBI single by Chris Getz in the fourth.
But Hart, one of four starters benched Thursday, sparked a rally in the sixth after his diving catch of Getz's liner ended the top of the inning instead of pushing the lead to 4-0.
White Sox starter Clayton Richard, pitching on three days' rest for the first time, scattered four hits and committed a throwing error on Prince Fielder's dribbler to the mound to start the sixth.
Octavio Dotel came on and struck out Mike Cameron, but Hart hit a liner to left that ricocheted in the corner, allowing Fielder to score from first.
Dotel (1-2) struck out Bill Hall and intentionally walked Jason Kendall to bring up Brewers starter Jeff Suppan (5-4), who hit a bloop single to score Hart. Milwaukee made it 3-2 on Casey McGehee's single to left.
The Brewers then blew it open in the seventh with Hart again leading the way.
After singles by Ryan Braun and Mike Cameron, Hart tripled off D.J. Carrasco and Hall, who had been 5 for 66 and also sat Thursday, singled to drive in Hart. McGehee added an RBI single to make it 7-2.