The algorithm you linked is known as 3D-DDA. (2D-DDA is the 2D version). When you collide with a voxel it is with either tMaxX, tMaxY, or tMaxZ since that's when the ray intersects that 3d plane. You just need to take:
length = tMax? / rayDirection?
So if you collide with the tMaxX plane then you take:
length = tMaxX / rayDirectionX
where rayDirectionX is the X component of the normalized ray direction. Length in this case is the distance along the ray until it collided. Thus:
intersectionPoint = rayPosition + rayDirection * length
Sidenote: You can take intersectionPointY and intersectionPointZ and modulus them with the voxelSize to get the offset inside of the voxel face. Useful for texture lookups. (Obviously which two axis you modulus with depends on which plane you've hit).