Chicago, owner of the second-worst record in the majors, lost its sixth in a row. The Cubs fell to 59-98 for the season and must win four of their last five to avoid a 100-loss season.
The Cubs overcame a 2-0 deficit on Dave Sappelt's two-run homer in the fifth, but the Diamondbacks regained the lead in the bottom half of the inning.
Upton also singled home Hill in the eighth inning and scored later in the frame on a base hit from John McDonald.
Ian Kennedy (15-11) earned the win with a 5 2/3-inning stint, during which he gave up three runs on four hits.