Stirling took a surprise lead early lead on seven minutes when captain Brian Allison scrambled the ball into the back of the net from a corner.
Four minutes later, Rangers nearly hit back through a corner of their own. Fraser Aird whipped it in from the right-hand side and McCulloch, who got up highest and just headed wide of the post.
Rangers had another chance on 13 minutes when a free kick was cut back to McCulloch on the edge of the area, but the forward's strike was just wide.
The away side continued to pile on the pressure as Aird worked his way through midfield on 15 minutes, beating two men before sliding through Dean Shiels, who was offside.
Two minutes later, tempers began to flare as Aird was booked for a challenge on David McClune.
Rangers came close again on 23 minutes when Aird's curled cross was glanced past the goalkeeper and off the inside of the post by McCulloch.
Aird was the creative force for Rangers, running at the home side's defence again on 31 minutes, though his shot was dragged wide.
Stirling had an opportunity to double their lead on 36 minutes when Ian Black lost possession, but the forward line could not take advantage.
Rangers broke well on 39 minutes when McCulloch played Anestis Argyriou through, but the Greek winger's drive just went past the post.
McCulloch was involved again on 42 minutes, striking the ball well from 25 yards, but the Stirling keeper was equal to it.
The half-time whistle went with Stirling still in front by a goal to nil.