Я написал этот код, чтобы посмотреть, смогу ли я изменить переменную 'target' с помощью атаки форматной строки в x64.
#include<stdio.h>
int target;
int main(int argc , char **argv)
{
printf(argv[1]);
printf("\n\nTarget variable is at: %p" , &target);
if(target)
printf("Target Modified!");
return 0;
}
Поскольку каждое слово в x64 имеет размер 8 байтов, адрес целипеременная должна быть записана в виде 8 байтов.
Но здесь проблема в том, что адрес целевой переменной равен
0x555555755034 (в форме 0xAABBCCDDEEFF)
, нотак как размер слова составляет 8 байт, я должен написать этот адрес что-то вроде
0x0000555555755034 (в форме 0x0000AABBCCDDEEFF).
но когда я запускаю следующую команду, я вижу, что она всегда присутствуетс некоторыми другими шестнадцатеричными цифрами, такими как 5ecdAABBCCDDEEFF.
./code $(python -c 'print "\x34\x50\x75\x55\x55\x55"+"-%p"*131')
Чтобы сформировать правильный адрес, я попытался добавить две "\ 00" перед целевым адресом, например
./code $(python -c 'print "\x34\x50\x75\x55\x55\x55\x00\x00"+"-%p"*131')
, нотерминал жаловался, что «\ x00» будет игнорироваться, поскольку он завершает строку.
Поэтому мой вопрос: как мне написать адрес, который выглядит как 0xAABBCCDDEEFF, но присутствует в словес другими шестнадцатеричными цифрами, такими как 0xed4cAABBCCDDEEFF.
Я буду рад, если кто-то может помочь.Пожалуйста, прокомментируйте, если я вам не понятен!