정화 2년(기원전 91년), 무제의 태자 유거가 자신을 무제에게 참소한 강충을 죽이고 반란을 일으켰다(무고의 난). 조정에서는 곧 진압에 나섰는데, 이때 대홍려 상구성은 힘써 싸운 끝에 장광(張光)을 사로잡았다. 진압 후 상구성은 공로를 인정받아 투후(秺侯)에 봉해졌다.
흉노 정벌
정화 3년(기원전 90년), 흉노가 변경을 노략질하니 조정에서 이를 물리치려 하였다. 이때 상구성은 3만 명의 병력을 이끌고 서하로 출진하였는데, 흉노의 호록고선우가 몸소 정예를 이끌고 고저수(姑且水)를 건너니 상구성은 이를 추격하였지만 결국 물리치지 못하고 돌아갔다. 이에 흉노에서는 대장과 이릉이 3만여 기병을 이끌고 상구성을 추격하였고, 9일 동안 싸웠다. 상구성은 선전하였고, 흉노는 포노수(蒲奴水)에 이르러 전황이 불리하다고 여기고 물러났다.
상구성이 죽은 배경으로는 서로 다른 두 가지 기록이 전해지는데, 《한서》 권17에서는 첨사로서 문제의 종묘에 있었을 때 술에 취하여 술주정을 부렸기 때문이라 하였고 권19에서는 무고에 연루되었기 때문이라고 하였다. 이에 대하여 《자치통감고이》(資治通鑑考異)에서는 상구성은 첨사를 지낸 적이 없다면서 전자의 기록은 잘못되었다고 주장하였다.