1

很抱歉,这异常长,我只是想让贡献者在发布之前看到我尝试过的内容。

我的代码:

     #include<stdio.h>
        #include<string.h>
        #include<stdlib.h>

        void nevercalled(){
            printf("nevercalled");
        }

        void gadget1(char payload[]){
            char buff[16];
            strcpy(buff, payload);
        }

    int main(int argc, char** argv){
        gadget1(argv[1]);
        return 0;
}

当我通过这个命令行参数AAAABBBBCCCCCDDDD\x19\x0c\x00\x60并查看前 20 个字时,我得到:

0x603ffeb0: 0x41414141 0x42424242 0x43434343 0x44444444

0x603ffec0: 0x3931785c 0x6330785c 0x3030785c 0x3036785c

0x603ffed0: 0x603fff00 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffee0: 0x60000b9c 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffef0: 0x00000002 0x603fff00 0xe8e8e8e8 0xe8e8e8e8

而不是这样的:

0x603ffeb0: 0x41414141 0x42424242 0x43434343 0x44444444

0x603ffec0: 0x60000c19 0x6330785c 0x3030785c 0x3036785c

0x603ffed0: 0x603fff00 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffee0: 0x60000b9c 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffef0: 0x00000002 0x603fff00 0xe8e8e8e8 0xe8e8e8e8

我认为存储在 argv[1] 中的有效负载在上面的代码中被视为单个字符串,而不是数组字符。我确认它表示为“AAAABBBBCCCCDDDD\\x19\\x0c\\x00\\x60”,这对我没有用,因为它会将地址重新转换为十六进制!

可以肯定的是,我决定直接通过参数来确认这一点(工作)

int main(int argc, char** argv){
    gadget1("AAAABBBBCCCCDDDD\x19\x0c\x00\x60");
    return 0;
}

0x603ffeb0: 0x41414141 0x42424242 0x43434343 0x44444444

0x603ffec0: 0x60000c19 0x60000b04 0xe8e8e8e8 0xe8e8e8e8

0x603ffed0: 0x60000804 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffee0: 0x60000bb8 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffef0: 0x00000002 0x603fff00 0xe8e8e8e8 0xe8e8e8e8

命令行格式:(头疼的0x3931785c返回)

int main(int argc, char** argv){
    gadget1("AAAABBBBCCCCDDDD\\x19\\x0c\\x00\\x60");
    return 0;
}

0x603ffeb0: 0x41414141 0x42424242 0x43434343 0x44444444

0x603ffec0: 0x3931785c 0x6330785c 0x3030785c 0x3036785c

0x603ffed0: 0x60000800 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffee0: 0x60000bc4 0xe8e8e8e8 0xe8e8e8e8 0xe8e8e8e8

0x603ffef0: 0x00000002 0x603fff00 0xe8e8e8e8 0xe8e8e8e8

如何防止 argv[1] 中的有效负载被处理为

  • AAAABBBBCCCCDDDD\\x19\\x0c\\x00\\x60

?

4

0 回答 0