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

在已知PID的不同进程中为bash设置陷阱

在已知PID的不同进程中为bash设置陷阱,可以使用ptrace系统调用。ptrace允许一个进程(称为追踪者)控制另一个进程(称为被追踪者)的执行。这可以用于调试、分析或修改被追踪者的行为。

以下是一个简单的示例,展示了如何在已知PID的不同进程中为bash设置陷阱:

代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s <pid>\n", argv[0]);
        return 1;
    }

    pid_t pid = atoi(argv[1]);

    if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) == -1) {
        perror("ptrace attach");
        return 1;
    }

    int status;
    waitpid(pid, &status, 0);

    ptrace(PTRACE_CONT, pid, NULL, NULL);

    return 0;
}

这个程序接受一个PID作为参数,然后尝试附加到该进程。如果成功,它将等待进程停止,然后继续执行。这将导致被追踪者的所有系统调用被中断,从而允许追踪者检查和修改参数和返回值。

请注意,这个示例仅用于演示目的,实际上设置陷阱的过程可能更复杂。此外,这种方法可能会导致安全问题,因此在使用之前,请确保了解所有相关的风险和法律责任。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

eBPF 入门开发实践指南四: eBPF 捕获进程打开文件系统调用集合,使用全局变量过滤进程 pid

本文是 eBPF 入门开发实践指南第四篇,主要介绍如何捕获进程打开文件系统调用集合,并使用全局变量 eBPF 过滤进程 pid。... eBPF 捕获进程打开文件系统调用集合 首先,我们需要编写一段 eBPF 程序来捕获进程打开文件系统调用,具体实现如下: #include #include <bpf/...这个函数通过使用 bpf_get_current_pid_tgid 函数获取调用 openat 系统调用进程 ID,并使用 bpf_printk 函数在内核日志打印出来。...使用全局变量 eBPF 过滤进程 pid 在上面的程序,我们定义了一个全局变量 pid_target 来指定要捕获进程 pid。... eBPF 程序,我们还可以通过定义一个全局变量 pid_target 来指定要捕获进程 pid,从而过滤输出,只输出指定进程信息。

1.9K10

eBPF 入门开发实践教程四: eBPF 捕获进程打开文件系统调用集合,使用全局变量过滤进程 pid

本文是 eBPF 入门开发实践教程第四篇,主要介绍如何捕获进程打开文件系统调用集合,并使用全局变量 eBPF 过滤进程 pid。...将程序许可证设置 "GPL",这是运行 eBPF 程序必要条件。这个 eBPF 程序可以通过 libbpf 或 eunomia-bpf 等工具加载到内核并执行。...这种设计使得用户态程序能够在运行时动态地控制 eBPF 程序行为。我们例子,全局变量 pid_target 用于过滤进程 PID。...用户态程序可以设置此变量值,以便在 eBPF 程序只捕获与指定 PID 相关 sys_openat 系统调用。... eBPF 程序,我们还可以通过定义一个全局变量 pid_target 来指定要捕获进程 pid,从而过滤输出,只输出指定进程信息。

59110
  • 入侵检测之syscall监控

    当遇到特定中断以获取执行或作为持久性机制时,可以使用它来注册要执行代码。陷阱命令具有以下格式陷阱“命令列表”信号,其中收到“信号”时将执行“命令列表”。...信号主要用途: 1.使一个进程意识到一个特殊事件发生了(不同事件用不同signal标识) 2.并使目标进程进行相应处理(eg: 执行信号处理函数,signal handler).相应处理也可以是忽略它...开启另外终端,监听本地4444端口 反向跟踪,可以看到调用syscallptrace 0x06:持久化之文件属性syscall监控 权限提升和持久化设置setuid或setgid位,使应用程序将分别以拥有用户或组特权运行...其主要原理将标准输入以及标准输出是否指向一个socket或pipe 以最简单bash反弹例: Linux bash是从左向右读取这条命令,首先系统会创建bash -i子进程,并分配文件描述符:...对应syscallexecve,对应命令监控内容可以参考系列另外一篇:ATT&CK矩阵linux系统实践/命令监控 0x09:隐藏痕迹之系统设置之syscall监控 touch命令用于修改文件或者目录时间属性

    2.6K10

    shell | 不同执行方式区别

    也可以 bash 环境获取到脚本设置变量 [root@lvbibir ~]# cat > test.sh << EOF > #!...@lvbibir ~]# echo $number 22 [root@lvbibir ~]# 其他问题# 关于是否bash 环境运行区别出了变量问题还会存在一些其他影响,如下测试 已知目前存在一个...mysqld 进程,其 pid 29426 ,写一个监控pid脚本 [root@lvbibir ~]# cat test.sh #!.../test.sh mysqld 27396 27397 29426 新开一个终端,查看进程 第一个pid子shell执行监控脚本进程号 第二个pid不太清楚哪里来,也grep不到这个进程号,...应该是脚本执行一瞬间就释放掉了 第三个pid是mysql实际运行进程号 实际脚本pid和mysqldpid顺序不太一样,取决于pid大小 脚本再添加个 grep 过滤掉脚本本身进程来规避这个问题

    55610

    Shell:子shell概念

    目录 shell环境 什么是子shell 子shell分类 shell环境 每个shell进程有一个自己运行环境,不同Shell进程不同Shell环境。...子Shell本质可以理解Shell进程,子进程概念是由父进程概念引申而来Linux系统,系统运行应用程序几乎都是从init(pid1进程进程派生而来,所有这些应用程序都可以视为...子shell会从父shell中继承很多环境,如变量、命令全路径、文件描述符、当前工作目录、陷阱等等,但子shell有很多种类型,不同类型子shell继承环境不相同。...可以使用$BASH_SUBSHELL变量来查看从当前进程开始子shell层数,$BASHPID查看当前所处BASHPID,这不同于特殊变量$$值,因为$$大多数情况下都会从父shell中继承。...注释:使用 fork() 函数可以创建一个子进程;除了 PID进程ID)等极少参数不同外,子进程一切都来自父进程,包括代码、数据、堆栈、打开文件等,就连代码执行位置(状态)都是一样

    1.3K30

    Linux进程基础

    同一个程序可以执行多次,每次都可以在内存开辟独立空间来装载,从而产生多个进程不同进程还可以拥有各自独立IO接口。   ...-bash   23774 16939 ps -o pid,ppid,cmd   我们可以看到,第二个进程bash是第一个进程sudo进程,而第三个进程ps是第二个进程进程。   ...由此,就可以进程建立之后,让它执行与父进程不同功能。   ...在这个信息里,会解释该进程为什么退出。父进程得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从内核取出子进程退出信息,并清空该信息在内核中所占据空间。...当大量僵尸进程积累时,内存空间会被挤占。   进程与线程(thread)   尽管UNIX进程与线程是有联系但不同两个东西,但在Linux,线程只是一种特殊进程

    2.5K30

    C#.NET 启动进程时所使用 UseShellExecute 设置 true 和 false 分别代表什么意思?

    .NET 创建进程时,可以传入 ProcessStartInfo 类一个新实例。在此类型,有一个 UseShellExecute 属性。...---- 本质差异 Process.Start 本质上是启动一个新进程,不过这个属性不同,使得启动进程时候会调用不同 Windows 函数。...那你自然也就了解此属性设置 true 和 false 区别了。...但是: 支持重定向输入和输出 如何选择 UseShellExecute .NET Framework 默认值是 true, .NET Core 默认值是 false。...如果有以下需求,那么建议设置此值 false: 需要明确执行一个已知程序 需要重定向输入和输出 如果你有以下需求,那么建议设置此值 true 或者保持默认: 需要打开文档、媒体、网页文件等 需要打开

    1.2K20

    第三十七章 : 奇珍异宝

    我们 bash 学习旅程最后一站,我们将看一些零星知识点。当然我们之前章节已经涵盖了很多方面,但是还有许多 bash 特性我们没有涉及到。...虽然组命令和子 shell 看起来相似,并且它们都能用来重定向合并流,但是两者之间有一个很重要不同之处。...在这个例子,我们看到该子脚本是非常简单。真正操作通过父脚本完成。父脚本,子脚本被启动,并被放置到后台运行。子脚本进程 ID 记录在 pid 变量,这个变量值是 $!...父脚本继续,然后执行一个以子进程 PID 参数 wait 命令。这就导致父脚本暂停运行,直到子脚本退出,父脚本随之结束。...这是因为管道另一端没有任何对象来接收数据。这种现象被称为管道阻塞。一旦我们绑定一个进程到管道另一端,该进程开始从管道读取输入时候,管道阻塞现象就不存在了。

    61210

    Linuxfuser命令用法详解

    zkfc日志里面,有一个warn:PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8090 via ssh: bash: fuser: 未找到命令 原因是最小化安装...F:打开文件,用于写操作。默认不显示。 r:指示该目录进程根目录。 m:指示进程使用该文件进行内存映射,抑或该文件共享库文件,被进程映射进内存。...-k:杀掉访问文件进程。如果没有指定-signal就会发送SIGKILL信号。 -i:杀掉进程之前询问用户,如果没有-k这个选项会被忽略。 -l:列出所有已知信号名称。...-u:每个PID后面添加进程拥有者用户名称。 -v:详细模式。输出似ps命令输出,包含PID,USER,COMMAND等许多域,如果是内核访问那么PIDkernel....– 重置所有的选项,把信号设置SIGKILL. 参数 文件:可以是文件名或者TCP、UDP端口号。

    2.3K21

    【DB笔试面试700】Oracle,如何彻底杀掉会话?V$SESSIONSTATUSKILLED如何找到后台OS进程

    ♣ 题目部分 Oracle,如何彻底杀掉会话?V$SESSIONSTATUSKILLED情况下如何找到相关后台OS进程?...所有所持有的资源,所以,执行完ALTER SYSTEM KILL SESSION后,会话还是一直存在(V$SESSION视图中存在,且后边OS进程也存在)。...所以,执行命令KILL SESSION时候,可以在后边加上IMMEDIATE,这样没有事务情况下,相关会话就会立即被删除而不会变为KILLED状态(V$SESSION视图中不存在),当有事务存在情况下...另外,由于变为KILLED状态会话PADDR列都变成了另外一个值,因此,通过平常连接方式就没有办法关联到后台进程Oracle 11g下提供了CREATOR_ADDR列,该列可以关联到后台进程,...对于Oracle 10g可以通过特殊SQL找到后台进程号。

    2.3K10

    Tomcat进程意外退出,元凶居然是他...

    /bin/sh sleep 4400 & echo "shell exit" 运行a.sh脚本之后,sleep 4400进程pid与pgid是不同,pgid是其父进程id,即已经退出了a.sh...交互模式与非交互模式对作业控制(job control)默认方式不同 为什么交互模式下shell不会对后台进程处理SIGINT信号设置忽略,而非交互模式下会设置忽略呢?...因为默认如果采用父进程进程组ID,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程每个成员,假设后台进程也是父进程成员,因为作业控制需要不能忽略SIGINT,你终端随意...ctrl-c就可能导致所有的后台进程退出,显然这样是不合理;所以为了避免这种干扰后台进程设置自己pgid。...不开启作业控制的话,脚本里后台进程可以通过设置忽略SIGINT信号来避免父进程对组成员传播,因为对它来说这个信号已经没有意义。

    4K10

    Tomcat 进程意外突崩,元凶居然是它...

    /bin/sh sleep 4400 & echo "shell exit" 运行a.sh脚本之后,sleep 4400进程pid与pgid是不同,pgid是其父进程id,即已经退出了a.sh...交互模式与非交互模式对作业控制(job control)默认方式不同 为什么交互模式下shell不会对后台进程处理SIGINT信号设置忽略,而非交互模式下会设置忽略呢?...因为默认如果采用父进程进程组ID,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程每个成员,假设后台进程也是父进程成员,因为作业控制需要不能忽略SIGINT,你终端随意...ctrl-c就可能导致所有的后台进程退出,显然这样是不合理;所以为了避免这种干扰后台进程设置自己pgid。...不开启作业控制的话,脚本里后台进程可以通过设置忽略SIGINT信号来避免父进程对组成员传播,因为对它来说这个信号已经没有意义。

    1.1K10

    linux杀死进程五种方法「建议收藏」

    -i 交互方式,杀死进程之前征求确认信息。 -l 列出所有已知信号名。 -q 如果没有进程杀死, 不会提出抱怨。 -v 报告信号是否成功发送。 -V 显示版本信息。...KNOWN bugS (已知 BUGS) 以文件方式杀死只对那些执行时一直打开可执行文件起作用, 也即, 混杂可执行文件不能够通过这种方式杀死。...两次扫描间隙, 如果进程消失了而被代之以一个有同样 PID 进程, killall -w 侦测不到。...l 显示长列表 终端执行ps aux, 各列输出字段含义: USER 进程所有者 PID 进程ID PPID 父进程 %CPU...  例如在Ubuntu强制结束一个已成僵尸名称为:firefox,PID:1603进程,可以如下操作:   方法一:   (1)ctrl+alt+t,调出终端,输入 top,然后就可以看到现在系统进程

    42.6K50

    2022年HW蓝方技战法总结

    由于运维人员也会执行bash、nc等指令,避免误报,递归分析shell日志每条命令进程,如果发现是web类进程调用shell则出发告警(如父进程是java、httpd 子进程是sh、python)...2、配置虚拟进程 完成本机诱捕陷阱后,需要对虚拟机周围形成联动诱捕体系,以防止攻击者绕过本机陷阱,直接对网络可达其他主机进行渗透。可通过配置虚拟进程,模仿真实高危服务,与真实业务共同对外发布。...选定具有为授权访问漏洞数据库服务作为陷阱模板。保证拟真性,需详细分析每个应用系统真实业务模式,针对性部署redis、zookeeper、es、mongodb等虚拟进程。...3、基于地域维度分析 由于多地部署方式,不同数据中心所处网络位置不同,如果多个数据中心同时增加了新增访问ip,则该ip对制定单位攻击ip。...,将该序列威胁情报库应用威胁相似度计算模型,计算情报库相似度高攻击序列。

    3.3K20

    进程组、会话、控制终端概念,如何创建守护进程

    例如登陆shell(例如bash)通过调用int tcsetpgrp(int fd, pid_t pgrp); 函数设置某个进程组pgrp关联终端设备fd,该函数执行成功后,该进程组pgrp成为前台进程组...当在shell里运行一行命令后(不带&)创建一个新进程组,命令行如果有多个命令会创建多个进程,这些进程都处于该新建进程,shell将该新建进程设置前台进程组并将自己暂时设置后台进程组。...守护进程创建流程 守护进程创建流程如下: 1. 创建子进程,父进程退出 2. 进程创建新会话 3. 改变当前目录根目录 4. 重设文件权限掩码 5....Linux,每当系统发现一个孤儿进程,就会自动由1号进程收养。原先进程就会变成init进程进程。 2. 进程创建新会话 setsid()函数作用。...设置文件权限掩码函数是umask()。在这里,通常使用方法umask(0)。即赋予最大能力。 5.

    1.5K20

    系统进程管理查看

    ; -n:选择不同名称空间,指定关键字进行搜索,如 文件、UDP、TCP -u:每个进程后显示所属用户名。...--lines:设置显示画面的列数。 --no-headers:此选项效果和指定"h"选项相同,只列表格式方面稍有差异。...,系统每一个进程分配一个识别码,称为PID VSZ:该进程使用虚拟內存量(KB) RSS:该进程占用固定內存量(KB)(驻留数量) (RSS is the “resident set size...命令 - 进程杀死 描述:用来Linux杀死执行程序或工作进程命令, kill可将指定信息送至程序,预设信息SIGTERM(15),可将指定程序终止,若仍无法终止该程序,可使用SIGKILL...unshare --mount /bin/bash # 2.隔离ipcNamespace unshare --ipc /bin/bash # 3.把当前进程 user namespace 设置成了

    88420

    进程组、会话、终端概念深入理解守护进程

    sshd(10177) ps:进程进程组ID都是 10263,父进程bash(10179),因为是 Shell 上执行命令 cat:进程组 ID 与 ps 进程组 ID 相同,父进程同样是...3、会话(session) 多个进程组构成一个「会话」,建立会话进程是会话领导进程,该进程 ID 会话 SID。会话每个进程组称为一个「作业」。...4、设置当前目录根目录 如果守护进程的当前工作目录是/usr/home目录,那么管理员卸载/usr分区时会报错。为了避免这个问题,可以调用chdir()函数将工作目录设置根目录/。...5、设置文件权限掩码 文件权限掩码是指屏蔽掉文件权限对应位。由于使用 fork()函数新建进程继承了父进程文件权限掩码,这就给该子进程使用文件带来了诸多麻烦。...该守护进程启动时会读一个配置文件/etc/syslog.conf。该文件决定了不同种类消息会发送向何处。

    1.1K20

    短小精干Unix类后门Tiny shell使用与分析

    值 FAKE_PROC_NAME 是用于伪装显示后门运行后进程名字,比如这里设置/bin/bash, 那么后门运行后,用ps -ef 或者netstat 查看,则显示执行程序是/bin/bash...这里修改成bash mv tshd bash 如果不修改的话,直接运行后门进程,则使用lsof -i:8080 查看, COMMAND不会显示tsh.h设置伪装进程名字 所以这里要修改一下可执行文件名字...被控端进程也是守护进程PID3082 大约30秒后(这个等待时间可在编译时设置,见上文),被控端shell就反弹到了控制端 然后此时查看被控端相关和后门相关进程信息: 其中 -bash 是真实bash...进程 这里PID3082、3147都是后门守护进程,伪装成了’/bin/bash’, PID3148进程是后门守护进程执行系统命令exec /bin/bash —login 反弹出来shell...,父进程退出,这样fork出来进程就会成为孤儿进程被init托管(也就是pid3048进程) 当PID 3048这个进程成功连接上控制端监听端口之后,则又fork一个进程用(姑且称之为子进程

    5.6K51
    领券