Brainfuck, 70 bytes
I'm sure this could be golfed a little bit. This version only works for single-digit numbers; feel free to modify it to work on larger numbers too.
Edit: If it's allowed to use a single character's ASCII value as the input, the resulting code is below. Only 60 bytes.
,>++++++[<-------->>>+++++++<<-] [this gets a single character from
input into the first cell, subtracts 48 to convert it to an integer
representation, and puts 42 in the 3rd cell (ASCII '*').]
<[ while the first cell is not zero do
>+ add 1 to 2nd cell (empty when we start)
[->+>.<<] [while 2nd cell is not empty subtract 1 and print an *.
Make a copy in 3rd cell.]
>[-<+>] copy 3rd cell value back to 2nd cell
++++++++++.[-] [put '\n' in 3rd cell, print, clear]
Edit: Here is a version that works for numbers up to 255, reading the text representation of the number followed by EOF. If your favorite interpreter has unbounded cells it will work up to 999.
Pointer is one past the end of a run of digits containing input.
Assumption: input < 256.
Add ten times most significant digit to second and ten times the
second to the third to get it in one cell.
Store 42 '*' in the cell 3 to the right
[ While first cell is not empty
>+ Add 1 to 2nd cell
[->+>.<<] [make a copy in 3rd cell, print '*']
>[<+>-] copy 3rd back to 2nd
++++++++++.[-] print newline and clear 3rd
<<- subtract 1 from 1st and continue