首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回libc-查找libc的地址和偏移量

返回libc-查找libc的地址和偏移量
EN

Security用户
提问于 2017-08-24 07:33:50
回答 2查看 35.1K关注 0票数 5

因此,我尝试执行一个返回到libc,根据https://sploitfun.wordpress.com/2015/05/08/bypassing-nx-bit-using-return-to-libc/

我通过使用"ldd vuln“找到libc的地址,并使用”read亲自-s /lib/i 386-linux-gnu/libc.so.x grep系统“找到系统的偏移量。

我很难在程序中的fflush命令中找到"sh“的地址。

我尝试了二进制的十六进制,并找到了"sh\x00“的偏移量,但是找不到二进制的基地址。

我不确定我找到的libc地址和系统偏移量是否有效,我也不知道如何找到"sh\x00“字符串的实际地址。

如果我发现地址的方式是错误的,请纠正我,我很乐意在查找字符串地址方面得到帮助:)

先谢谢各位:)

EN

回答 2

Security用户

回答已采纳

发布于 2017-08-26 22:49:52

首先,在处理问题之前,需要检查可执行文件是否在ASLR (https://en.wikipedia.org/wiki/Address_空格_布局_随机化)下运行,如果是这样的话,您需要找到从程序泄漏地址的方法,因为每次libc的地址都会不同。您可以轻松地通过运行gdb->b>info proc映射几次并比较偏移量来检查这一点。如果它们不同,您的可执行文件可能在ASLR下运行。假设没有ASLR保护,使用gdb-> base >info proc映射应该会给出libc的基本地址。为了找到要跳转到的函数的偏移量,您可以使用许多方法,但是使用readelf -s应该可以很好地工作--这将给出从SO基计算出的函数的偏移量( SO +偏移量=代码在运行时的位置)。

为了在运行时找到可执行模块的基址,您可以使用gdb或任何其他调试器并搜索可执行文件的入口点(或者在可执行文件加载到内存后搜索字符串.)。基本上,任何将您的可执行文件加载到内存并允许您查看内存的程序都可以。

linux下可执行文件的地址通常为64位可执行文件为0x400000,而gnu定义的32位可执行文件地址为0x08048000。但是没有什么能阻止别人把入口点改到不同的地址。

在您计算出内存映射之后,您需要在代码中找到小工具,我将把它留给您研究.https://en.wikipedia.org/wiki/Return-to-libc_攻打

也许你可以通过浏览习题来找到更多的答案,例如,protostar stack6应该处理ret2libc,您可以查找演练

编辑:似乎ldd并不总是给出正确的地址,它甚至忽略了在我的系统上禁用ASLR --使用gdb可能更好

票数 3
EN

Security用户

发布于 2020-04-01 17:50:24

这里有两种方法: 1. strings -t x -a /path/to/libc | grep "/bin/sh"->它输出libc中字符串的偏移量。

  1. 使用pwntools:首先用libc=ELF('/path/to/ libc ') libc_binsh=libc.search("/bin/sh\x00").next()定义libc
票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/168101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档