Dennis Wise and Julio Arca were booked early on after the teams squared up twice in the opening 15 minutes.
Goals from Wise and David Livermore took Millwall up to eighth as they ended Sunderland's six-game unbeaten run at The New Den.
Millwall could have scored twice in the first ten minutes, but for good keeping by Thomas Myhre and poor finishing from Wise.
Sunderland had chances of their own. Winger Liam Lawrence picked up a poor back-pass by Josh Simpson in the 15th minute, but a superb double save from Graham Stack prevented the visitors from taking the lead.
Millwall's first goal came through Wise when the referee awarded a penalty on the half-hour after Lawrence had brought down the impressive Simpson and the player-manager fired home the penalty confidently.
Jo Tessem should have doubled their lead just before the break when Wise picked out his well-timed run with a ball over the top, but he was robbed of the ball by Steve Caldwell as looked to take an extra touch.
The visitors' best chance came two minutes before the break when Carl Robinson picked up a loose ball on the edge of the box, but his well-struck drive cannoned back off the post with Stack beaten.
The home side broke on the counter-attack and went two up when Tessem fired the ball across the six-yard box from the right and Livermore slid the ball home at the far post.
The second half continued in the same open, end-to-end fashion as the first and Tessem almost got the third when he headed Simpson's cross goalwards, but a point-blank reaction save from Myhre kept the visitors in the game.
Wise continued to lead by example, organising his side from the middle of the park and he almost rounded off a superb display with a second goal when his free-kick from the edge of the box skimmed the bar and went over with just 20 minutes left.