首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hack ELF Loader:用户态execve

下的loader:用户态execve。...研究用户态execve的实现,起初是从攻击的方向去思考的,在linux主机安全中,使用shell命令进行攻击是非常常见的场景,无论是横向移动,还是种马,很难不应用shell命令。...在之前的文章中,无"命令"反弹shell-逃逸基于execve的命令监控(上) 分享过关于shell命令的各种监控方式,其中最难绕过的是内核态的execve监控。...二.How:如何设计linux elf loader how 用户态execve 是仿照linux内核中execve syscall的原理 ,在应用层实现程序的加载和运行,如果做过windows pe...uint32_t a_val; } a_un;} Elf32_auxv_t; 摘录几个比较重要的类型值,这几个类型值都是比较常见的,而且是动态链接器在启动时所需要的: [moylhncy6c.png

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

反弹shell-逃逸基于execve的命令监控(上)

linux中,启动外部进程,是通过execve系统调用进行创建的,我们使用strace 打印一下在bash中启动ls的系统调用,第一句就是通过execve启动ls。 ?...但是我们在开发linux程序的时候,执行系统命令,并没有直接使用execve系统调用,这是因为libc/glibc库对execve系统调用封装成了函数,方便我们调用。.../tree/master/drivers/connector 其中 connectors.c 和 cnqueue.c 是 Netlink Connector 的实现代码,而 cnproc.c 是一个应用实例名为进程事件连接器...shell解释器很多,以bash举例: 通过 -c 参数输入命令 通过stdin输入命令。 在这两个地方将写文件的代码嵌入进去即可。...[root@VM_0_13_centos ~]# tcsh -c "echo hello" hello 3.绕过内核态execve syscall 只要你使用了execve执行了命令,就绝对逃不过内核态

3K20

无命令反弹shell-逃逸基于execve的命令监控(上)

linux中,启动外部进程,是通过execve系统调用进行创建的,我们使用strace 打印一下在bash中启动ls的系统调用,第一句就是通过execve启动ls。 ?...但是我们在开发linux程序的时候,执行系统命令,并没有直接使用execve系统调用,这是因为libc/glibc库对execve系统调用封装成了函数,方便我们调用。...[root@VM_0_13_centos ~]# tcsh -c "echo hello" hello 3.绕过内核态execve syscall 只要你使用了execve执行了命令,就绝对逃不过内核态...其实我的需求很简单: 我既想要linux命令原有的功能,又不想用execve syscall的方式启动。 想了想,为什么不能将linux 命令直接当成shellcode来执行呢?...2b07db3c02e8d33f44c6ae25c5461dd9.dump 8dfca97bd479e458c780af4f051850ce ......

1.5K20

Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)

因此内核在当问用户空间内存时, 需要多加小心, 而__user注释则允许自动化工具来检测时候所有相关事宜都处理得当 do_execve函数 do_execve的定义在fs/exec.c中,参见 http...://lxr.free-electrons.com/source/fs/exec.c?...v=4.5#L1628 更早期实现linux-2.4 linux-3.18引入execveat之前do_execve实现 linux-3.19~至今引入execveat之后do_execve实现 do_execveat...程序的加载do_execve_common和do_execveat_common 早期linux-2.4中直接由do_execve实现程序的加载和运行 linux-3.18引入execveat之前...结构体中也记录了重要信息, 内核开始调用exec_binprm执行可执行程序 释放linux_binprm数据结构,返回从该文件可执行格式的load_binary中获得的代码 定义在fs/exec.c

3.7K31

【Android 逆向】ART 函数抽取加壳 ⑤ ( unistd.h#execve 函数分析 | 使用自定义的 myexecve 函数替换 libc.so#execve 函数 )

文章目录 一、bionic/libc/include/unistd.h#execve 函数分析 二、使用自定义的 myexecve 函数替换 libc.so#execve 函数 在 【Android...在 【Android 逆向】ART 函数抽取加壳 ③ ( 禁用 dex2oat 操作 HOOK 点介绍 | 集成 InLineHook ) 博客中 , 介绍了 HOOK 点 , 以及 集成 HOOK C...代码的库 InLineHook ; 在 【Android 逆向】ART 函数抽取加壳 ④ ( 对 libc.so#execve 函数进行内联 HOOK 操作 ) 博客中 , 对 libc.so#execve.../unistd.h#execve 函数分析 ---- libc.so#execve 函数 定义在 Android 源码的 " bionic/libc/include/unistd.h " 头文件中 ,...int 类型 ; 该函数指针在进行 " hook\include\inlineHook.h " 中定义的 " registerInlineHook " 函数时 被赋值 ; 复杂函数指针参考博客 【C

34820

Linux下程序是如何被执行的

之前写过一篇文章 Linuxc语言中的main函数是如何被调用的,该篇文章侧重于从user space层面讲程序的运行,而文章中提到的有关kernel space层面的相关系统调用,比如fork、execve...今天我们主要来看下execve系统调用,直接看代码: // fs/exec.c SYSCALL_DEFINE3(execve, const char __user *,...(getname(filename), argv, envp); } 该方法调用了do_execve: // fs/exec.c int do_execve(struct filename *filename...(fd, filename, argv, envp, flags, NULL); } 该方法又调用了__do_execve_file: // fs/exec.c static int __do_execve_file...好了,到这里,整个程序的内核部分的执行流程就讲完了,结合本文开始提到的那篇文章 Linuxc语言中的main函数是如何被调用的,有关linux下程序的执行就全部讲清楚了。

3.1K20

计算机编程语言的本质

图片开发后端有很多的编程语言,目前比较流行的就是python ,c,cpp,java,js,php,rust,golang ..图片在互联网公司,后端用用的服务器主要是Linux 操作系统为主,发行版本有很多...图片图片java,rust,golang,php,python,c,c++等语言它们的可执行文件里的内容都是按照Linux os的ELF格式进行封装。...;}编译后文件是ELF文件图片启动示例程序启动示例程序图片同样的也是execve,write系统调用函数。php编程语言在Linux os 的运行//demo.php<?...os 系统调用函数上面我们演示了golang,java,rust,php编程语言【其它编程语言也是一样】,它们启动到运行都是调用了Linux 的系统函数execve,write,【其实linux 的系统调用函数很多...像execve,write系统调用函数在linux0.1版本【1991年发布的操作系统】就已经提供了。

613241

记一次有趣的挖矿病毒

0 前言 本病毒使用了去符号表、敏感信息混淆、int 0x80执行系调函数、sh -c 执行bash脚本获取相关信息等技术来做免杀处理,但是不足的点也很明显: 1)top命令可以直接查看病毒进程占用...方法: 1)将ida dbgsrv目录下的linux_server放在linux虚拟机中,以root形式运行linux_server,如下图。 ?...当可执行bash脚本被解密后,系统通过sys_execve(bin/sh)的方式呼唤起shell,然后通过sh -c执行bash的脚本。 ?...这里有一点需要注意的是病毒执行sys_execve的方式并不是直接调用函数sys_execve,而是采用了int 0x80的方式。...比如需要执行sys_execve。 1)首先查看资料得知sys_execve的序号是11。接着病毒将此序号传入代码中等待。

1.3K20

万字图文 | 你写的代码是如何跑起来的?

然后在子进程中调用 execve 将执行的程序文件加载起来,然后就可以调到程序文件的运行入口处运行这个程序了。 在上一篇文章《Linux进程是如何创建出来的?》...//file:fs/exec.c SYSCALL_DEFINE3(execve, const char __user *, filename, ...) { struct filename *path...return do_execve_common(filename, argv, envp); } execve 系统调用到了 do_execve_common 函数。我们来看这个函数的实现。...//file:fs/exec.c static int do_execve_common(const char *filename, ...) { //linux_binprm 结构用于保存加载二进制文件时使用的参数...要想实现加载并运行另外一个程序,那还需要使用到 execve 系统调用。 在 execve 系统调用中,首先会申请一个 linux_binprm 对象。

50730
领券