linux-kernel - Linux针对执行shellcode的安全措施

标签 linux-kernel x86-64 archlinux shellcode

我正在学习计算机安全的基础知识,并且正在尝试执行我编写的一些 shellcode。我按照此处给出的步骤进行操作

http://dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf

http://webcache.googleusercontent.com/search?q=cache:O3uJcNhsksAJ:dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf+own+shellcode&cd=1&hl=nl&ct=clnk&gl= nl

$ cat pause.s
xor %eax,%eax
mov $29,%al     
int $0x80       
$ as -o pause.o pause.s
$ ld -o pause pause.o
ld: warning: cannot find entry symbol _start; defaulting to <<some address here>>
$ ./pause 
^C
$ objdump -d ./pause
pause:     file format elf64-x86_64
Disassembly of section .text:
      08048054 <.text>:
      8048054: 31 c0     xor    %eax,%eax
      8048056: b0 1d     mov    $0x1d,%al
      8048058: cd 80     int    $0x8
$

自从我的暂停程序开始工作以来,我只是将 objdump 输出复制到一个 c 文件中。

测试.c:

int main()
{
    char s[] = "\x31\xc0\xb0\x1d\xcd\x80";
    (*(void(*)())s)();
}

但这会产生段错误。现在,这只能归功于 Arch Linux 的安全措施(?)。那么我怎样才能让它发挥作用呢?

最佳答案

s 所在的页面未映射执行权限。由于您使用的是 x86_64,因此硬件中肯定有 NX 支持。默认情况下,现在代码和数据位于非常独立的页面中,数据没有执行权限。

您可以使用 mmap() 来解决此问题或mprotect()分配或更改页面以获得 PROT_EXEC 权限。

关于linux-kernel - Linux针对执行shellcode的安全措施,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7431986/

相关文章:

linux - 是否可以在 Linux 内核上设置基于角色的安全文件系统

x86-64 - 为什么 1 的补码仍然用于编码向量指令?

c - 如何使用 x86intrin.h

R v3.4.0-2 在 Arch 上无法找到 libgfortran.so.3

linux - IRQ7 上的并行端口 IRQ 处理程序注册

c++ - 使用终端链接 boost::asio

linux - 如何访问系统中所有正在运行的队列?

c - 为什么我的 write 函数打印一个字符串(到 stdout)将随机字符附加到输出?

c - void __iomem * 和 void* __iomem 之间的区别?

c - 对于 x86_64,Sum Array Rows 或 Sum Array Cols 哪个更快?