Aston Villa won an FA Cup tie for the first time since 2016 after Matty Cash hit a late winner at Middlesbrough.
Championship club Boro were close to earning a replay when Cash's attempt from outside the box took a heavy deflection and beat Tom Glover.
Australian keeper Glover had earlier frustrated the Premier League visitors at a vibrant Riverside Stadium with a string of saves to keep out young Colombia forward Jhon Duran (twice) and captain John McGinn.
Villa's frustrations grew when Ezri Konsa's glancing header bounced back off a post before Poland full-back Cash struck his fourth goal of the season in three different competitions.
It earned Villa, seven-time FA Cup winners who last lifted the trophy in 1957, a first victory in the competition since defeating League Two Wycombe in a third-round replay in 2016.
They had suffered eight straight defeats and been on the wrong end of upsets against League One Peterborough in 2018 and League Two Stevenage in 2023.
"We were speaking before the match about the FA Cup, a very historic cup competition, maybe the best cup competition in the world," said Villa boss Unai Emery.
"We're speaking about our players, how much they were successful in this competition - not a lot! Only Emiliano [Martinez] and Calum Chambers won with Arsenal.
"A long time Aston Villa was successful in this competition with seven titles. Of course we are here trying to do another step ahead in this club."
Middlesbrough have already enjoyed one impressive cup run this season after reaching the semi-finals of the Carabao Cup, where they face Chelsea over two legs on Tuesday and 23 January.
But they managed just one attempt on target when Martinez kept out Morgan Rogers before half-time.
Villa, second in the Premier League, felt they should have won a penalty when Isaiah Jones clipped Alex Moreno in the second half.
But with no video assistant referee (VAR) in operation at grounds outside the Premier League, play was allowed to carry on.
With a replay at Villa Park looming, Cash found the net following an assist by substitute Douglas Luiz.

Relief as Villa get the job done
There was understandable relief from Emery and his players when referee Robert Jones blew the final whistle, sparking celebrations from Villa's travelling fans.
They have waited a long time to see their side win a match in the competition and can now look forward to Monday's fourth-round draw.
Although Ollie Watkins started on the substitutes bench, the Villa boss fielded a strong side.
The tie was still in the balance by the time the England forward was introduced with 20 minutes to go.
Nicolo Zaniolo, another substitute, went close with a curling attempt from distance before Cash added to goals he had scored this season in the Premier League (2) and Europa Conference League.
Player of the match
GloverTom Glover
with an average of 6.75
Middlesbrough
Squad number23Player nameGlover
Average rating6.75
Squad number16Player nameHowson
Average rating6.63
Squad number3Player namevan den Berg
Average rating6.59
Squad number24Player nameBangura
Average rating6.54
Squad number4Player nameBarlaser
Average rating6.53
Squad number5Player nameClarke
Average rating6.51
Squad number9Player nameLatte Lath
Average rating6.51
Squad number7Player nameHackney
Average rating6.51
Squad number10Player nameRogers
Average rating6.46
Squad number19Player nameCoburn
Average rating6.42
Squad number11Player nameJones
Average rating6.42
Squad number27Player nameEngel
Average rating6.36
Squad number29Player nameGreenwood
Average rating6.34
Squad number22Player nameCoulson
Average rating6.22
Squad number14Player nameGilbert
Average rating6.14
Squad number6Player nameFry
Average rating5.97
Aston Villa
Squad number7Player nameMcGinn
Average rating6.71
Squad number2Player nameCash
Average rating6.59
Squad number6Player nameDouglas Luiz
Average rating5.94
Squad number11Player nameWatkins
Average rating5.91
Squad number41Player nameJ Ramsey
Average rating5.85
Squad number44Player nameKamara
Average rating5.80
Squad number15Player nameÁlex Moreno
Average rating5.80
Squad number4Player nameKonsa
Average rating5.75
Squad number22Player nameZaniolo
Average rating5.70
Squad number1Player nameE Martínez
Average rating5.68
Squad number31Player nameBailey
Average rating5.66
Squad number32Player nameDendoncker
Average rating5.56
Squad number17Player nameLenglet
Average rating5.52
Squad number19Player nameDiaby
Average rating5.45
Squad number24Player nameDurán
Average rating5.38
Line-ups
Middlesbrough
Formation 4-2-3-1
- 23Glover
- 3van den Berg
- 5Clarke
- 27Engel
- 24BanguraSubstituted forCoulsonat 83'minutes
- 4BarlaserSubstituted forGilbertat 83'minutes
- 7HackneySubstituted forHowsonat 59'minutes
- 11JonesBooked at 23minsSubstituted forFryat 83'minutes
- 10Rogers
- 29Greenwood
- 19CoburnSubstituted forLatte Lathat 59'minutes
Substitutes
- 6Fry
- 9Latte Lath
- 14Gilbert
- 16Howson
- 22Coulson
- 25Crooks
- 32Jones
- 49McCabe
- 52Bridge
Aston Villa
Formation 4-2-3-1
- 1E Martínez
- 2CashBooked at 74mins
- 17LengletBooked at 82mins
- 4KonsaBooked at 37mins
- 15Moreno
- 44Kamara
- 32DendonckerSubstituted forDouglas Luizat 70'minutes
- 31BaileyBooked at 40minsSubstituted forZanioloat 69'minutesBooked at 80mins
- 7McGinnSubstituted forDiabyat 70'minutes
- 41J Ramsey
- 24DuránSubstituted forWatkinsat 70'minutes
Substitutes
- 3Diego Carlos
- 6Douglas Luiz
- 11Watkins
- 19Diaby
- 22Zaniolo
- 42Marschall
- 47Iroegbunam
- 78Proctor
- Referee:
- Robert Jones
- Attendance:
- 25,022
Match Stats
Live Text
Match ends, Middlesbrough 0, Aston Villa 1.
(Feed generated with FetchRSS)