Randy Johnson gave up three runs -- two earned -- on seven hits in six innings, with five strikeouts and one walk.
Matt Morris (3-1) gave up five runs on 12 hits in seven innings, with two strikeouts and three walks.
The game was tied, 3-3, in the seventh when pinch-hitter Miguel Montero, Young and Drew put together consecutive one-out singles -- setting up Hudson's game-winning two-run double.
The Giants scored a run in the eighth when Omar Vizquel led off with a double and came around to score on Durham's single.
Brandon Lyon came on in the ninth to get his first save of the season for Arizona.
The Diamondbacks swept the Giants in three games for the first time since June 2004.