Hafner hit a grand slam off Keith Foulke in a five-run ninth inning, doubled twice and drove in six runs to lead the Indians over the Red Sox 12-8 Tuesday night.
"I was pretty pumped about it," Hafner said. "We were down three in the eighth. Things weren't looking too good, but I was so proud of the guys and the way that they battled back."
Boston, which lost its second in a row following a seven-game winning streak, overcame deficits of 4-1 and 5-3, taking an 8-5 lead with a five-run sixth inning. The Red Sox lost 7-0 to Cleveland on Monday night when Hafner also had two doubles and a homer.
In the opener of the three-game series last week at Cleveland, Boston ended the Indians' nine-game winning streak.
"It's crushing," Red Sox manager Terry Francona said of Tuesday's loss. "The same things that make you laugh a week ago can make you cry tonight."
Aaron Boone hit his 100th career homer -- his first home run against Boston since his 11th-inning drive off Tim Wakefield capped the New York Yankees' comeback in Game 7 of the 2003 AL Championship Series.
After Jhonny Peralta's leadoff single in the eighth off Mike Timlin and Casey Blake's one-out double, Foulke (5-4) relieved and allowed Hafner's run-scoring groundout and Victor Martinez's RBI single.
Foulke, who blew a save for the third time in 18 chances, gave up Jody Gerut's double with one out in the ninth, then retired Boone on a flyout.
Peralta singled on a 3-2 pitch to tie the score 8-8, and Grady Sizemore and Blake walked on pitches close to the plate. Hafner followed with his 13th homer, driving an 0-2 changeup just inside the right-field foul pole for his second career slam.
"I thought there was a real good chance that it would hook foul," Hafner said. "I hit it pretty good."
He's been doing that for a while with 21 RBI in his last 11 games after getting 27 in his first 56.
Matt Miller (1-0) pitched 2 1/3 scoreless innings, and Bob Wickman retired the Red Sox in order on three pitches in the bottom of the ninth.
Foulke allowed five runs, four hits and two walks in 1 2/3 innings and was booed after ending the ninth.
"It was a bad day of work," he said. "I've always said the hardest thing is to come in here and face my teammates (rather) than worry about Johnny from Burger King booing me."
Cleveland's bullpen, which entered Tuesday's game with baseball's best ERA at 2.78, didn't fare well, either. Kevin Youkilis hit an RBI double in the sixth off Cliff Lee and scored on Mark Bellhorn's sacrifice fly against Arthur Rhodes to tie the score 5-all.
Johnny Damon's single, Edward Renteria's walk and David Ortiz's go-ahead single chased Rhodes. Miller relieved and gave up RBI singles to Manny Ramirez and Kevin Millar.
Rhodes' ERA rose from 0.87 to 1.74 but "has been great for us all year long," Cleveland manager Eric Wedge said. "Some good hitters got a couple of base knocks on him. It's going to happen.."
Boston starter Wade Miller allowed five runs, seven hits and four walks in 5 2/3 innings, while Lee gave up five runs and seven hits in 5 1/3 innings.
Hafner's double and Martinez's RBI groundout put Cleveland ahead in the first, and Boone made it 3-0 in the second. The drive went into the left-center field seats above the Green Monster, and fans cheered when one of them threw the ball back onto the field.
"This is a big confidence boost to this team and some individuals as well. It gives us a lot of confidence knowing we have the ability to come back," Blake said.
- Damon extended his hitting streak to 15 games with his single in the sixth. He also has an 18-game hitting streak this season.
- Sizemore was the only starter on either team without a hit but had three walks and four runs.