GREEN BAY -- Zane Gonzalez kicked a 44-yard field goal for Arizona with 1:41 left, Green Bay's Mason Crosby missed a 49-yard attempt as time expired and the Cardinals braved wintry conditions to hold on for a 20-17 win on Sunday.
Crosby pushed his kick wide right, with the flags atop Lambeau Field blowing in toward the field at the time of the play.
The stunned Packers suffered another blow to their fading playoff hopes.
"It was clearly a very disappointing loss, it was a game we needed to win," coach Mike McCarthy said.
Cardinals rookie Josh Rosen struggled for much of the afternoon, but hit veteran wideout Larry Fitzgerald for a sliding 32-yard completion on third-and-23 to help set up Gonzalez's winning kick.
Arizona (3-9) won on the road for the first time since Oct. 7 at San Francisco.
"All the things that were said on the outside, these guys circled the wagons and came together," coach Steve Wilks sad.
Sputtering Green Bay (4-7-1) has lost three straight and five of six.
Aaron Rodgers was 31 of 50 for 233 yards and a touchdown. A couple throws looked off, especially in the first half, and receivers had a few drops.
The offense regained some swagger after Rodgers orchestrated a 95-yard drive that led to Aaron Jones' 8-yard touchdown run with 5:26 left, tying it at 17. Davante Adams tip-toed the sideline for a 19-yard catch to extend that drive.
But too many missed opportunities and drops caught up with the Packers in the end. They also struggled on third down, a season-long theme, going just 3 of 14.
"We're just not executing well, it's the same things over and over," Rodgers said.
Rookie Chase Edmonds ran for two touchdowns for Arizona. Rosen was 11 of 26 for 149 yards, making just enough plays in front of a makeshift offensive line.
"Other than (center Mason Cole), I don't think a single one of those guys start the season," Rosen said. "They're doing a hell of a job."
There was a lot of action in the first quarter of Sunday's game, albeit no scoring. The pigskin went back and forth between the Packers and the Cardinals, and quite a few players fell to the ground. At the end of the quarter, the score was still 0-0.
The Packers scored first in the second quarter after Aaron Rodgers made a 13-yard pass to Davante Adams.
The scoring drive included five plays for 35 yards in 2:13.
The Cardinals scored a touchdown around the 5:00 mark in the second quarter, leaving the score tied at 7.
Only 15 seconds from halftime, Mason Crosby kicked a 32-yard field goal for the Packers.
The scoring drive included 14 plays for 55 yards in 4:27.
A Cardinals field goal tied the game at 10 with just over five minutes left in the third quarter.
Arizona added a touchdown to bring the score to 17-10 late in the third.
A touchdown run by Aaron Jones tied the ballgame again in the fourth -- 17 all.
The scoring drive included 11 plays for 95 yards in 5:15.
The Cardinals added a field goal with under two minutes to play in the game, to bring the score to 20-17.
A Mason Crosby field goal at the end of the game was no good -- and the Cardinals won, 20-17.
A 16-yard completion to Adams with 13:42 left in the second quarter gave Rodgers the team record for attempts without an interception. Hall of Famer Bart Starr set the previous mark of 294 from 1964-65.
Cardinals: LG Mike Iupati was carted off the field in the third quarter with a knee injury. Arizona was already starting rookies at center and right tackle.
Packers: RG Byron Bell and RT Bryan Bulaga each left in the second quarter with knee injuries.
Cardinals: Host the Detroit Lions on Dec. 9.
Packers: Host the Atlanta Falcons on Dec. 9.