An example of a context-sensitive grammar for a given language
Your request is easily served!

$$\begin{array}{lcl}
   &amp;S  &amp;\to &amp;abab\\
   &amp;ba &amp;\to &amp;bbBa\\
   &amp;Ba &amp;\to &amp;aB\\
   &amp;Bb &amp;\to &amp;bb\\
   &amp;ba &amp;\to &amp;bAaa\\
   &amp;bA &amp;\to &amp;Ab\\
   &amp;aA &amp;\to &amp;aa\\
\end{array}$$

&nbsp;

There is some theory to help you make sense of this solution.

Let us first consider a simpler language that manifests the same difficulty: $L = \{a^nb^ma^n ∣
n,m \ge 1\}$. Imagine it as a sea of $b$ between the shores of $a$, if you please.

We would like to grow the shores so that they are always the same size. One immediate way is to
have a collection of rules like $a + b^m + a \to aa + b^m + aa $. But we see it will not serve our
needs, as, our collection being finite (grammars are required to have a finite set of rules),
there is always some choice of $m$ that is not accomodated. So evidently there is a trick.

The trick is to introduce a non-terminal "ship" that will sail across the sea and deliver the
information from one shore to the other. When the left shore grows, it will send a ship to the
right shore, and when the right shore receives a ship, it will also grow, thus maintaining the
required equilibrium. How can we sail a ship? $Ba \to aB$ is one way to move it one unit of sea
rightwards. What remains to be put in place is a shipyard $ba \to bbBa$ and a port $Bb \to bb$.

Here is what we get:

$$\begin{array}{lcl}
   &amp;S  &amp;\to &amp;bab\\
   &amp;ba &amp;\to &amp;bbBa\\
   &amp;Ba &amp;\to &amp;aB\\
   &amp;Bb &amp;\to &amp;bb\\
\end{array}$$

I am sure you can see how to extend this to your original language: you will need the sea
people to also send some sort of messenger golems $A$ across the land to the sea on the other side of
$b$.

Happy adventures in fantasy grammar land!