Favourite Color

Binary/Reverse Engineering

What's your favorite color? Would you like to share with me? Run the command: ssh color@104.131.79.111 -p 1001 (pw: guest) to tell me!

As the question gives us a ssh connection to a remote server so we check what file it contain and we found these files.

Favourite Color

In this server we found a c file, a binary file, a Makefile and a flag file obviously we cannot open that flag file but after reading that c code we see that it can be opened from that binary file if we get a certain condition so we download that c and binary file from server with scp

$ scp -P 1001 color@104.131.79.111:~/color Your_Directory_Path
$ scp -P 1001 color@104.131.79.111:~/color.c Your_Directory_Path

Now from the c file we see that to satisfy that condition vuln() function should return True but that never happen because it return a output of xor of a number with itself, which is going to be zero always. So we have to find a bug in that file and after reading code we found one gets function is deprecated because it doesn't check for termination character so this can lead to buffer overflow. now we have to find how to use this, for that we have to examine that file and for that i am going to use IDE software To follow along you should know little bit about assembly language and about IDA for ida you can follow this link

To get the flag we have to go to the location of sub esp, 0Ch in side function.Now let's examine the function where it takes the entry for favourite color

Here lea command subract 48 bytes from the stack to make the entry from gets beside it there is 4 byte ebp is already above this 48 bytes so the stack looks like EIP(return address 4bytes) ->EBP(4bytes) ->48bytes. To make this work we have to enter 52 bytes of junk and then return address of line we want to go to. Now we just have to check whether system is little-ending or big-ending, it's just the encoding technique in little-ending address is stored in reverse order and in big-ending normal order. You can check this with lscpu

lscpu | grep Order

The system is little-ending so reverse order now we just have to write a python script to work.

a = 'a'*52
b = '\x57\x86\x04\x08'
print(a+b)

Now store that script to /tmp folder in server and then run

$ (python /tmp/abc.py; cat) | ./color

And you get a shell now you know what to do

cat flag.txt