You can do a direct proof, and I do not think one needs to invoke rank-nullity.
let $B = \{v_1,\dots,v_n\}$ be a basis for $\Bbb R^n$.
Consider the set $T(B) \subset \Bbb R^m$.
If $u \in T(\Bbb R^n) = \text{im}(T)$ we have:
$u = T(x)$ for some $x = c_1v_1 + \cdots + c_nv_n \in \Bbb R^n$.
Thus:
$u = c_1T(v_1) + \cdots c_nT(v_n)$, which shows $T(B)$ spans $\text{im}(T)$.
Since $|T(B)| \leq n < m$, we have that the dimension of $\text{im}(T) \leq n < m$.
However, if $\text{im}(T) = \Bbb R^m$, we have that $T(B)$ spans $\Bbb R^m$ leading to:
$m \leq |T(B)| \leq n < m$, a contradiction.
As a general rule, functions can, at best, only "preserve" the "size" of their domain, they cannot enlarge it. Dimension, for vector spaces, is one way of measuring "size".
While it is technically possible to have a function from $\Bbb R^n \to \Bbb R^m$ where $m > n$ (so called "space-filling functions") that is onto, such functions turn out to be rather bizarre and cannot be linear (they do not preserve linear combinations). Linear maps cannot "grow in dimension", for the same reason the column rank cannot exceed the number of rows in a matrix (even if we have more columns than rows).