当前位置:  开发笔记 > 编程语言 > 正文

如何从外面更改argv [0]?

如何解决《如何从外面更改argv[0]?》经验,为你挑选了1个好方法。

我有这样的C代码:

#include 

void x(int argc, char** argv) {
  printf(argv[0]);
}

int main(int argc, char** argv) {
  char* secret = "SECRET";

  if (argc < 2)
    x(argc, argv);
}

我现在想做一个格式字符串攻击来打印shell的秘密.但是,我不知道如何获取我想要argv [0]的字符串以及如何从另一个范围访问数据(因为从x开始,它无法直接寻址指针秘密.

我该怎么办?



1> melpomene..:

在unix中,程序以execve(或其中一个包装器,例如execlp)启动.所有exec*函数都允许您传递任意字符串argv,包括argv[0].

如果您是从shell以交互方式执行此操作,请查看exec内置函数:

( exec -a '%x...' ./prog )

parens创建一个子shell,exec加载并运行./prog到子shell进程中,参数to -a用作argv[0].

至于如何访问变量,请查看生成的汇编代码.如果secret存储在堆栈中并printf从堆栈中提取参数,则可以通过指定足够的%x指令(后跟%s)来获得所需的结果.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有