Use connection of A and B as an example. Their communications were encrypted by Public Key Encryption. Before they exchange their public key, ISP MITM attacked. A got "B"'s public key (ISP generated) B got "A"'s public key (ISP generated)
A send message X to B.
A->"B"'s public( (A's private(X) )->ISP
When ISP got that ciphertext(C), ISP decrypt it by "B"'s private( (A's public(C)) ) Then, ISP got the message.
After that, ISP encrypt message X for B.
ISP->B's public( "A"'s private(X) )->B
Then B decrypt ciphertext(C) by B's private( "A"'s public(C))
Then B got message X and they don't know ISP got the message.
Is it possible? Sorry for my poor English and explanation.