ARLINGTON, Texas -- All-America running back Cody Schrader bulled through two defenders to open the fourth quarter with ninth-ranked Missouri's first score in the Cotton Bowl.

That 7-yard touchdown run was a fitting play for the former walk-on, and finish for these Tigers, who wrapped up an 11-win season with a 14-3 win over No. 7 Ohio State on Friday night.

"I couldn't have drawn it up any more perfect," quarterback Brady Cook said. "He embodies what our team is, and what our values are and how we operate."

Schrader rushed for 29 times in the game and it was his ninth game with 100 rushing yards this season -- tied with Oklahoma State's Ollie Gordon II for most in FBS.

Schrader finished the season with 1,627 rush yards, a single-season school record.

In a game with almost as many total punts (16) as points, Missouri (11-2) suddenly had consecutive scoring drives of more than 90 yards after punting eight times before that. Cook threw a 7-yard TD to Luther Burden III with 5:12 left in the game.

Ohio State (11-2), which was undefeated before losing its regular-season finale to Michigan, played without two-time All-America receiver Marvin Harrison Jr. The standout junior was on the sideline, but opted out of playing. He hasn't announced yet if he will enter the NFL draft.

The Buckeyes were already without starting quarterback Kyle McCord, who left the program earlier this month to transfer to Syracuse. Devin Brown, who took over as the starter, left the game in the middle of the second quarter with a high left ankle sprain. They finished with only 203 total yards.

After finishing 6-7 with bowl losses each of the past two years, Missouri wrapped up coach Eliah Drinkwitz's fourth season by winning 11 games for the first time since 2014.

"I think tonight was a testament to a wilderness brotherhood. A bunch of guys that have fought through adversity their entire lives and careers," Drinkwitz said. "We're not bluebloods. We're a dirty, hard-working brotherhood that loves each other, fight for each other."

Missouri had only 120 total yards before the eight-play, 95-yard drive that ended with Schrader, the former NCAA Division II standout and walk-on, running through two defenders for his 14th TD -- and 10th consecutive game with a score. Cook had a 15-yard run before a 50-yard pass to a wide-open Marquis Johnson.

The Tigers then went 91 yards in 13 plays, including Cook converting fourth-and-1 with a 2-yard plunge, for Burden's score.

"That's just grit," Cook said. "That's a testimony to all the work this team has put in and a focus on being a gritty team. Not let adversity get you down and just go back to work."

Brown appeared to get hurt when he was sacked on a third-down play late in the first quarter. He returned when the Buckeyes got the ball back, but true freshman Lincoln Kienholz finished the game after that.

With McCord gone, Brown took over as the starter after not playing since Oct. 21, and was 4-of-6 passing for 20 yards while getting sacked three times. Kienholz was finished 6 of 17 for 86 yards and lost a fumble while being sacked with 3:13 left.

"For Devin, I know he wanted to play in this game worse than anybody. And even after he hurt himself, he wanted to get back in there and actually did it for a series," Buckeyes coach Ryan Day said. "It wasn't fair for him. He couldn't move."

Ohio State's only points came on Jayden Fielding's 44-yard field goal with 3:12 left in the first quarter, and the Buckeyes punted their other six possessions before halftime. Fielding's 48-yard attempt on the opening drive of the second half ricocheted high off the upright and back into the end zone.

The Buckeyes never reached the red zone on their 11 possessions (eight punts).

The Associated Press contributed to this report.