Steyn - three second-session wickets.
An unbeaten half century from Junaid Siddique helped Bangladesh strengthen their position on day two of the second Test against South Africa.
His score of 64 not out rescued the hosts from a precarious 29 for three and allowed them to reach 125 for four at stumps - a lead of 147 runs.
Siddique's knock added to a stunning performance with the ball from Shahadat Hossain, who had earlier taken six wickets to help bowl the Proteas out for just 170 and give Bangladesh the upper hand in the first of their two-Test series.
Both teams have found runs hard to come by at the Shere Bangla National Stadium, and South Africa were unable to buck that trend at the start of the second day.
The Proteas resumed on 76 for four after a poor evening session on Friday where they failed to take advantage of a strong position after dismissing the hosts for 192.
And the day started badly when a terrible mix-up between Johan Botha and Ashwell Prince (10) saw the latter run out in just the second over of the day.
Botha and AB de Villiers (46) then steadied the slump with a 68-run partnership. De Villiers, who was dropped by Mohammad Ashraful on 30, struck seven fours and a six in his innings but fell four runs short of his fifty in a bizarre dismissal.
An Ashraful delivery bounced twice before De Villiers attempted to pull only to catch a top edge and be caught and bowled.
The South African stayed at his crease, believing the delivery to be a dead ball but was surprised to see umpire Steve Bucknor raise his finger.
South Africa added just 12 runs before Botha followed De Villiers back to the pavilion when Hossain trapped him leg before wicket for 25.
Hossain claimed his second victim of the morning with the final ball before the interval when Morkel presented wicketkeeper Mushfiqur Rahim with a straightforward catch.
That left the tourists on 158 for eight at lunch, and Hossain then mopped up the tail early in the afternoon session to claim his second five-wicket haul in Test cricket.
Mark Boucher added 11 to South Africa's dismal total before being trapped lbw while attempting to play across the line.
And Dale Steyn (seven) followed soon after when he was beaten for pace by Hossain, who finished with stunning figures of six for 27.
Bangladesh returned to the crease to begin their second innings, but things did not begin smoothly with Steyn bowling Tamim Iqbal between bat and pad for just two.
Shahriar Nafees then fell lbw to Steyn for 16 and Habibul Nashar (two) suffered a similar fate two overs later as the Proteas looked to make amends for a poor batting performance.
But Siddique had other ideas and a fourth-wicket stand of 56 with Ashraful steered Bangladesh into the final session without any further hitches.
Makhaya Ntini eventually broke the partnership when Ashraful (24) edged his delivery to wicketkeeper Boucher, but Siddique refused to buckle and brought up only his second Test fifty six overs later.
With the help of Aftab Ahmed (13no), Siddique steered the hosts through to stumps and a promising position as they chase a rare Test victory.