You want a perspective correct texture mapping. What you see is an affine transformation, it doesn't take depth into account.
This link explains the problem and suggests how to solve it:
http://www.reedbeta.com/blog/2012/05/26/quadrilateral-interpolation-part-1/
I did this myself but from what I recall you would pass a 3rd attribute in addition to the UV coordinates so you would have a homogeneous texture vector passed from the vertex shader to the fragment shader. In the fragment shader you would divide the UV by this 3rd argument and use that to sample the texture.
Sadly I don't have that code in front of me so this is the best I could do. But the page I linked should lead you to the solution.