Un soir alors qu'ils sont enfants, Hansel (Cedric Eich) et Gretel (Alea Sophia Boudodimos) sont abandonnés par leurs parents dans la forêt. Les deux enfants finissent par tomber sur la maison en sucreries mais la sorcière qui y habite (Monique Ganderton), les capture et prévoit de les manger. Gretel essaye d'affronter la sorcière qui lui jette un sort, sans effet. Elle délivre son frère et les deux enfants poussent la sorcière dans le four où elle meurt à petit feu...
Quinze ans après, Hansel (Jeremy Renner) et Gretel (Gemma Arterton) se sont lancés dans la chasse aux sorcières et disposent d'un arsenal d'armes modernes (arbalètes, fusils et mitrailleuses). Ils sont alors de passage dans une ville où une femme appelée Mina (Pihla Viitala) est sur le point d'être condamnée au bûcher pour sorcellerie. Hansel et Gretel démentent l'accusation car Mina ne présente pas les stigmates liés à l'usage de la sorcellerie. Les deux frère et s?ur sont ici à la demande du maire car nombres d'enfants ont été enlevés par des sorcières ces derniers temps. Hansel et Gretel sont engagés malgré la résistance de l'exécrable shérif Berringer (Peter Stormare). Les jeunes gens commencent leurs investigations dans une chaumière habitée par une grande sorcière qu'ils tuent après un bref combat. Ils découvrent chez elle que la lune rouge approche, un évènement symbolique pour les sorcières qui justifierait le sacrifice des enfants.
Pendant ce temps, Berringer a engagé des pisteurs qui vont de nuit dans la forêt où ils se font tous tuer par Muriel, une puissante grande sorcière capable de prendre une apparence humaine (Famke Janssen). A la taverne de la ville, Hansel et Gretel font connaissance avec Ben (Thomas Mann), un fervent admirateur. Le dernier pisteur arrive à ce moment-là et explose sous les yeux des personnes présentes. Dans la forêt, la puissante sorcière Muriel discute avec une sorcière cornue (Ingrid Bolsø Berdal) et une sorcière rousse (Joanna Kulig). Muriel fait boire une potion à ses cons?urs en vue de les immuniser contre le feu, sans succès.
Le lendemain, Hansel sympathise avec Mina qui le remercie de son aide. Peu après dans la forêt, Hansel et Gretel tendent un piège à la sorcière cornue qu'ils capturent pour l'interroger en ville sur le motif des enlèvements d'enfants. À la tombée de la nuit, ils comprennent que les sorcières ont besoin de douze enfants, chacun né dans un mois différent de l'année. Avant qu'ils n'aient le temps de secourir la fillette manquante, Muriel et la sorcière rousse attaquent la ville, la première attaquant Gretel et la seconde capturant la fillette. La sorcière rousse enlève la fillette qui est emmenée par un troll (Derek Mears). Muriel assomme Gretel, libère la sorcière cornue et prévoit d'enlever Gretel mais Ben secourt la jeune femme qu'il emmène chez lui. Hansel poursuit la sorcière rousse mais est largué sur un arbre dans la forêt.
Le lendemain, Hansel est secouru par Mina qui soigne ses blessures. Après quoi, les deux jeunes gens font l'amour dans une rivière. Gretel, partie retrouver son frère, est capturée à la lisière de la forêt par Berringer et ses hommes, qui comptent la violer et l'arrêter pour avoir causé l'incendie de la ville. C'est alors que le troll Edward arrive et vient en aide à Gretel en éliminant le shérif et ses hommes. Le troll soigne Gretel en lui disant qu'il aide les sorcières avant de s'en aller. Hansel et Gretel se retrouvent dans une chaumière abandonnée qui se révèle être leur ancienne maison. C'est alors que surgit Muriel qui fait la lumière sur la raison pour laquelle les parents des deux héros les ont abandonnés : leur mère Adrianna était une sorcière blanche. En outre, quinze ans auparavant, à une époque de l'année où une autre lune rouge approchait, il s'est avéré que la lune rouge permettait de préparer une potion qui immunise contre le feu, une des rares façons de tuer les sorcières. La préparation de la potion nécessitait le sacrifice de douze enfants et le c?ur d'une sorcière blanche. Ce devait être celui de Gretel car Adrianna était trop forte pour Muriel. Cette dernière avait alors propagé une rumeur comme quoi Adriana était une sorcière; les villageois accoururent pour la brûler et pendirent le père qui avait juste eu le temps de cacher ses enfants. Muriel les informe ensuite que pour la lune rouge, un sabbat est organisé dans les montagnes. La sorcière enlève ainsi Gretel pour qu'elle soit sacrifiée et blesse Hansel.
Hansel est soigné par Mina, qui se révèle être une sorcière blanche. Avec elle et Ben, Hansel prévoit d'aller délivrer sa s?ur. Mina bénit leurs armes qui rendront les sorcières très vulnérables. A la nuit tombée, Hansel arrive à l'assemblée et ouvre le feu : il tue la sorcière rousse en explosant sa tete avec son fusil a pompe pendant que Mina canarde les sorcière avec une mitrailleuse. Muriel tente de tuer Gretel qui est détachée par Edward; la sorcière cornue tente de tuer les enfants mais Hansel l'abat en lui tirant dans le torse et dans la tete. Les sorcières restantes s'enfuient à balai; Hansel se bat contre des sorcières siamoises. Le jour finit par se lever et c'est trop tard pour le rituel, Muriel s'envole, Gretel tue deux sorcières avec son arbalète et lacère mortellement une sorcière en l'attrapant avec une chaîne servant de lasso; les sorcières qui s'étaient enfuies sont déchiquetées en morceaux en passant à travers des fils invisibles entre deux arbres. Ben tire sur Muriel qui s'écrase un peu plus loin. Hansel, Mina et Ben traquent Muriel et tombent sur la maison en sucreries. Muriel les attaque et porte un coup mortel à Mina. Gretel les rejoint après avoir soigné Edward. À l'intérieur de la maison, le frère et la s?ur se battent contre Muriel et parviennent à la terrasser.
Après cela, les habitants d'Ausbourg remercient Hansel et Gretel d'avoir sauvé les enfants et continuent la chasse aux sorcières avec Ben et Edward comme alliés en commencent par une sorcière du désert qu'ils réussissent à tuer facilement.