Marcus Coker added 124 yards rushing and two TDs for the Hawkeyes (4-2, 1-1 Big Ten), who won despite allowing 495 yards and 29 first downs to Northwestern.
Iowa blew a 17-0 second-quarter lead, then pulled ahead 24-17 on Coker's 1-yard TD run with 13:55 left. Vandenberg pushed the lead to 31-17 on a 35-yard TD pass to Marvin McNutt, and Coker's 1-yard touchdown run with 3:56 to go sealed just Iowa's second win over Northwestern in seven tries.
Dan Persa threw for 246 yards on 31 of 40 passing for the Wildcats (2-4, 0-3), who dropped their fourth straight game.
Northwestern dominated the box score - but it let Iowa make the most of its opportunities.
Northwestern trailed by 10 at the break despite leading the Hawkeyes in nearly every statistical category. The Wildcats continued to rack up yards at the start of the second half though, pulling within 17-14 on Adonis Smith's 4-yard run and tying the game on Jeff Budzien's 47-yard field goal with 4:19 left in the third quarter.
Though the Hawkeyes could barely stop Northwestern on third down - the Wildcats converted a staggering 16 of them in 22 tries - they made it count when they did.
The Wildcats trailed 24-17 when they drove to Iowa's 23-yard line with 10 minutes left. But Kain Colter, in at quarterback, got drilled as he threw a wayward backward pass on third-and-5.
Budzien then missed from 47 yards, and three plays later Vandenberg found McNutt streaking down the middle of the field for a backbreaking touchdown.
Northwestern's shot at another rally fizzled after just two plays.
Persa lost a fumble deep in Iowa territory, and Mike Meyer's 40-yard field goal put Iowa ahead 34-17 with 6:49 left.
Northwestern responded with an 18-yard TD pass from Colter to Drake Dunsmore with 4:50 left. But McNutt, whose TD reception was a school-record tying 21st of his career, recovered an onside kick and brought it back deep into Wildcats territory.
Persa's creativity crushed the Hawkeyes in a 21-17 Northwestern victory in Evanston in 2010, using his arm and legs to keep a pair of fourth-quarter touchdown drives alive.
In the opening quarter, Persa pushed his limits too far.
On a first-and-goal from Iowa's 7-yard line, Persa floated a pass to the middle of the field despite being harassed by a pair of Hawkeyes. The effort floated aimlessly into the thankful arms of Tanner Miller, who took it back for an easy 98-yard touchdown return.
Miller's interception return put Iowa ahead 10-0 with 4:08 left in the first quarter and tied the longest in school history.
The Hawkeyes made it 17-0 on a pair of long tosses from Vandenberg to a wide-open Davis.
The first covered 31 yards and came over the top of Northwestern's secondary. The second looked like the same play - but this time Davis cruised into the end zone for a 47-yard touchdown with 9:34 left before halftime.
Northwestern got one back on Persa's 6-yard touchdown pass to Jeremy Ebert with 3:54 to go. But after leading at the break in each of their first two Big Ten games, the Wildcats trailed 17-7.
Northwestern had plenty of offense, but its defense has now allowed 121 points in Big Ten play.