web3 has a way to read a private value from a contract if you know the location of the private value. https://ethereum.stackexchange.com/questions/13910/how-to-read-a-private-variable-from-a-contract
The question is how to know the location of a private value in a contract?
If you have the address of that contract, then you can reverse engineer its byte code and find the position of that private value. If you don't know how storage works in ethereum, you can take a look at this.
As for how to reverse engineer, in etherscan it has a built-in decompile tool. For example, if you take a look at some contract's address, there will have a decompile button.