While it's not my best work, here's me answer in Haskell, 83 characters.
f n = s [2..n] n
s [] _ = []
s (p:z) n = p:s [x | x<-z, mod x p /= 0, mod n x == 0] n
I'm sure there's more that could be done, but for now it's good.
Edit: Rearranged things to shave off a character, less efficient, but smaller.