[proofplan]
We must show that the formula $f_*([\gamma])=[f\circ\gamma]$ is meaningful on based homotopy classes, that it defines a group homomorphism, and that these homomorphisms respect identities and composition of based maps. Well-definedness follows by composing a based homotopy in $X$ with the map $f:X\to Y$. The homomorphism property follows because composition with $f$ commutes with concatenation of based loops. The functor laws then follow directly from identity maps and associativity of ordinary function composition.
[/proofplan]
[step:Show that a based map sends based loops to based loops]
Let $I:=[0,1]$. Let $f:(X,x_0)\to(Y,y_0)$ be a morphism in $\mathbf{Top}_*$, so $f:X\to Y$ is continuous and $f(x_0)=y_0$. Let
\begin{align*}
\gamma:I &\to X
\end{align*}
be a based loop at $x_0$, meaning $\gamma$ is continuous and $\gamma(0)=\gamma(1)=x_0$.
The composite
\begin{align*}
f\circ\gamma:I &\to Y
\end{align*}
is continuous as a composite of continuous maps. Its endpoints satisfy
\begin{align*}
(f\circ\gamma)(0)=f(\gamma(0))=f(x_0)=y_0,
\qquad
(f\circ\gamma)(1)=f(\gamma(1))=f(x_0)=y_0.
\end{align*}
Thus $f\circ\gamma$ is a based loop at $y_0$.
[/step]
[step:Prove that the induced map is well-defined on based homotopy classes]
Define a set map
\begin{align*}
f_*:\pi_1(X,x_0)&\to\pi_1(Y,y_0)\\
[\gamma]&\mapsto [f\circ\gamma].
\end{align*}
We prove that this definition is independent of the representative $\gamma$.
Suppose $\gamma_0:I\to X$ and $\gamma_1:I\to X$ are based loops at $x_0$ with $[\gamma_0]=[\gamma_1]$ in $\pi_1(X,x_0)$. By definition, there exists a based homotopy
\begin{align*}
H:I\times I&\to X
\end{align*}
such that
\begin{align*}
H(s,0)&=\gamma_0(s),&
H(s,1)&=\gamma_1(s),&
H(0,t)&=x_0,&
H(1,t)&=x_0
\end{align*}
for all $s,t\in I$.
Define
\begin{align*}
K:I\times I&\to Y\\
(s,t)&\mapsto f(H(s,t)).
\end{align*}
The map $K$ is continuous because $K=f\circ H$. For all $s,t\in I$,
\begin{align*}
K(s,0)&=f(H(s,0))=f(\gamma_0(s))=(f\circ\gamma_0)(s),\\
K(s,1)&=f(H(s,1))=f(\gamma_1(s))=(f\circ\gamma_1)(s),\\
K(0,t)&=f(H(0,t))=f(x_0)=y_0,\\
K(1,t)&=f(H(1,t))=f(x_0)=y_0.
\end{align*}
Hence $K$ is a based homotopy from $f\circ\gamma_0$ to $f\circ\gamma_1$. Therefore
\begin{align*}
[f\circ\gamma_0]=[f\circ\gamma_1]
\end{align*}
in $\pi_1(Y,y_0)$, so $f_*$ is well-defined.
[/step]
[step:Verify that the induced map preserves loop concatenation]
Let $\gamma:I\to X$ and $\delta:I\to X$ be based loops at $x_0$. Their concatenation
\begin{align*}
\gamma * \delta:I&\to X
\end{align*}
is defined by
\begin{align*}
(\gamma * \delta)(s)=
\begin{cases}
\gamma(2s), & 0\le s\le \frac{1}{2},\\
\delta(2s-1), & \frac{1}{2}\le s\le 1.
\end{cases}
\end{align*}
For every $s\in I$,
\begin{align*}
(f\circ(\gamma * \delta))(s)=
\begin{cases}
f(\gamma(2s)), & 0\le s\le \frac{1}{2},\\
f(\delta(2s-1)), & \frac{1}{2}\le s\le 1,
\end{cases}
\end{align*}
which is exactly the concatenation $(f\circ\gamma)*(f\circ\delta)$. Therefore
\begin{align*}
f\circ(\gamma * \delta)=(f\circ\gamma)*(f\circ\delta).
\end{align*}
Using the group operation in the fundamental group, we obtain
\begin{align*}
f_*([\gamma][\delta])
&=f_*([\gamma * \delta])\\
&=[f\circ(\gamma * \delta)]\\
&=[(f\circ\gamma)*(f\circ\delta)]\\
&=[f\circ\gamma][f\circ\delta]\\
&=f_*([\gamma])f_*([\delta]).
\end{align*}
Thus $f_*:\pi_1(X,x_0)\to\pi_1(Y,y_0)$ is a group homomorphism.
[/step]
[step:Check that identity maps induce identity homomorphisms]
Let $(X,x_0)$ be a pointed topological space, and let
\begin{align*}
\operatorname{id}_X:X&\to X
\end{align*}
be the identity map. This is a based map $(X,x_0)\to(X,x_0)$ because $\operatorname{id}_X(x_0)=x_0$.
For every based loop $\gamma:I\to X$ at $x_0$,
\begin{align*}
(\operatorname{id}_X)_*([\gamma])
&=[\operatorname{id}_X\circ\gamma]\\
&=[\gamma].
\end{align*}
Hence $(\operatorname{id}_X)_*=\operatorname{id}_{\pi_1(X,x_0)}$.
[/step]
[step:Check that composition of based maps induces composition of homomorphisms]
Let
\begin{align*}
f:(X,x_0)&\to(Y,y_0),&
g:(Y,y_0)&\to(Z,z_0)
\end{align*}
be morphisms in $\mathbf{Top}_*$. Thus $f:X\to Y$ and $g:Y\to Z$ are continuous, $f(x_0)=y_0$, and $g(y_0)=z_0$. Their composite
\begin{align*}
g\circ f:X&\to Z
\end{align*}
is continuous and satisfies $(g\circ f)(x_0)=g(y_0)=z_0$, so $g\circ f:(X,x_0)\to(Z,z_0)$ is a based map.
For every based loop $\gamma:I\to X$ at $x_0$,
\begin{align*}
(g\circ f)_*([\gamma])
&=[(g\circ f)\circ\gamma]\\
&=[g\circ(f\circ\gamma)]\\
&=g_*([f\circ\gamma])\\
&=(g_*\circ f_*)([\gamma]).
\end{align*}
Therefore
\begin{align*}
(g\circ f)_*=g_*\circ f_*.
\end{align*}
[/step]
[step:Conclude that the assignment is a functor]
The preceding steps show that every object $(X,x_0)$ of $\mathbf{Top}_*$ is assigned a group $\pi_1(X,x_0)$, every morphism $f:(X,x_0)\to(Y,y_0)$ is assigned a group homomorphism $f_*:\pi_1(X,x_0)\to\pi_1(Y,y_0)$, identity morphisms are sent to identity homomorphisms, and composition of morphisms is preserved. Hence the assignment defines a covariant functor
\begin{align*}
\pi_1:\mathbf{Top}_*&\to\mathbf{Grp}.
\end{align*}
This is precisely the fundamental group functor.
[/step]