Dominik Szoboszlai scored the only goal from the penalty spot as Hungary celebrated their first victory over England since 1962.
Defeat on penalties to Italy in the Euro 2020 final was the only time Gareth Southgate’s side had been beaten in their previous 22 games.
However, an experimental side failed to trouble the hosts, who were roared on by a 30,000 crowd largely consisting of school children.
Hungary were forced to play the game behind closed doors due to the behaviour of fans during their home matches at Euro 2020.
UEFA guidelines allow children under the age of 14 to be given free tickets under such circumstances and the Hungarian Football Federation took full advantage.
Southgate handed senior debuts to Jarrod Bowen and James Justin, but the visitors never got going.
Hungary created the better of the chances, Szoboszlai seeing an effort cleared off the line by Conor Coady and captain Adam Szalai’s ambitious effort from just inside the England half dropping just wide after he spotted Jordan Pickford off his line.
The home side’s pressure paid off when they were awarded a penalty on 64 minutes as substitute Reece James was adjudged to have fouled Zsolt Nagy after the Hungarian left-back controlled a pass in the area.
James was booked as RB Leipzig forward Szoboszlai made no mistake from the spot to put the hosts ahead.
Harry Kane nearly salvaged a point in stoppage time but was inches away from his 50th international goal as his powerful effort flew into the side-netting.
Southgate’s men now have to raise themselves for a trip to Germany on Tuesday before hosting Italy and Hungary later this month.