This is a difficult question and you would probably need to learn more theory in order to understand the different methods available.
But one method that is often used in practice is to calculate the representations and then just find the Brauer character directly from the matrices of the representations. Of course, you have to express the traces of the matrices as sums of roots of unity over the finite field, and then lift this sum to the complex numbers to get the Brauer character, but that is not particularly difficult. (That is not completely true - since the lifting is not uniquely defined, you may have to work hard if you want to make it consistent.)
With ordinary (complex) character tables, it is generally much easier to calculate the characters than the matrices that define the representations, but that is not always the case with modular representations. There are fast algorithms for computing representations over finite fields, using the so-called MeatAxe algorithm.
I am more familiar with Magma than with GAP, and I expect there are similar commands in GAP, but in Magma I can just type
> G := Sym(5);
> I := AbsolutelyIrreducibleModules(G, GF(3));
and I get the five absolutely irreducible representations in characteristic three as group homomorphisms, and so I can just look at the images of elements from the different conjugacy classes. There is a Magma command that does this for you, giving the Brauer character table:
> [BrauerCharacter(i): i in I];
( 1, 1, 1, 0, 1, 1, 0 ),
( 1, -1, 1, 0, -1, 1, 0 ),
( 4, 2, 0, 0, 0, -1, 0 ),
( 4, -2, 0, 0, 0, -1, 0 ),
( 6, 0, -2, 0, 0, 1, 0 )