Alejandro De Aza went 3-for-4 with a run scored while Omar Vizquel and Alexei Ramirez each drove in a run for the White Sox, who have won six of their last seven.
Freddy Garcia (12-6) went seven innings to get the win as he gave up two runs on four hits with a strikeout over seven-plus frames.
"He came back to be one of the more consistent pitchers we had all year long," White Sox manager Ozzie Guillen said. "A lot of people talk about (John) Danks and (Gavin) Floyd and all those guys, but I think the best pitcher we had every five days was Freddy."
Mike Lowell hit a solo home run and David Ortiz drove in the other run for the Red Sox, who have dropped three of four. Josh Beckett (6-6) was tagged for four runs on 11 hits over six-plus innings.
"I thought it was a heck of a lot more good than what probably shows up in the line score in the paper," Red Sox manager Terry Francona said.
Boston, which was eliminated from postseason contention on Tuesday, got on the board in the fourth. Ortiz's RBI single plated Marco Scutaro, who led off the inning with a double.
Chicago, though, tied the game in the bottom of the frame on a homer from Pierzynski.
The score remained that way until the seventh when Chicago went ahead. With two on, Vizquel plated one with a single and Brent Lillibridge brought home another with a bunt single that saw Victor Martinez's throw to first go wide. An RBI single later in the frame from Ramirez made it a 4-1 game.
The Red Sox got one back in the eighth on a leadoff homer from Lowell, but Juan Pierre's double play groundout in the bottom of the frame got the run back.
Matt Thornton, who got the final out of the eighth, set Boston down in order in the ninth to pick up his eighth save of the season.
Chicago right fielder Carlos Quentin left the game in the fifth with an injured ankle...The White Sox have taken five of the six games against Boston this season...Beckett fell to 4-2 over eight starts against Chicago...Garcia improved to 8-2 in 16 starts against Boston.