Ricciardo started from the third row but took advantage when the safety auto came out on the 31st lap - of 56 -- allowing him to get fresh tires.
Lead Red Bull driver Verstappen was favourite to win at that point, but he tried a move around the outside of Hamilton at the fast Turn Seven from too far back on lap 39 and ran off the road, which let Ricciardo in.
Daniel Ricciardo of Red Bull Racing survived an engine fire in practice and a P6 starting position to Sunday's Formula 1 Chinese Grand Prix.
After the safety auto was deployed on Lap 31 when the two Toro Rossos collided the Red Bulls pitted straight away to go onto the softs, having earlier moved to mediums, and in the latter stages of the race that proved to be the difference.
"Occasionally I wonder why I chose this game simply because there' s therefore lots of activities out of one's control plus it'll get you down lots of".
Asked what he would say if told Red Bull would win a race before Mercedes in 2018, Ricciardo replied: "Good job".
Commitment to peace, people & territory: Narendra Modi at Defence Expo
PM Modi took the aerial route to reach the venues, at which time the protesters also released black balloons. The corridors will become engines of economic development & growth of defence industrial base.
"They are all pretty sweet but to be honest, until I got Valtteri I wasn't getting excited about any of them". Ricciardo managed to pass Raikkonen on lap 38 to take fifth. Frustrated at the sport, frustrated at all the variables that are involved in the sport. "We just got a bit unlucky - but that happens sometimes".
Red Bull assessed their options. There's no clear favorite and plenty of questions. It seemed the German would be within DRS range and able to challenge Bottas, but the Mercedes driver seemed to have enough to hold Vettelat at bay, despite appearing to suffer from a blistered right-rear tire.
Vettel, who won the first two races of the season for Ferrari, saw his lead over Hamilton slashed from 17 points to nine. He led for the first 20 laps but fell back, first due to a pit stop and then after a collision with Red Bull's Max Verstappen on the 43rd lap.
After his near-miss with Hamilton cost him a shot at victory, Verstappen recovered well - until he attempted to pass Vettel for third place. Verstappen wound up fifth.
The Brit was soundly beaten by Bottas in qualifying, and couldn't match his team-mate or Vettel for pace in the race.
With China coming hot on the heels of Bahrain the previous weekend, there were still stories from Sakhir to sort out - Max Verstappen and Lewis Hamilton eventually calling a truce after trading barbs following their on-track clash, Pierre Gasly explaining his subtle trolling of McLaren after finishing a career-best fourth (he admitted it was to give Honda credit), and plenty more besides. Bottas has 40 points in third place and Ricciardo is fourth with 37. That's why I sent Chris Gent - the No. 1 mechanic on Daniel's vehicle - up (to the podium) today because those guys have earned us that result. "I just haven't had the pace since yesterday (Saturday), and I struggled with the vehicle".