Как написать на адрес, если адрес присутствует с другими шестнадцатеричными цифрами в слове - PullRequest
0 голосов
/ 26 декабря 2018

Я написал этот код, чтобы посмотреть, смогу ли я изменить переменную '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.

Буду рад, если кто-нибудь сможет помочь.Пожалуйста, прокомментируйте, если я вам не понятен!

...