Krakowlabs released a interesting paper about fuzzing. After a short introduction, they reviewed the different types of fuzzing: “dumb” or “smart” . Basically, dumb fuzzing resumes to sending garbage data to the target to crash the application (Example: to send a huge amount of data). Otherwise, smart fuzzing requires an analyze of the expected data and try to fake them (Example: if an file image is expected, try to use metadata to inject malicious code). For both, they gave some examples with source code.
The paper is available here: Fuzzing for Fun and Profit.