Joe Rothwell's third goal of the season was the difference as Rovers earned a crucial win at play-off chasing Middlesbrough.
The playmaker tucked home from close range to finish off a fine team move midway through the second half.
It came after a goal-less first half and just minutes after Nathan Wood smashed a strike against the post at the other end.
Rothwell's goal was just the sixth Boro have conceded on home turf this term in the Sky Bet Championship, but it was enough for a priceless three points as Rovers move up to ninth in the table.
It could and should have been more for Rovers late on, but Adam Armstrong could only fire over Marcus Bettinelli's upright after some great work down the right side by substitute Sam Gallagher.
Goalscorer Rothwell kept his place in the starting XI from the team that took to the field against Stoke City last weekend, with the only alteration being Jacob Davenport returning to the team in place of Bradley Dack.
For Boro, Neil Warnock made one change to the team that started against Nottingham Forest in midweek, with Anfernee Dijksteel being replaced by Djed Spence at right back.
The visitors began well in the north-east, and Armstrong fired wide of Bettinelli's left-hand post after Barry Douglas' adventurous run forward after only five minutes.
However, Rovers were dealt a blow soon after when Bradley Johnson was forced off with what looked like a hamstring injury, with John Buckley on to replace the 33-year-old in midfield.
Middlesbrough's first opportunity came just before the half hour mark, with Thomas Kaminski dealing with Britt Assombalonga's free kick before Sam Morsy's scuffed volley trickled past the post.
It was a half of few chances in an evenly-poised game, with both sides going into the interval as they started the game on Teesside.
Boro came out of the traps quickest in the second half as the opener continued to remain elusive, but Kaminski pulled off a terrific save to deny Assombalonga before Nathan Wood's follow up strike clanged against the post.
And that was to be a big turning point as Rovers took the lead a few moments later thanks to Rothwell's third goal of the season.
Ryan Nyambe robbed Assombalonga, played in Armstrong, who turned and fed Harvey Elliott, whose cross was perfect for Rothwell to slot past Bettinelli with 25 minutes remaining.
A golden opportunity was passed up with seven minutes remaining when Armstrong curled over following a neat move involving substitutes Dack and Sam Gallagher.
Rovers managed to see the game out to earn a second successive win on the road with back-to-back clean sheets, and will now be eager for the momentum to build when Luton Town make the trip to Ewood Park next weekend.
Middlesbrough: Bettinelli, Morsy (Johnson, 72), Fry (Wood, 18), Tavernier (Roberts, 81), Assombalonga (c), Howson, McNair, Watmore (Fletcher, 72), Saville, Spence, Bola.
Unused substitutes: Archer, Wing, Akpom, Coulson, Hackney.
Booked: Morsy, 57, Tavernier, 80, Bola, 88.
Rovers: Kaminski, Nyambe, Lenihan (c), Branthwaite, Douglas, Johnson (Buckley, 10) (Dack, 64), Travis, Davenport, Rothwell (Gallagher, 64), Elliott (Brereton, 64), Armstrong.
Unused substitutes: Pears, Downing, Bell, Trybull, Dolan.
Goal: Rothwell, 64.
Booked: Davenport, 27.
Referee: Dean Whitestone.