A man, who was later named as Tyrone Harris, was shot by Ferguson police at the protest to mark the first anniversary of the killing of unarmed black teenager Michael Brown.
Ferguson police said the man had opened fire on them and now is in a “critical, unstable” condition and due to have surgery.
Police also said he was armed with a stolen gun and they had been tracking him. Four officers have been placed on administrative leave.
Photos from the scene showed a young black man lying bloodied on the ground.
He was face down and handcuffed. In a video posted on Twitter, a man can be heard urging the police to “please, get him some help”, as the injured man lies still.
The wounded man’s name and age have not been released by police.
The St Louis Post-Dispatch identified him as 18-year-old Tyrone Harris, having spoken to his father, the paper said.
The shooting of 18-year-old Michael Brown in Ferguson by white police officer Darren Wilson in August 2014 sparked demonstrations across the US.
It fuelled a national protest movement against racial bias by police officers.
Shots were heard at about 23:15 local time on August 9 as a large crowd gathered on West Florissant Avenue, at the end of a sombre, peaceful day of commemorations.
St Louis County Police Chief Jon Belmar told reporters that after “an exchange of gunfire between two groups” the suspect, believed by police to be armed, left and encountered officers in an unmarked SUV.
The suspect fired on the vehicle, Jon Belmar said, and the plainclothes detectives returned fire from inside the van.
There was then a further exchange of fire after the officers left the vehicle.
The officers were not wearing body cameras, he added.
President Barack Obama announced a federal program to help pay for lapel-mounted cameras for US police to record their interactions in the wake of the nationwide protests on perceived policing injustices.
In the early hours of the morning, police used loudspeakers to urge people still gathered at the scene to disperse, saying “this is no longer a peaceful protest”.
Before this incident, hundreds of people stood silent for four-and-a-half minutes at the spot where Michael Brown was killed, representing the number of hours that his body lay in the street unattended.