It was a comeback for the ages at Croke Park as Waterford stunned Kilkenny to reach their second All-Ireland final in four seasons.

Kilkenny looked to be cruising when goals from Martin Keoghan and TJ Reid helped them into a nine-point lead after half an hour but Waterford closed the gap to seven by half-time – 2-11 to 0-10 – to provide what still seemed just the faintest glimmer of hope.

A goal and two points from the superb Stephen Bennett (1-10, 6f) kick-started the revival, and as Austin Gleeson found his range, the suddenly rampant Déise outscored the Cats' by 14 points to four in the third quarter.

Kilkenny, as they do, battled to the end but when substitute Darragh Lyons fired in a second Waterford goal just short of the hour mark, the Munster men had a five-point lead that saw them through.

It’s just the third semi-final defeat for Brian Cody as Kilkenny manager and his first since 2005.

In his first year in charge at senior level, Liam Cahill has led a team that had not won a championship game between the 2017 All-Ireland semi-final and the start of this campaign to the decider. They will now hope to end a wait for Liam MacCarthy that goes all the way back to 1959.

Stephen Bennett scored 1-04 from play

On a cool, calm evening in Dublin, Kilkenny started sharper and seemed to have one foot in the final at the halfway mark.

They scored the first three points, John Donnelly winning two frees that Reid converted and Martin Keoghan scoring from play, as five of the Cats forwards did in the opening period.

Waterford were busy but jittery as Kilkenny harassed them all over the pitch, and the underdogs hit some poor wides, three of his side's nine from a frustrated-looking Austin Gleeson alone.

Calum Lyons got the Déise on the board and managed a second from halfway but his team-mates only managed three from play between them. Jake Dillon was replaced by Neil Montgomery in the 18th minute shortly after running unnecessarily into trouble – he was far from the only offender.

Ironically, given Colin Fennelly and Walter Walsh were on the bench, Waterford were twice opened up by long deliveries.

In the 11th minute, Richie Hogan coasted in to grab a breaking ball. His shot was well saved by Stephen O’Keeffe but the rebound fell to Keoghan, who had time to pick his spot. 1-04 to 0-02.

Eoin Murphy made saves at his near post from Gleeson and Jamie Barron before another long ball slipped from the grasp of full-back Conor Prunty and into the hands of Reid, the last man who needed an early Christmas present. He accepted the gift and Kilkenny were now eight ahead.

Dessie Hutchinson eventually got on the scoreboard and Bennett bagged his first from play after an exhilarating solo run but it looked a long way back for Waterford from a seven-point interval deficit.

Instead, they did what Kilkenny have done so often to their opponents and came out a team transformed.

Eoin Cody actually got the first point of the second half but then Bennett sparked his team-mates into life, taking a handpass from Jack Fagan, and bearing down on goal. The sliotar was knocked loose but the Ballysaggart man rifled it to the net.

Bennett quickly added two points from play, the second after a delightful flick over the head of TJ, and Waterford were suddenly playing with confidence as their sideline made enough noise to almost make you forget the stands were empty.

Richie Hogan got one back after fine scores from Jack Prendergast and Shane McNulty but then Cahill’s men took off.

They hit five unanswered points in as many minutes, Gleeson levelling after an inspirational catch and Montgomery lofting a shot that almost seemed to touch the moon before it dropped between the posts and gave his team the lead for the first time.

By the 53rd-minute water break, Waterford led 1-21 to 2-15.

Kilkenny rallied, with typical grit, but far too many of their scores were frees from TJ, who finished with 1-14 (13f). None of their four substitutes scored.

Shortly after replacement Walter Walsh had scuffed an effort into the side-netting, Lyons hit them with another goal off a long ball, Meath native Fagan again the creator with a handpass for his team-mate to run through and crash it home.

The Cats did close the gap to within two points in the closing stages, and with Fennelly and Walsh roaming near the square there was always a chance, but Waterford finished in style, scores from Tadhg De Burca and the now irrepressible Gleeson’s fourth sealing the deal.

Limerick or Galway await. Waterford will give them the game of their lives.

Kilkenny: Eoin Murphy; Conor Delaney, Huw Lawlor, Tommy Walsh; Padraig Walsh, Cillian Buckley (0-01), Paddy Deegan (0-01); Conor Browne, Conor Fogarty; John Donnelly (0-02), TJ Reid (1-14, 13f), Martin Keoghan (1-01); Billy Ryan, Richie Hogan (0-02), Eoin Cody (0-02).

Subs: Walter Walsh for Keoghan (39), Colin Fennelly (C) for Ryan (49), Ger Aylward for Cody (58), Niall Brassil for Hogan (56).

Waterford: Stephen O'Keeffe; Ian Kenny, Conor Prunty (C), Shane McNulty (0-01); Calum Lyons (0-02), Tadhg De Burca (0-01), Kevin Moran; Jamie Barron (0-01), Jake Dillon; Jack Fagan (0-01), Kieran Bennett, Stephen Bennett (1-10, 6f); Dessie Hutchinson (0-02), Austin Gleeson (0-04), Jack Prendergast (0-02).

Subs: Patrick Curran for Fagan (68), Darragh Lyons (1-00) for K Bennett (49), Neil Montgomery (0-02) for Dillon (18), Iarlaith Daly (0-01) for Moran (61), Conor Gleeson for Prendergast (61).

Referee: Fergal Horgan (Tipperary)