The accident happened at the end of a railway line in Richmond, in the city’s north-west, about 10:00 local time on Monday (23:00 Sunday GMT).
A 21-year-old man suffered a broken leg. Another 15 people were treated for minor injuries, paramedics said.
Police said they were investigating why the train did not stop.
“These people are very lucky – it was chaos – things could have been much, much worse,” said Supt Paul Turner, from New South Wales Ambulance.
One witness who saw the aftermath of the crash said it was a “very distressing scene”.
“[There were] very chaotic scenes of emergency services trying to get people off the platform,” Broady Graham told the BBC.
The train had been slowing down to stop when the accident happened, police said.
Sydney Trains chief executive Howard Collins told reporters the train had “hit the buffers pretty hard”, but had not derailed. (Courtesy BBC)