Первый вариант предпочтителен, второй характерен для бюрократической речи.
Правильно: при штурме Берлина, при штурме города Берлина.
О склонении географических названий см. подробно в «Письмовнике».
Этимология слова кикимора очень интересна. Это существительное образовано путем сложения, от кики + мора. Начнем со второй части. Слово мора общеславянское, во многих славянских языках оно обозначает что-то, связанное с нечистой силой, ночными кошмарами, ср. сербохорватское мора 'домовой', 'кошмар', чешское můra 'злое ночное существо; ночной кошмар' (и 'ночная бабочка'), польское mora, zmora 'призрак, кошмар'. Происхождение слова мора точно не установлено; предполагают, что это старое заимствование из германских диалектов. В таком случае оно родственно немецкому Mahr 'кошмар', второй части английского nightmare 'кошмар, страшный сон' и французского cauchemar, в котором вторая часть -mar – заимствование из германских языков (отсюда, кстати, происходит и русское слово кошмар – это заимствование из французского; получается, что в словах кикимора и кошмар исторически можно выделить один и тот же корень).
Что же касается первой части сложения, то она может быть связана и с кика < кыка 'праздничный головной убор (с рогами) замужней женщины', и с древнерусским кыкати 'подавать голос, кликать; кричать; куковать'. Это вполне соотносится со значением слова кикимора – 'нечистая сила в женском образе'; 'лешачиха'; 'лесной нечистый дух в образе женщины'.
Разные справочники дают разные рекомендации (подробнее см. в "Письмовнике"). На практике названия городов из двух слов, если они следуют после родового слова город, чаще не склоняют.
Первый вариант по структуре предложения более логичен.