a way to do this could be the following: transform your camera position in spherical coordinates (http://mathworld.wolfram.com/SphericalCoordinates.html) and perform the rotation easily in this space. Then you can go back to cartesian coordinates.
Another way is the following: build a matrix that align your up vector to z axis and then perform the rotation of the camera position around the camera target in the XY plane (very easy to do) and then use the inverse of the computed matrix to return to the original space.
- AGPX