Is there any way to snap a face of object to other face of other object without addon?
You can do it using an empty:


Create an 'arrows' empty (arrows will show objects orientation)
Set snapping option to face, this way:





Snap the empty to the red surface:





Parent the cylinder to the empty (select the cylinder then select the empty and use CtrlP
Move the empty to the blue surface:




Orientation of the cylinder is inverted, so rotate the empty using local coordinates around Y with 180°: RY180




Select the cylinder
Clear parent using AltP and choose "clear and keep transformation"