There are many ways to determine the transfer function of a cascaded \$CR\$ networks such as the one you've shown. I am using the fast analytical circuits techniques or FACTs as described in my book on the subject. The principle is quite appealing since it describes a way to determine transfer functions with the least possible algebra. In some examples, you can even obtain the transfer function by inspection meaning you read the circuit and infer what its time constants are. This is the idea here, determine the time constants \$\tau=RC\$ (or \$\tau=\frac{L}{R}\$ if you had inductors) of the circuit in various conditions and assemble them to form a well-ordered polynomial expression.
Applying the method to a given circuit means splitting the network in a myriad of small individual sketches, each representing a certain combination. What is cool is that when you've identified a mistake somewhere, you can fix the guilty sketch alone and keep the rest intact. You could not do it with the classic brute-force approach. Let's how these sketches look like:
Once the sketches are done, just look at the resistance offered by each energy-storing element - capacitors in our case - and infer the time constants. You need to determine a certain set of combinations but this is easy to remember:
Then you check the transfer function you have determined with the FACTs against that of the brute-force approach:
To determine the oscillation frequency, cancel the imaginary part and find the formula you want for a 3-stage \$RC\$ network.
Finally, let's check if it works with a quick SPICE simulation where the gain of the amplifier corresponds to the insertion loss brought by the network at the calculated frequency. It is 1/29 in this example. If I amplify by that amount, I have exactly a 0-dB loop gain and a phase lag of 0° at the determined frequency: oscillations can be theoretically sustained according to the Barkhausen criterion. In this circuit, a .IC statement gives me the kick I need to crank oscillations: