Zenit dominated possession from the start but Austria earned the first chance in the sixth minute when Hosiner was set up by Jun and forced Zenit goalkeeper Yuri Lodygin into a diving safe.
Zenit came close three times within two minutes but Austria keeper Heinz Lindner reacted quickly to shots from Hulk, Domenico Criscito and Cristian Anseldi.
Kerzhakov had a goal disallowed for offside in the 29th before putting Zenit in front six minutes later when he dribbled past Austria Vienna captain Manuel Ortlechner and goalkeeper Lindner.
Hosiner leveled with a Low shot in the far corner after loose defending by the Russians.
A lackluster start into the second half proved costly for Zenit. Defender Markus Suttner's low cross from the left found unmarked Jun in the center, and Hosiner scored his second from a rebound after Lodygin couldn't control a thundering 25-meter shot by Florian Mader.
Zenit missed midfielder Danny through injury and lacked creativity to find openings in the Austrian defense.
Coach Luciano Spalletti brought on Andrei Arshavin for Konstantin Zyryanov in the 63rd but Zenit still created hardly any danger, apart from a shot from Hulk that went just wide.
Ten minutes after coming on a substitute, Kienast scored from close range in the third minute of injury time.