Muldoon outmuscled Alex Hartridge before smashing into the top corner for his ninth of the league campaign with 15 minutes to go.
Town had been pegged back after Jake Taylor’s goal 10 seconds into the second half cancelled out Brendan Kiernan’s opener.
But they had Ryan Fallowfield to thank after he brilliantly cleared a shot off the line in stoppage time before Pierce Sweeney blazed the rebound wide.
Jack Sparkes fired wide as Town were pushed on the back foot, before Sweeney headed wide from a Matt Jay free-kick.
Josh Falkingham bent a volley wide from the edge of the area for the Sulphurites but Kiernan made no mistake when he got past Sparkes before shooting past Jon Maxted a minute later.
James Belshaw made a brilliant save to keep out Jay’s close-range header on 37 minutes.
But Harrogate switched off and conceded seconds after the restart when Taylor slotted a loose ball home.
Muldoon slotted home against the run of play on 75 minutes with a brilliant curling finish, before Martin headed wide on 85 minutes. Sweeney then wasted a glorious chance to equaliser in injury time when he flashed wide.
Exeter City: Maxted, Key, Sweeney, Hartridge, Sparkes, Williams (Caprice 53), Taylor (Law 71), Collins, Randall (Atangana 71), Bowman, Jay (Fisher 77). Unused substitutes: McArdle, Parkes, Lee.
Harrogate Town: Belshaw, Fallowfield, Lawlor, Hall, Burrell, Thomson, Falkingham (Francis 59) Kirby, Kiernan (Miller 84), Martin, Muldoon. Unused substitutes: Cracknell, Stead, Kerry, Lokko
Referee: L Swabey (Devon).
Support The Yorkshire Post and become a subscriber today. Your subscription will help us to continue to bring quality news to the people of Yorkshire. In return, you’ll see fewer ads on site, get free access to our app and receive exclusive members-only offers. Click HERE to subscribe.