ClearAll[Global`*] ;
KroneckerProduct[A_ ? MatrixQ, B_ ? MatrixQ] :=
With[{tensor = Outer[Times, Transpose[A], B]},
Flatten[MapThread[Join, tensor, 2], 1]]
A = {{a11, a12}, {a21, a22}} ;
B = {{b11, b12}, {b21, b22}} ;
KroneckerProduct[A, B] // MatrixForm
( a11 b11 a11 b12 a12 b11 a12 b12 ) a11 b21 a11 b22 a12 b21 a12 b22 a21 b11 a21 b12 a22 b11 a22 b12 a21 b21 a21 b22 a22 b21 a22 b22