I would write it using replicateM
from Control.Monad:
import Text.ParserCombinators.Parsec
import Control.Monad (replicateM)
pString :: Parser String
pString = do string "s:"
n <- fmap read (many1 digit)
string ":\"" -- Bug fix; you weren't picking up the colon
s <- replicateM n anyChar
string "\";"
return s
Testing it in ghci:
*Main> parse pString "" "s:12:\"123\";6789012\";"
Right "123\";6789012"