Mario Lemina’s strike earned a 1-0 win that extended Liverpool’s losing run at Anfield.
Josh Maja twice went close for the visitors early on, first shooting wide form Kenny Tete’s cross before being denied by Alisson at point-blank range.
Ademola Lookman also had a close-range strike deflected over by Neco Williams.
An impressive first-half display was rewarded in stoppage time, when Lemina drilled in a low shot following a corner.
Liverpool improved in the second half, with the returning Diogo Jota had a volley brilliantly saved by Alphonse Areola.
Substitute Sadio Mane’s looping header struck a post and Xherdan Shaqiri also shot narrowly wide, but Fulham held on for their second Premier League win at Anfield.
A sixth consecutive home league defeat for Liverpool keeps them seventh on 43 points.
Fulham, now unbeaten in eight away league matches, stay 18th but are now level with Brighton on 26 points, having played one match more.