All you need to do is to generate a so called brute-force rule. This is just all possible rules required to generate all possible combinations. This can be done with maskprocessor.
The generated rule file can be used to perform Hybrid attacks with hashcat. All you need is to pass the rule file to hashcat via
This appends 0000 - 9999 to each words from your dictionary:
$ ./mp64.bin -o bf.rule '$?d $?d $?d $?d'
This prepends aa - zz to each words from your dictionary:
$ ./mp64.bin -o bf.rule '^?l ^?l'