首页 > 解决方案 > 可执行堆栈:标志

问题描述

我正在对我的 Ubuntu 18.04、X86_64 机器进行 return2libc 攻击。

为此,我编译了一个简单的 C 程序-z execstack来禁用可执行堆栈标志。

现在查看GNU_STACK region(通过readelf -a)的标志,我RWE启用了标志。

E标志就是exclude标志(说readelf)。

我期待着Xforexecute标志。什么是排除标志,它的用途是什么,为什么没有执行标志?我浏览了一下,但找不到有关此主题的任何信息,因此在此先感谢您的帮助。

使用 readelf -a 编辑更新版本:

Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

Es gibt keine Sektionsgruppen in dieser Datei.

Programm-Header:
  Typ            Offset             VirtAdr            PhysAdr
                 DateiGr            SpeiGr              Flags  Ausr.
  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
                 0x00000000000001f8 0x00000000000001f8  R      0x8
  INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238
                 0x000000000000001c 0x000000000000001c  R      0x1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x00000000000007b0 0x00000000000007b0  R E    0x200000
  LOAD           0x0000000000000e10 0x0000000000600e10 0x0000000000600e10
                 0x0000000000000228 0x0000000000000230  RW     0x200000
  DYNAMIC        0x0000000000000e20 0x0000000000600e20 0x0000000000600e20
                 0x00000000000001d0 0x00000000000001d0  RW     0x8
  NOTE           0x0000000000000254 0x0000000000400254 0x0000000000400254
                 0x0000000000000044 0x0000000000000044  R      0x4
  GNU_EH_FRAME   0x0000000000000620 0x0000000000400620 0x0000000000400620
                 0x000000000000004c 0x000000000000004c  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RWE    0x10
  GNU_RELRO      0x0000000000000e10 0x0000000000600e10 0x0000000000600e10
                 0x00000000000001f0 0x00000000000001f0  R      0x1

标签: linuxmemorystackelfdep

解决方案


E 标志是排除标志(说 readelf)。

中没有“排除”标志ELFE代表“可执行”。

readelf 说

它没有这么说。

虽然X经常用于执行(例如在 的输出中ls),但这不是一个通用约定。


推荐阅读