The defending Sprint Cup Series champion, who failed to qualify for the Chase this year, grabbed his first win of the season and first since Sept. 30, 2012, at Dover, by passing Kahne with nine laps to go in his Penske Racing Ford.

Keselowski became the first non-Chase driver to win a Chase race since Kahne at Phoenix in 2011.

“I never give up. I didn’t qualify well. But I kept working my way forward. I knew we had a good car,” said Keselowski, who started 23rd.

The race changed dramatically with 27 laps remaining and Jimmie Johnson, who led 130 laps, seemingly on his way to an easy victory. But a debris caution sent the leaders to pit road and ended Johnson’s march to a record seventh Charlotte win.

“There was a caution that shook things up,” Johnson shrugged.

Hendrick teammates Kahne and Jeff Gordon took only two tires and raced off pit road first, while everyone else took four tires and lined up behind them. Johnson came out in third, and should have been in good shape on four fresh tires.

Instead, Johnson had a terrible re-start and fell back to seventh.

Kahne pulled away and championship leader Matt Kenseth jumped from fourth to second. Then Keselowski, sixth on the restart, picked his way through traffic and worked his way past second.

Keselowski was unsure all night if his car was as good as Kahne or Johnson. The four tires he got from crew chief Paul Wolfe gave him a chance to find out.

“I never got to really race them until the end ... when Paul made the call to take four tires and I saw we were that close to the front, I knew we could get them,” Keselowski said.

His sights set on Kahne, who led a race-high 138 laps, Keselowski needed several attempts at the pass for the lead before he could make it stick.

“I love hard racing and there are a handful of guys who can’t race hard and they freak out — he’s not one of them,” Keselowski said about Kahne. “He’s an excellent driver. He ran me hard but ran me clean and that is great racing. He did a hell of a job and deserves a lot of credit for it.”

Kahne finished second in a Chevrolet.

“Tonight was a good battle. He had four tires and I had two, and I did all I could, and he just got by me and cleared me,” Kahne said.

Kenseth was third in a Toyota and maintained his lead in the standings. He goes to Talladega next week up four points over Johnson.

“I’m happy we finished third,” said Kenseth, who was the lowest qualifying Chase driver at 20th. “I was so far behind because I qualified so poorly and needed all night to get back up there. Then at the very end they gave me a shot to win and I’m slightly disappointed that I didn’t take advantage of that opportunity.”

Johnson wound up fourth and said he had trouble when he tried to push teammate Kahne on the restart.

“Evidently I was too close to him and in his way, and my car washed up a little bit,” Johnson said. “A couple of guys were able to get inside of me. I just lost track position at that point, which was unfortunate. Once I got rolling again I was fine, but I lost too much at that point.”

Kyle Busch was fifth which should have been celebrated considering all he went through. He dropped as low as 35th when he had to make a second trip down pit road early in the race because of loose lug nuts, and he thought his engine was failing late in the race.

“It’s acting like it’s out of fuel, but I’m sure it’s blowing up,” he radioed.

Busch, who went from third in the standings to fifth last week at Kansas, is 37 points behind Kenseth.

“Fifth place sucks. They say you need top-fives to win a championship, but when you’re getting beat by guys in front of you then we’re just not good enough,” Busch said. “I don’t know what to do to be better. It’s frustrating, but you know, should be happy with a fifth, but we’re not.”

Kevin Harvick was sixth and followed by Jeff Gordon, Ryan Newman, Denny Hamlin and Carl Edwards.

Kyle Larson made his Sprint Cup Series debut driving a Chip Ganassi Racing-prepared car. He was impressive early, driving from 21st inside the top-12, and he lingered there alongside Juan Pablo Montoya, the driver he’ll replace next season for Ganassi.

Larson eventually dropped to 16th, where he stayed until his engine lost a cylinder and eventually failed, sending him to the garage with 87 laps remaining.