【问题标题】:format string exploitation, how can I retrieve saved istruction pointer?格式字符串利用,如何检索保存的指令指针?
【发布时间】:2014-05-09 18:42:24
【问题描述】:

我的漏洞利用有问题(锻炼身体)。 传递给我的易受攻击程序的字符串已经准备好了,除了我要写入的目标地址,当然是当前保存的$eip。

我怎样才能找回它?答案似乎很简单,当然通过调试,停止执行并查看打印堆栈的地址。好的,假设现在我检索到了它,问题是我启动了一个未使用 -g 选项编译的可执行文件,所以无法设置断点......那我该怎么做?

注意,两个堆栈(一个用-g编译的文件和一个没有它的文件)是不同的!!不同的堆栈,所以不同的 $eip 地址(以及值)。

【问题讨论】:

  • 当然即使没有调试信息也可以设置断点,只是不能使用行号。符号表仍然存在(除非可执行文件已被剥离),因此将其加载到反汇编程序中,找到您感兴趣的函数的地址并查看程序集以确定您有兴趣设置的位置断点。然后通过程序地址设置断点。
  • 好的,现在我有了地址,当我尝试设置断点时,它说:“使断点在未来共享库加载时挂起”所以当我运行我的代码时,断点似乎不存在。
  • 你用什么命令来设置这个断点?此消息通常意味着,您告诉调试器的任何内容都被解释为编译单元名称而不是程序地址。
  • 好的,我成功了,我在gdb会话中找到了地址,漏洞利用就完成了。但尽管如此,当我运行可执行文件时,shell 没有出现!!!我尝试输入之前找到的相同地址(以及许多其他地址),但保存的 eip 的地址似乎不同!
  • 哈哈,是的,我原以为你会遇到不同的地址。您刚刚体验的是一种称为地址空间布局随机化 (ASLR) 的漏洞利用缓解技术。简而言之,操作系统在地址空间的随机位置加载可执行文件的部分,正是为了减轻您正在调查的利用技术。 ASLR 已在几年前作为大多数操作系统的标准功能引入。

标签: c exploit format-string


【解决方案1】:

为了以后的阅读,我终于成功了!我刚刚写了一个脚本来循环遍历所有可能的地址(在有限的范围内以减少时间),然后我找到了它;) Tunarock 1 ASLR 0 – Tunarock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多