Me arriesgaré y supongo que cualquier directorio en el que su usuario tenga permiso para escribir está montado como noexec, lo que significa que no podrá ejecutar nada directamente. Para ejecutar un script de shell a pesar de esto, siempre puede hacer bash script.sh
si al hacer ./script.sh
falla con un error de permiso denegado. Debe intentar buscar cualquier directorio en el que pueda escribir desde el que también pueda ejecutar. Si no existe ninguno, entonces tener gcc no te ayudaría, ya que no pudiste ejecutar el código que genera.
Para explotar DirtyCow, necesita invocar varias llamadas al sistema. Esto no se puede hacer desde un script de shell. O bien necesitas usar un lenguaje de scripts suficientemente sofisticado como Python y volver a escribir el exploit en él, o debes comprometer un binario que tienes los derechos para ejecutar y hacer que ejecute shellcode para realizar el ataque. Si no puedes hacer eso, te sugiero que practiques primero la explotación binaria y el desarrollo de shellcode para aprender a hacerlo, o esto será bastante difícil.