Disclaimer: I am asking this question solely for educational purposes.
I am trying to chain some function calls using return-oriented programming, exploiting a vulnerable binary which uses strcpy(). One of these function calls should be a call to system() (in order to execute some shell command). Unfortunately, the address of system() contains a NULL byte which will lead for strcpy() to stop copying the payload once this byte is observed.
My question therefore is: what is the best approach to solve this issue?
I've already checked libc for functions similar to system(), but have found nothing. Another idea of mine would be to call fork(), exec(), and wait() subsequently. This would however increase the complexity of the payload.