C#'s order of operations evaluates % before +. Therefore, current + 1 % target.Length is more like current + (1 % target.Length). Since 1 % anything always equals 1, you’re essentially just incrementing current by 1 each time.
To fix this, change it to (current + 1) % target.Length.
public Transform[] target;
public float speed;
private int current;
void Update()
{
if (transform.position != target [current].position)
{
Vector3 pos = Vector3.MoveTowards (transform.position, target[current].position, speed * Time.deltaTime);
GetComponent<Rigidbody> ().MovePosition (pos);
}
else
{
current = (current + 1) % target.Length;
}
}