首页 > 解决方案 > printf 字符串利用返回意外的十六进制

问题描述

我刚刚开始涉足逆向工程,我通过现场溢出看到了一个视频,该视频展示了使用 printf 的字符串格式漏洞。我试图重现他的结果,但没有运气。我的代码和他的视频一样。我使用radare2 来查找我的目标变量的地址。

视频:https ://www.youtube.com/watch?v=0WvrSfcdq1I

radare2 输出: radare2 命令提示符输出

我的代码:

#include <iostream>
using namespace std;

int overwritten;

void vuln(char *sdf) {
    printf("typed stuff! -> ");
    printf(sdf);

    if(overwritten) {
        printf("\nyou overwrote the var!");
    }
}

int main(int argc, char *argv[]) {
    vuln(argv[1]);
}

我遇到问题的部分是他视频中的 7:54。他用 python 脚本打印运行程序'AAAA' + the variable address + 'bbbb' + '%x ' * 200。他的视频中的输出是被 41414141 和 42424242 包围的变量地址。这是我观察到的输出-> output。为什么我什至看不到 41s 和 42s?

标签: string-formattingreverse-engineeringoverwrite

解决方案


推荐阅读