Match ends, Fulham 4, Middlesbrough 3.
Middlesbrough's hopes of automatic promotion have been severely dented by losing a seven-goal thriller at Fulham.
Ross McCormack completed his hat-trick in stoppage time, with Boro goalkeeper Dimi Konstantopoulos upfield for a corner as their 10 men chased a winner.
Michael Turner's header and two McCormack penalties put Fulham 3-1 up, Adam Reach replying for the visitors, who had George Friend sent off.
Daniel Ayala and Kike brought Boro level before the dramatic conclusion.
Fulham's win, coupled with Norwich's draw at Rotherham, confirmed Watford's promotion to the Premier League.
If Bournemouth beat Bolton on Monday, the second-placed Cherries would move three points clear of Boro and with a vastly-superior goal difference over Aitor Karanka's side heading into the final day.
The defeat was harsh on the Teessiders, who fought back bravely in the final 20 minutes with 10 men after Friend was dismissed for the foul on Hugo Rodallega that led to Fulham's second spot-kick.
Turner, on loan from Middlesbrough's promotion rivals Norwich, nodded in the opener from close range after Shaun Hutchinson met a Bryan Ruiz corner.
After the break, Konstantopoulos made a superb save to keep out Rodallega's header but Fulham soon doubled their lead when Ayala fouled McCormack in the area and the Scotland striker converted from 12 yards.
Karanka made a triple substitution in an attempt to change the game and it worked almost immediately, with replacement Reach's low shot beating Marcus Bettinelli.
McCormack's second penalty looked to have killed the game as a contest, but Ayala headed in Albert Adomah's cross with 17 minutes to go to set up a tense finish.
And after Ayala and Patrick Bamford narrowly missed the target, Kike popped up with the equaliser.
But as they pressed for a winner, Boro left their net unguarded and Fulham cleared a corner to McCormack, who rolled the ball into an empty net to seal a dramatic victory.
Middlesbrough boss Aitor Karanka:
"The goalkeeper went up because I felt that one point wasn't enough and we needed three points.
"Now I am sitting here at the table one point might have been enough but at that time I preferred to take risks so I told him to go.
"When you take a risk and you concede a goal the following day you can say that it was because you took a risk. But the problem with not taking a risk is that you will never know what would have happened if you did.
"It will be difficult now because Bournemouth have two more games and one win will be no problem.
"But our aim was to get into the play-offs. We wanted the play-offs two or three weeks ago."
Fulham manager Kit Symons:
"It was a proper roller-coaster of a game. We actually played very well.
"It was a good performance, which I wanted to give to the fans as although that makes it five unbeaten, in recent games here it hasn't been pretty.
"It has been scrappy and ugly and we have had to play a different way and forgo certain elements of my footballing principles to make sure of the results we needed."
- 13GuthrieBooked at 50minsSubstituted forFofanaat 76'minutes
- 32KavanaghBooked at 42mins
- 10RuizSubstituted forWoodrowat 81'minutes
- 20RodallegaSubstituted forSmithat 88'minutes
- 5FredericksSubstituted forReachat 61'minutes
- 6GibsonBooked at 59mins
- 3FriendBooked at 66mins
- 8ClaytonSubstituted forForshawat 61'minutes
- 27AdomahBooked at 33mins
- 21VossenSubstituted forKikeat 61'minutes
- Kevin Friend
- Shots on Target
Second Half ends, Fulham 4, Middlesbrough 3.
Goal! Fulham 4, Middlesbrough 3. Ross McCormack (Fulham) right footed shot from the centre of the box to the centre of the goal. Assisted by Michael Turner.
Attempt blocked. Albert Adomah (Middlesbrough) right footed shot from outside the box is blocked.
Corner, Middlesbrough. Conceded by Tim Hoogland.
Ross McCormack (Fulham) wins a free kick in the defensive half.
Foul by Grant Leadbitter (Middlesbrough).
Attempt blocked. Grant Leadbitter (Middlesbrough) right footed shot from outside the box is blocked. Assisted by Patrick Bamford.
Attempt saved. Adam Forshaw (Middlesbrough) right footed shot from outside the box is saved in the bottom left corner. Assisted by Grant Leadbitter.
Goal! Fulham 3, Middlesbrough 3. Kike (Middlesbrough) header from the centre of the box to the bottom right corner. Assisted by Lee Tomlin following a corner.
Corner, Middlesbrough. Conceded by Tim Hoogland.
Substitution, Fulham. Matt Smith replaces Hugo Rodallega.
Corner, Middlesbrough. Conceded by Marcus Bettinelli.
Corner, Middlesbrough. Conceded by Cauley Woodrow.
Attempt missed. Ross McCormack (Fulham) right footed shot from the left side of the box is just a bit too high. Assisted by Hugo Rodallega.
Attempt missed. Daniel Ayala (Middlesbrough) right footed shot from the left side of the box is just a bit too high following a corner.
Corner, Middlesbrough. Conceded by Michael Turner.
Substitution, Fulham. Cauley Woodrow replaces Bryan Ruiz.
Attempt missed. Patrick Bamford (Middlesbrough) right footed shot from very close range is close, but misses to the left. Assisted by Adam Reach with a cross.
Attempt saved. Ross McCormack (Fulham) left footed shot from the left side of the box is saved in the top left corner. Assisted by Sean Kavanagh.