Osasuna came into the clash three places and five points clear of the bottom three, but three wins in their last five league matches had helped restore some confidence.
Coach Jose Luis Mendilibar was without injured duo Asier Riesgo and Raoul Loe, while midfielder Guillermo Molins missed out for Betis because of illness.
And Betis, knowing a victory would take them level on points with fourth-place Malaga, made the brighter start with visiting goalkeeper Andres Fernandez forced into making a terrific save to keep out Jorge Molina's header after six minutes.
A minute later Osasuna could have taken the lead, but from just six yards out Oier's near-post header sailed over the bar.
Kike Sola repeated the trick a minute later for the visitors, before Emiliano Armenteros' long-range effort was brilliantly tipped round the post by Miguel Adrian.
The home side took the lead against the run of play after 18 minutes when Molina this time beat Fernandez as his header flew into the top corner from Joel Campbell's cross.
The goal was a blow for the visitors and it was just before the hour mark before they could force another opportunity as Alejandro Arribas headed wide.
They did draw level after 73 minutes when Silva converted from 12 yards into the bottom right corner, however they would not remain on level terms for long.
Just six minutes later Betis were back in front when Castro's effort from the edge of the area was well placed past Fernandez.
The second goal rocked Osasuna and they failed to hit back as Betis picked up their 13th league win of the season.