Minecraft wiki entry for Water-powered_boat_transportation, associated text: The boat is always floating downstream, but at each step, it runs into submerged still-water block that buoys the boat up into the next flow. In this way the boat can climb uphill.