A leak in binary exploitation is basically 85% of the pwning process.
A leak is practically achieved by leveraging the functionality of the binary in order to get value(s) back from it. One of the simplest and probably the most common way of leaking data is by ROP-ing to a function which prints something to the stdout.
Well, all the print-like functions in programming require a reference/pointer to the address whose content you want to print (leak in our case). Having said that, what would've happened if you call puts() with an argument like 0x12345 (obviously that's an invalid address but you get my point)? That'd make puts() think "oh damn, looks like I gotta print the content of the address 0x12345, let's do that!".
I've basically given you a leak 101 tutorial. Use it wisely and pwn the binary. That's more than enough intel.
Best of luck.