I started with the file system and the logs rather than the front end, since defacement is usually a symptom. Scanning for recently added and recently modified files turned up several that had been named to pass as part of the core installation. The code inside them was obfuscated, which is not on its own proof of anything, but combined with the timestamps and the placement it was enough to keep pulling. The files turned out to be doing two jobs: injecting the spam content, and hiding themselves from the server so nothing looked wrong from the inside.