好的,我处于远程情况,我无权访问远程文件系统,但我可以运行任意 python 代码(除了我不能 fork 进程并且我无权访问 ulimit 和 uname)。
但是,这意味着我可以在任意虚拟内存地址上读写。我知道 python 解释器是静态链接的,所以它没有外部共享对象依赖项。
虽然启用了nx,但奇怪的是aslr似乎被禁用了。
我已经确定并转储了以下内容和位置永远不会改变的区域:
0x00010000:0x00050000 # read only and executable
0x01000000:0x01b80000 # read only and executable
0x11000000:0x1158c000 # writable
# The heap is located between those 2 places and it’s location is chose at random
0xfe500000:0xffffffff # writable
在这种情况下,是否可以重建 ᴇʟꜰ 二进制文件?(它是为本地客户端编译的)。它不必是带有原始标头的原始二进制文件,而只是一个可以从各种解析的 ᴇʟꜰ 段中启动的可执行文件。
更新 :
与普通的 nexe 不同,编译后的 python.nexenacl_interp只能在 Linux 上运行。这意味着 ᴇʟꜰ 标头中的目标 ᴏꜱ 设置为 0x7B (而正常的 nexe 是独立的 ᴏꜱ)。
libc 是 glibc。另见https://groups.google.com/forum/#!topic/native-client-discuss/t54RajuGnPc