Paul Welsh was surfing with his 10-year-old son, close to shore, when the shark attacked.
"I was pushing my son on to waves and it just belted me from behind," Mr Welsh told The Manly Daily minutes after the attack.
"I grabbed on to the pinnacle of a rock and held on as it tried to drag me out ... and I won."
Police said the 46-year-old man was bitten on the left leg by a 130cm shark off Mona Vale about 8am (AEDT) on Thursday.
A spokeswoman from NSW Health told AAP the man was recovering well and would be out of Mona Vale Hospital "by the end of the day".
Police said they were still waiting to speak to the man.
Surfwatch Australia director Michael Brown, who witnessed the attack, told AAP the shark hit the man "like a freight train".
"This shark had come in round the coast, drawn in by all the baitfish," he said.
I could be scared of sharks but a much bigger threat are these large dumping waves. swimming at Burleigh yesterday with a mate and the wave first smacked me hard against the water but then smacked really hard against the sand!