string-formatting - 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?
解决方案
推荐阅读
- html - 如何通过另一个div的背景覆盖图像的一部分?
- python - 提取规则以预测决策树中的子节点或概率分数
- r - R中的“安装包tuneR的退出状态非零”
- java - 为什么我得到“NaN”作为Outprint`?
- php - 在 Woocommerce 中显示基于特定运输类别的产品徽章
- java - 无法解析班级方言
- bash - aws cli:ssm start-session 不使用变量作为参数值
- php - PHPMailer - 工作时总是显示消息
- javascript - Javascript函数只运行一次?尝试多次使用相同的功能
- javascript - Javascript 回调 - 为什么它不起作用?