The LEP experiment at CERN (the LHC now inhabits the same tunnels) collided a lot of electrons and positrons to create a lot of Z bosons. The standard model describes these interactions really precisely. And we can observe how often the Z boson decays "invisibly" to particles we can't detect. The rate it does so tells us there are three neutrinos with masses less than the Z boson. So that's established. Could there be more, heavier ones? Possibly.
We observe neutrino oscillations through a variety of channels. We first observed fewer (electron) neutrinos from the sun than expected, suggesting they were oscillating to other flavors. And this has been further observed in neutrinos produced in the atmosphere by cosmic rays, neutrinos produced by decays of particles in beams, and neutrinos from nuclear reactors.
The best explanation, and the one that fits the standard model, is that the pure "flavor" (electron, mu, tau) neutrino states are mixtures of pure "mass" states. And from those different channels, which look at different energies and flavors of neutrinos, we can work out what those mixtures are.
When you go through all the math, it turns out the oscillations depend on the differences of the squares of the masses of the pure mass states. And we observe oscillations that tell us that two of these differences are nonzero. That is, if there are mass states 1, 2, and 3, then we know that (mass 1)^2 - (mass 2)^2 is nonzero, and (mass 3)^2 - (mass 2)^2 is also nonzero. So this implies that at least two of them must have nonzero masses.