The draw is enough to take Bucs through, after Zamalek beat AC Leopards 4-1 in El Gouna, Egypt.
Pirates will meet Tunisian giants Esperance on October 4-6 in the semi-final, first leg, while Al Ahly are up against Coton Sport of Cameroon.
Al Ahly started confidently, with some nice passing play, but it was not long before Pirates went on the attack.
Lennox Bacela won an early corner, after his low shot was deflected out. During the resulting play Daine Klate hit a shot onto the arm of an Ahly defender, but the referee denied Pirates’ shouts for a penalty. Ahly were then dispossessed outside the box, but Bacela scuffed his shot wide.
Ahly, relying on long balls to their big forwards, then had a couple of chances of their own. Mohamed Aboutrika got a shot away after some clumsy defending from Pirates, but it was no trouble for Senzo Meyiwa.
Shortly after that Ahmed Abdul Zaher could have put the visitors ahead as he rose above Rooi Mahamutsa to receive a cross, but headed over the crossbar.
Pirates continued with their passing game, utilising Klate and Tlou Segolela on the wings, with Ahly happy to sit back and wait for the counter-attack.
On 25 minutes, news came through that AC Leopards were leading Zamalek 1-0, meaning Bucs needed a win to go through.
Sifiso Myeni hit the side netting on the half-hour mark, after a strong run by Patrick Phungwayo on the left. He beat two and put in the cross, which was half cleared and fell straight to Myeni’s feet just outside the box, but he dragged his shot wide.
On 32 minutes Zamalek equalised in El Gouna, while Klate sent a free-kick just over the bar.
Pirates came close to putting their noses in front, when Segolela turned his man and sent in a great left-footed cross. Klate slid in to meet the ball right in front of goal, but hit his shot inches wide.
Just before half-time Zamalek took the lead against Leopards in the other fixture, meaning the 0-0 scoreline would be enough for Pirates to go through.
Bucs’ heads seemed to drop a little at the start of the second half, and their passing suffered, with too many balls going astray. In fact, both sides took their foot off the pedal, possibly because of the scoreline in Egypt.
Lehlogonolo Masalesa had a chance from just outside the box, but seemed not to be able to decide whether to shoot or pass, and ended up hitting a weak shot that posed no threat to the Egyptians.
A few minutes later Myeni tried a hopeful shot from distance, but it was over the bar.
Zamalek then made it 3-1 against Leopards, and unfortunately it looked as if that result was slowing things down in Orlando, despite the fact that a win for Pirates would have seen them top the group and avoid a meeting with Tunisian giants Esperance in the next round.
De Sa brought Khetowakhe Masuku on for Segolela on 66 minutes, hoping to inject some pace into Bucs' attack.
Thulasizwe Mbuyane should have put Pirates ahead on 70 minutes, when Masuku scuffed the ball between two defenders in the box and found ‘Juju’, but the forward ballooned his shot over the bar from close range.
Ahly then had their best chance of the match when Abdallah El Said beat two defenders and collected a great ball over the top, but he fired his shot inches wide.
Klate came agonisingly close five minutes from time, when he managed to get a head to Masuku’s cross, but Sherif Ekramy made an impressive reaction block.
Roger de Sa brought on Ndumiso Mabena for Bacela in the dying minutes of the game, but he was not able to make an impact and the match ended at 0-0.
Pirates line-up: Meyiwa, Mahamutsa, Lekgwathi, Jele, Phungwayo, Masalesa, Manyisa, Bacela (Mabena 87), Myeni (Mbuyane 69), Segolela (Masuku 65), Klate
Al Ahly line-up: Ekrami; Fathi (Saad Samir 45), Shedid, Abdul-Fadil, Naguib; Rabiea, Shehab, Soliman, Al-Saied; Aboutrika (Nabil 90), Zaher (Da Silva 68)