Their is plenty of information available to your application without using any permissions whatsoever, it wouldn't be possible to write every single file that your application has access to in this answer but i can give you a rough idea.
Applications usually require some useless permissions like checking for network availability, this can be done in several way without using the permission, let's say that you had a simple WebView that accessed a website, Instead of using the permission to check for an active connection, we could just try to open the website and capture the errors, if the error show's that the page couldn't be loaded because of a DNS issue or a network not available message, then most likely your device isn't connected to the internet and you then have the network status without using the permission.
I made an application that collects partition information for building scatter files without using any root access by reading system configuration files and collecting the information MTK Scatter Builder You should get a good idea on what's available by using the crawl for information button inside the application.
As for your contacts, their is probably a way around using the permission.