Premier League - Fulham win five-goal thriller
But Fulham - who had two more clear-cut penalty appeals waved away by Mark Clattenburg - were awarded an 89th-minute spot-kick after Hanley manhandled Aaron Hughes at a corner.
Blackburn were furious - Clattenburg showed at least one red card as they surrounded him after the final whistle - but substitute Zamora, in his first league match since breaking his leg in September, made no mistake with a cool finish that put Mark Hughes’s team three points clear of his former side, comfortably in mid-table.
Rovers, meanwhile, sit only two points above the relegation zone after West Brom and West Ham both won.
Both sides had countless chances in what was a wonderful advertisement for the less glamorous end of the Premier League, a breathtaking affair between evenly-matched sides with contrasting styles: Fulham largely kept the ball low and short with Rovers taking a more direct approach to better exploit their quicker, stronger players.
From the off, chances were traded between the sides, Andy Johnson denied near-post finishes by the timely interventions of Gael Givet and Chris Samba, while Rovers keeper Paul Robinson kept out a low effort by Dickson Etuhu.
On 37 minutes Fulham broke the deadlock and it was appropriate that Duff - who along with both coaches was facing his former side - should open the scoring after good work from Moussa Dembele and Etuhu, although his low drive was saveable as it squeezed in through the culpable Robinson.
Soon afterwards the home side had a good shout for a penalty turned down when Johnson robbed Samba inside the Rovers penalty area, the Congolese defender appearing to clip the striker’s heels as he lunged to atone for his error.
Mark Hughes was furious and he was even angrier when, in injury time at the end of the half, his side appeared to switch off, failing to clear their lines from a set-piece and dithering as defender Hanley’s speculative shot took a massive deflection off Brede Hangeland to wrong-foot Schwarzer and nestle in the far left of goal.
The half was not done though as, from kick-off, Fulham attempted to regain the lead, winning a corner and denied by a brave Givet block as Hangeland flew in at the far post.
Fulham came out after half-time like a team possessed, putting constant pressure on the Rovers goal but denied by some desperate and effective defending.
Samba almost scored a spectacular own-goal, Hughes poked over from close range after Johnson diverted a corner into his path, Carlos Salcido had successive efforts blocked by Hanley and Jermaine Jones, Dembele was denied a finish by a Givet slide-tackle, while Hanley did likewise to prevent a goal-bound Dempsey finish.
Rovers were on the rack and Fulham deservedly went back in front after Duff capped off a sweeping, one-touch move with a rasping low finish after again cutting on to his favoured left foot.
That came just before the hour mark and, as if by magic, Rovers sparked into life and pounded Fulham’s goal with a succession of direct attacks, one of which yielded an equaliser after Jason Roberts hooked the ball into the path of Hoilett, who hammed it home from 12 yards.
That came after Fulham again failed to clear their lines following a high ball but, to their credit, they regained their composure, thanks in part to Zamora’s introduction giving them a physical outlet up front.
His first act was to draw a smart save from Robinson with a low free-kick, while down the other end Jones curled an effort wide after a dangerous break led by Diouf.
Duff, meanwhile, was in search of a hat-trick and came close when Samba deflected his fizzing effort wide, while for Rovers Roberts mis-hit a finish straight at the keeper after Hughes missed his header.
Someone was going to score and Fulham looked the more likely, Rovers granted another reprieve when Hanley appeared to chop Johnson down in the area: Clattenburg’s view was blocked by the bodies flying in and he waved play on.
Perhaps with this second let-off in mind, the referee favoured Fulham the next time a Rovers player erred and it was Hanley again, this time pushing and pulling Hughes as they jostled at a corner.
Rovers felt hard-done-by, but even if such offences often go unpunished it was a foul and Clattenburg will have no problem justifying the decision to his employers.
Zamora, whose absence has hit Fulham sorely this season, needed no encouragement to step up, his calm finish down the middle thwarting Robinson - a first goal for him since August and a reminder of the fine margins in a battle to avoid relegation that now involves at least 10 sides.