Как написать на адрес, если адрес присутствует с другими шестнадцатеричными цифрами в слове - 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.

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

...