Depending on which contract you work under, promotional opportunities can be non-existent. I work in a Help Desk environment where all the Tier 1 reps are contractors (CACI) and all the Tier 2 reps are Federal employees. It's almost impossible to get picked up by the federal government to move into a Tier 2 position, which leaves very little room for CACI to promote from within. My contract manager also has no say/control over other CACI contracts, so internally transferring to another job with CACI won't happen unless I apply like any Joe Schmoe on the street.
The benefit package is not that bad, but the pay is horrible in comparison to similar jobs. If I were a federal employee, I would be making 2-3 times as much as I make now to do this job. Also, working for a government Help Desk has a lot more responsibilities than your typical Help Desk position out in the 'real world'. I am not a ticket-documenting receptionist with little-to-no troubleshooting experience. In the scheme of things, I am more of a Tier 2/Tier 3 support person, and my job duties are equivalent to that of a LAN Admin, except that I work on the phones remotely. I am fully capable of being a LAN Admin, but since I work a "Help Desk" job, I am permanently labeled as that, and only that, making it extremely difficult to move up the IT chain outside of this company.
When CACI won the contract for this Help Desk, they severly underbid the other contracting company that held the contract prior to this, and in the process, completely screwed the employees out of the pay they deserved. People that were making $50K+ were told to take a pay cut or find another job. And this set the bar for the rest of us who were hired later on. This is also mainly why CACI has been hiring younger people on this contract - seasoned IT professionals laugh at their offer letters... this company's morals are non-existent when it comes to money.