思路
1.我们有内置bash命令,可以用enable查看,而想劫持这些命令,我们有如下研究和思考流程
2.bash的内置命令,是否走so库,也就是是否走动态链接库,因为如果对于这些命令直接静态编译到程序中是无法劫持的,但是应该会走so(对于windows都走ntdll.dll,也就是操作系统会通过一个so库做api导出,之后最后走syscall调用具体服务,应该不会自己内置syscall在bash的代码中),也就是我们要确认如下
2.1 bash内置命令是否走so库
2.2 如果不走so则无法劫持
劫持函数调用的方法
1.如果是对于so或dll劫持,只需要劫持导入函数即可,实现其导入函数,也就是替换掉对应的dll或者so文件,
2.如果不是导入劫持,而是程序中函数劫持,windows,需要直接取函数地址,之后替换,或需要在内存中搜索函数特征,之后进行inline劫持
监控.history方法
可以尝试监控.bash_history,这个方法对于bash有用,zsh可能会存在其他路径,并且要用netlink监控,inotify不会返回相应fd节点
pdb与其关系
对于劫持函数其实仅仅是劫持函数地址,也就是知道函数在哪里,有没有pdb,既地址对应什么函数,函数名,其实没什么关系,导入导出表劫持,或内存劫持,对其都没关系
最终结果
验证了所有bash内置的命令,都不走so库
参考资料
api - What is the Linux Equivalent of Kernel32.dll? - Stack Overflow
bash命令审计,记录终端操作指令 | HI~ 杨小样 (yoncan.github.io)
基于 eBPF 的开源项目 eCapture 介绍:无需 CA 证书抓 https 网络明文通讯 | IT瘾 (itindex.net)
perf-tools/uprobe_example.txt at master · brendangregg/perf-tools (github.com)
[原创] ELF Hook总结与代码实现-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com (kanxue.com)
理解glib和glibc(libc.so.6)_ubuntu libc.so.6_zhojiew的博客-优快云博客
namhyung/uftrace: Function graph tracer for C/C++/Rust (github.com)
c++ - Trace libc and system call function calls on Linux? - Stack Overflow
How to Make Static Linked Elf File to Load Ld_Preload .So - ITCodar
shell - How can I access the history buffer in sh? (not in Bash) - Unix & Linux Stack Exchange
自动化反弹Shell防御技术 - 腾讯云开发者社区-腾讯云 (tencent.com)
如何利用AgentSmith-HIDS检测反弹shell - 开发者头条 (toutiao.io)